]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-6386/MDL-6462 - yet more special character issues with multianswer. I think I...
authortjhunt <tjhunt>
Tue, 20 Mar 2007 14:30:44 +0000 (14:30 +0000)
committertjhunt <tjhunt>
Tue, 20 Mar 2007 14:30:44 +0000 (14:30 +0000)
question/type/multianswer/questiontype.php
question/type/questiontype.php

index d50b0e99a21c050f857ddb24e9411d4477a39f6d..971d29dc0a7bca683811297e8424a865b1e76ba7 100644 (file)
@@ -236,7 +236,7 @@ class embedded_cloze_qtype extends default_questiontype {
 
             $inputname = $nameprefix.$positionkey;
             if (isset($state->responses[$positionkey])) {
-                $response = stripslashes($state->responses[$positionkey]);
+                $response = $state->responses[$positionkey];
             } else {
                 $response = null;
             }
@@ -277,7 +277,7 @@ class embedded_cloze_qtype extends default_questiontype {
                 }
 
                 if (!empty($chosenanswer->feedback)) {
-                    $feedback = str_replace("'", "\\'", $chosenanswer->feedback);
+                    $feedback = s(str_replace(array("\\", "'"), array("\\\\", "\\'"), $chosenanswer->feedback));
                     $popup = " onmouseover=\"return overlib('$feedback', STICKY, MOUSEOFF, CAPTION, '$strfeedback', FGCOLOR, '#FFFFFF');\" ".
                              " onmouseout=\"return nd();\" ";
                 }
@@ -297,7 +297,7 @@ class embedded_cloze_qtype extends default_questiontype {
                 case 'shortanswer':
                 case 'numerical':
                     echo " <input $style $readonly $popup name=\"$inputname\"
-                            type=\"text\" value=\"".s($response)."\" size=\"12\" /> ";
+                            type=\"text\" value=\"".s($response, true)."\" size=\"12\" /> ";
                     if (!empty($feedback) && !empty($USER->screenreader)) {
                         echo "<img src=\"$CFG->pixpath/i/feedback.gif\" alt=\"$feedback\" />";
                     }
@@ -308,7 +308,7 @@ class embedded_cloze_qtype extends default_questiontype {
                     foreach ($answers as $mcanswer) {
                         $selected = $response == $mcanswer->id
                                 ? ' selected="selected" ' : '';
-                        $outputoptions .= "<option value=\"$mcanswer->id\" $selected>$mcanswer->answer</option>";
+                        $outputoptions .= '<option value="' . $mcanswer->id . '" $selected>' . s($mcanswer->answer, true) . '</option>';
                     }
                     // In the next line, $readonly is invalid HTML, but it works in
                     // all browsers. $disabled would be valid, but then the JS for
@@ -344,7 +344,7 @@ class embedded_cloze_qtype extends default_questiontype {
         $teststate = clone($state);
         $state->raw_grade = 0;
         foreach($question->options->questions as $key => $wrapped) {
-            $state->responses[$key] = html_entity_decode($state->responses[$key]);
+            $state->responses[$key] = $state->responses[$key];
             $teststate->responses = array('' => $state->responses[$key]);
             $teststate->raw_grade = 0;
             if (false === $QTYPES[$wrapped->qtype]
@@ -650,7 +650,6 @@ define("ANSWER_REGEX_ANSWER_TYPE_SHORTANSWER", 5);
 define("ANSWER_REGEX_ALTERNATIVES", 6);
 
 function qtype_multianswer_extract_question($text) {
-
     $question = new stdClass;
     $question->qtype = 'multianswer';
     $question->questiontext = $text;
@@ -701,7 +700,7 @@ function qtype_multianswer_extract_question($text) {
                 $wrapped->fraction[] = '0';
             }
             if (isset($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK])) {
-                $wrapped->feedback[] = $altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK];
+                $wrapped->feedback[] = html_entity_decode($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK], ENT_QUOTES, 'UTF-8');
             } else {
                 $wrapped->feedback[] = '';
             }
@@ -715,7 +714,8 @@ function qtype_multianswer_extract_question($text) {
                     $wrapped->tolerance[] = 0;
                 }
             } else { // Tolerance can stay undefined for non numerical questions
-                $wrapped->answer[] = $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER];
+                // Undo quoting done by the HTML editor.
+                $wrapped->answer[] = html_entity_decode($altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], ENT_QUOTES, 'UTF-8');
             }
             $tmp = explode($altregs[0], $remainingalts, 2);
             $remainingalts = $tmp[1];
index 0bb442b140ee1539ae65f375e89509a8c5f092a5..1419b59b1e18a050bb80213c7fbd128156a826d1 100644 (file)
@@ -436,7 +436,7 @@ class default_questiontype {
         if ($question->options->answers) {
             foreach ($question->options->answers as $answer) {
                 if (((int) $answer->fraction) === 1) {
-                    return array('' => $answer->answer);
+                    return array('' => addslashes($answer->answer));
                 }
             }
         }