From e51efd7ea7544255f8c4483b344a2ac031152763 Mon Sep 17 00:00:00 2001 From: tjhunt Date: Thu, 15 Mar 2007 12:59:10 +0000 Subject: [PATCH] MDL-6462 - Cloze (multianswer) question special character issues. Merged from MOODLE_16_STABLE. --- question/type/multianswer/questiontype.php | 93 ++++++---------------- 1 file changed, 25 insertions(+), 68 deletions(-) diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php index 4bdc51c20ab..e9ed1b57767 100644 --- a/question/type/multianswer/questiontype.php +++ b/question/type/multianswer/questiontype.php @@ -105,7 +105,7 @@ class embedded_cloze_qtype extends default_questiontype { } function save_question($authorizedquestion, $form, $course) { - $question = qtype_multianswer_extract_question ($form->questiontext); + $question = qtype_multianswer_extract_question($form->questiontext); if (isset($authorizedquestion->id)) { $question->id = $authorizedquestion->id; } @@ -231,8 +231,11 @@ class embedded_cloze_qtype extends default_questiontype { ->get_correct_responses($wrapped, $state); $inputname = $nameprefix.$positionkey; - $response = isset($state->responses[$positionkey]) - ? stripslashes($state->responses[$positionkey]) : null; + if (isset($state->responses[$positionkey])) { + $response = $state->responses[$positionkey]; + } else { + $response = null; + } // Determine feedback popup if any $popup = ''; @@ -597,15 +600,13 @@ define("ANSWER_ALTERNATIVE_FRACTION_REGEX", '=|%(-?[0-9]+)%'); // for the syntax '(? <) - $text = preg_replace('/&(.{2,9}?;)/', '&${1}', $text); - $text = stripslashes_safe($text); - -//////////////////////////////////////// -//// Start of the actual function -//////////////////////////////////////// - $question = new stdClass; $question->qtype = 'multianswer'; $question->questiontext = $text; @@ -703,6 +669,9 @@ function qtype_multianswer_extract_question($text) { } else if(!empty($answerregs[ANSWER_REGEX_ANSWER_TYPE_MULTICHOICE])) { $wrapped->qtype = 'multichoice'; $wrapped->single = 1; + $wrapped->correctfeedback = ''; + $wrapped->partiallycorrectfeedback = ''; + $wrapped->incorrectfeedback = ''; } else { error("Cannot identify qtype $answerregs[2]"); return false; @@ -715,38 +684,34 @@ function qtype_multianswer_extract_question($text) { $wrapped->fraction = array(); $wrapped->feedback = array(); $wrapped->shuffleanswers = 1; - $wrapped->questiontext = addslashes($answerregs[0]); // here we don't want multianswer_escape, because this is editing time information + $wrapped->questiontext = $answerregs[0]; $wrapped->questiontextformat = 0; $remainingalts = $answerregs[ANSWER_REGEX_ALTERNATIVES]; while (preg_match('/~?'.ANSWER_ALTERNATIVE_REGEX.'/', $remainingalts, $altregs)) { if ('=' == $altregs[ANSWER_ALTERNATIVE_REGEX_FRACTION]) { $wrapped->fraction[] = '1'; - } else if ($percentile = - $altregs[ANSWER_ALTERNATIVE_REGEX_PERCENTILE_FRACTION]){ + } else if ($percentile = $altregs[ANSWER_ALTERNATIVE_REGEX_PERCENTILE_FRACTION]){ $wrapped->fraction[] = .01 * $percentile; } else { $wrapped->fraction[] = '0'; } - $wrapped->feedback[] = multianswer_escape( - isset($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK]) - ? $altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK] : ''); + if (isset($altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK])) { + $wrapped->feedback[] = $altregs[ANSWER_ALTERNATIVE_REGEX_FEEDBACK]; + } else { + $wrapped->feedback[] = ''; + } if (!empty($answerregs[ANSWER_REGEX_ANSWER_TYPE_NUMERICAL]) - && ereg(NUMERICAL_ALTERNATIVE_REGEX, - $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], - $numregs) ) - { - $wrapped->answer[] = - multianswer_escape($numregs[NUMERICAL_CORRECT_ANSWER]); + && ereg(NUMERICAL_ALTERNATIVE_REGEX, $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER], $numregs)) { + $wrapped->answer[] = $numregs[NUMERICAL_CORRECT_ANSWER]; if ($numregs[NUMERICAL_ABS_ERROR_MARGIN]) { $wrapped->tolerance[] = - $numregs[NUMERICAL_ABS_ERROR_MARGIN]; + $numregs[NUMERICAL_ABS_ERROR_MARGIN]; } else { $wrapped->tolerance[] = 0; } } else { // Tolerance can stay undefined for non numerical questions - $wrapped->answer[] = multianswer_escape( - $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER]); + $wrapped->answer[] = $altregs[ANSWER_ALTERNATIVE_REGEX_ANSWER]; } $tmp = explode($altregs[0], $remainingalts, 2); $remainingalts = $tmp[1]; @@ -757,15 +722,7 @@ function qtype_multianswer_extract_question($text) { $question->questiontext = implode("{#$positionkey}", explode($answerregs[0], $question->questiontext, 2)); } - $question->questiontext = multianswer_escape($question->questiontext); + $question->questiontext = $question->questiontext; return $question; } - -function multianswer_escape($text) { - $text = str_replace("&", "&", $text); - $text = str_replace('\#', '#', $text); - $text = html_entity_decode($text); - return addslashes($text); -} - ?>