Example #1
0
 function writequestion($question)
 {
     // turns question into string
     // question reflects database fields for general question and specific to type
     // initial string;
     $expout = "";
     // add comment
     $expout .= "// question: {$question->id}  name: {$question->name} \n";
     // get  question text format
     $textformat = $question->questiontextformat;
     $tfname = "";
     if ($textformat != FORMAT_MOODLE) {
         $tfname = text_format_name((int) $textformat);
         $tfname = "[{$tfname}]";
     }
     // output depends on question type
     switch ($question->qtype) {
         case 'category':
             // not a real question, used to insert category switch
             $expout .= "\$CATEGORY: {$question->category}\n";
             break;
         case DESCRIPTION:
             $expout .= '::' . $this->repchar($question->name) . '::';
             $expout .= $tfname;
             $expout .= $this->repchar($question->questiontext, $textformat);
             break;
         case ESSAY:
             $expout .= '::' . $this->repchar($question->name) . '::';
             $expout .= $tfname;
             $expout .= $this->repchar($question->questiontext, $textformat);
             $expout .= "{}\n";
             break;
         case TRUEFALSE:
             $trueanswer = $question->options->answers[$question->options->trueanswer];
             $falseanswer = $question->options->answers[$question->options->falseanswer];
             if ($trueanswer->fraction == 1) {
                 $answertext = 'TRUE';
                 $right_feedback = $trueanswer->feedback;
                 $wrong_feedback = $falseanswer->feedback;
             } else {
                 $answertext = 'FALSE';
                 $right_feedback = $falseanswer->feedback;
                 $wrong_feedback = $trueanswer->feedback;
             }
             $wrong_feedback = $this->repchar($wrong_feedback);
             $right_feedback = $this->repchar($right_feedback);
             $expout .= "::" . $this->repchar($question->name) . "::" . $tfname . $this->repchar($question->questiontext, $textformat) . "{" . $this->repchar($answertext);
             if ($wrong_feedback) {
                 $expout .= "#" . $wrong_feedback;
             } else {
                 if ($right_feedback) {
                     $expout .= "#";
                 }
             }
             if ($right_feedback) {
                 $expout .= "#" . $right_feedback;
             }
             $expout .= "}\n";
             break;
         case MULTICHOICE:
             $expout .= "::" . $this->repchar($question->name) . "::" . $tfname . $this->repchar($question->questiontext, $textformat) . "{\n";
             foreach ($question->options->answers as $answer) {
                 if ($answer->fraction == 1) {
                     $answertext = '=';
                 } elseif ($answer->fraction == 0) {
                     $answertext = '~';
                 } else {
                     $export_weight = $answer->fraction * 100;
                     $answertext = "~%{$export_weight}%";
                 }
                 $expout .= "\t" . $answertext . $this->repchar($answer->answer);
                 if ($answer->feedback != "") {
                     $expout .= "#" . $this->repchar($answer->feedback);
                 }
                 $expout .= "\n";
             }
             $expout .= "}\n";
             break;
         case SHORTANSWER:
             $expout .= "::" . $this->repchar($question->name) . "::" . $tfname . $this->repchar($question->questiontext, $textformat) . "{\n";
             foreach ($question->options->answers as $answer) {
                 $weight = 100 * $answer->fraction;
                 $expout .= "\t=%" . $weight . "%" . $this->repchar($answer->answer) . "#" . $this->repchar($answer->feedback) . "\n";
             }
             $expout .= "}\n";
             break;
         case NUMERICAL:
             $expout .= "::" . $this->repchar($question->name) . "::" . $tfname . $this->repchar($question->questiontext, $textformat) . "{#\n";
             foreach ($question->options->answers as $answer) {
                 if ($answer->answer != '') {
                     $percentage = '';
                     if ($answer->fraction < 1) {
                         $pval = $answer->fraction * 100;
                         $percentage = "%{$pval}%";
                     }
                     $expout .= "\t={$percentage}" . $answer->answer . ":" . (double) $answer->tolerance . "#" . $this->repchar($answer->feedback) . "\n";
                 } else {
                     $expout .= "\t~#" . $this->repchar($answer->feedback) . "\n";
                 }
             }
             $expout .= "}\n";
             break;
         case MATCH:
             $expout .= "::" . $this->repchar($question->name) . "::" . $tfname . $this->repchar($question->questiontext, $textformat) . "{\n";
             foreach ($question->options->subquestions as $subquestion) {
                 $expout .= "\t=" . $this->repchar($subquestion->questiontext) . " -> " . $this->repchar($subquestion->answertext) . "\n";
             }
             $expout .= "}\n";
             break;
         case DESCRIPTION:
             $expout .= "// DESCRIPTION type is not supported\n";
             break;
         case MULTIANSWER:
             $expout .= "// CLOZE type is not supported\n";
             break;
         default:
             // check for plugins
             if ($out = $this->try_exporting_using_qtypes($question->qtype, $question)) {
                 $expout .= $out;
             } else {
                 notify("No handler for qtype '{$question->qtype}' for GIFT export");
             }
     }
     // add empty line to delimit questions
     $expout .= "\n";
     return $expout;
 }
 function export_to_gift($question, $format, $extra = null)
 {
     $expout = '';
     // get question text format
     $textformat = $question->questiontextformat;
     $tfname = '';
     if ($textformat != FORMAT_MOODLE) {
         $tfname = text_format_name((int) $textformat);
         $tfname = "[{$tfname}]";
     }
     $expout .= '::' . $format->repchar($question->name) . '::';
     $expout .= $tfname;
     $expout .= $format->repchar($question->questiontext, $textformat) . " {>\n";
     foreach ($question->options->subquestions as $subquestion) {
         $expout .= ' =' . $format->repchar($subquestion->questiontext) . "\n";
     }
     $expout .= "}\n";
     return $expout;
 }