diff --git a/question/type/shortanswer/questiontype.php b/question/type/shortanswer/questiontype.php index ffa1b40a518..290afc9585a 100644 --- a/question/type/shortanswer/questiontype.php +++ b/question/type/shortanswer/questiontype.php @@ -227,6 +227,17 @@ class question_shortanswer_qtype extends default_questiontype { return preg_match($regexp, trim($string)); } + /* + * Override the parent class method, to remove escaping from asterisks. + */ + function get_correct_responses(&$question, &$state) { + $response = parent::get_correct_responses($question, $state); + if (is_array($response)) { + $response[''] = addslashes(str_replace('\*', '*', stripslashes($response['']))); + } + return $response; + } + /// BACKUP FUNCTIONS //////////////////////////// /* diff --git a/question/type/shortanswer/simpletest/testquestiontype.php b/question/type/shortanswer/simpletest/testquestiontype.php index 380a97478a2..571b9ec0a67 100644 --- a/question/type/shortanswer/simpletest/testquestiontype.php +++ b/question/type/shortanswer/simpletest/testquestiontype.php @@ -67,6 +67,40 @@ class question_shortanswer_qtype_test extends UnitTestCase { $this->assertTrue($this->qtype->compare_string_with_wildcard('[a-z]', '[a-z]', false)); $this->assertTrue($this->qtype->compare_string_with_wildcard('\{}/', '\{}/', true)); } + + function test_get_correct_responses() { + $answer1 = new stdClass; + $answer1->id = 17; + $answer1->answer = "frog"; + $answer1->fraction = 1; + $answer2 = new stdClass; + $answer2->id = 23; + $answer2->answer = "f*g"; + $answer2->fraction = 1; + $answer3 = new stdClass; + $answer3->id = 29; + $answer3->answer = "12\*13"; + $answer3->fraction = 1; + $answer4 = new stdClass; + $answer4->id = 31; + $answer4->answer = "*"; + $answer4->fraction = 0; + $question = new stdClass; + $question->options->answers = array( + 17 => $answer1, + 23 => $answer2, + 29 => $answer3, + 31 => $answer4 + ); + $state = new stdClass; + $this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => 'frog')); + $question->options->answers[17]->fraction = 0; + $this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => 'f*g')); + $question->options->answers[23]->fraction = 0; + $this->assertEqual($this->qtype->get_correct_responses($question, $state), array('' => '12*13')); + $question->options->answers[29]->fraction = 0; + $this->assertNull($this->qtype->get_correct_responses($question, $state)); + } } ?>