public function compare_response_with_answer(array $response, question_answer $answer) { global $CFG, $currentanswerwithhint; require_once $CFG->dirroot . '/question/type/regexp/locallib.php'; $response['answer'] = remove_blanks($response['answer']); if ($currentanswerwithhint) { $response['answer'] = $currentanswerwithhint; } if ($response == $this->get_correct_response()) { return true; } // do NOT match student response against Answer 1 : if it matches, already matched by get_correct_response() above // and Answer 1 may contain metacharacters that do not follow correct regex syntax // get id of Answer 1 foreach ($this->answers as $key => $value) { break; } // if this is Answer 1 then return; do not try to match if ($key == $answer->id) { return; } return self::compare_string_with_wildcard($response['answer'], $answer->answer, $answer->fraction, !$this->usecase); }
public function specific_feedback(question_attempt $qa) { $question = $qa->get_question(); $currentanswer = remove_blanks($qa->get_last_qt_var('answer')); $ispreview = false; $completemessage = ''; $closestcomplete = false; foreach ($qa->get_reverse_step_iterator() as $step) { $hintadded = $step->has_behaviour_var('_helps') === true; break; } $closest = $question->closest; if ($hintadded) { // hint added one letter or hint added letter and answer is complete $answer = $question->get_matching_answer(array('answer' => $closest[0])); // help has added letter OR word and answer is complete $isstateimprovable = $qa->get_behaviour()->is_state_improvable($qa->get_state()); if ($closest[2] == 'complete' && $isstateimprovable) { $closestcomplete = true; $class = '"correctness correct"'; $completemessage = '<div class=' . $class . '>' . get_string("clicktosubmit", "qtype_regexp") . '</div>'; } } else { $answer = $question->get_matching_answer(array('answer' => $qa->get_last_qt_var('answer'))); } if ($closest[3]) { $closest[3] = '[' . $closest[3] . ']'; // rest of submitted answer, in red } $f = ''; // student's response with corrections to be displayed in feedback div $f = '<span style="color:#0000FF;">' . $closest[1] . '<strong>' . $closest[4] . '</strong></span> ' . $closest[3]; // color blue for correct words/letters if ($answer && $answer->feedback || $closestcomplete == true) { return $question->format_text($f . $answer->feedback . $completemessage, $answer->feedbackformat, $qa, 'question', 'answerfeedback', $answer->id); } else { return $f; } }