Example #1
0
 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);
 }
Example #2
0
 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;
     }
 }