From: vyshane Date: Mon, 18 Dec 2006 06:04:47 +0000 (+0000) Subject: Refactored printing of feedback images and printing of feedback html classes. See... X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=2b0870563d18c8dd398cfa30ce9b882e5e5fedf9;p=moodle.git Refactored printing of feedback images and printing of feedback html classes. See MDL-7467 for more details. --- diff --git a/question/type/match/questiontype.php b/question/type/match/questiontype.php index fb382778f6..628a2b5489 100644 --- a/question/type/match/questiontype.php +++ b/question/type/match/questiontype.php @@ -275,27 +275,32 @@ class question_match_qtype extends default_questiontype { $a = new stdClass; $a->text = $this->format_text($subquestion->questiontext, $question->questiontextformat, $cmoptions); - + /// Drop-down list: $menuname = $nameprefix.$subquestion->id; $response = isset($state->responses[$subquestion->id]) ? $state->responses[$subquestion->id] : '0'; + + $a->class = ' '; + $a->feedbackimg = ' '; + if ($options->readonly - and $options->correct_responses - and isset($correctanswers[$subquestion->id]) - and ($correctanswers[$subquestion->id] == $response)) { - $a->class = ' correct '; - $a->feedbackimg = ''.get_string('correct', 'quiz').''; - } else if ($response) { - $a->class = ' incorrect '; - $a->feedbackimg = ''.get_string('incorrect', 'quiz').''; + and $options->correct_responses + and isset($correctanswers[$subquestion->id]) + and ($correctanswers[$subquestion->id] == $response)) { + + $correctresponse = 1; } else { - $a->class = ' '; - $a->feedbackimg = ' '; - } - - $a->control = choose_from_menu($answers, $menuname, $response, 'choose', '', 0, - true, $options->readonly); + $correctresponse = 0; + } + + if ($response) { + $a->class = question_get_feedback_class($correctresponse); + $a->feedbackimg = question_get_feedback_image($correctresponse); + } + + $a->control = choose_from_menu($answers, $menuname, $response, 'choose', + '', 0, true, $options->readonly); // Neither the editing interface or the database allow to provide // fedback for this question type. @@ -306,7 +311,7 @@ class question_match_qtype extends default_questiontype { // && !empty($subquestion->options->answers[$responses[$key]]->feedback)) { // print_comment($subquestion->options->answers[$responses[$key]]->feedback); //} - + $anss[] = $a; } } diff --git a/question/type/multianswer/questiontype.php b/question/type/multianswer/questiontype.php index e8aa50bd4c..6f28fc8698 100644 --- a/question/type/multianswer/questiontype.php +++ b/question/type/multianswer/questiontype.php @@ -237,7 +237,7 @@ class embedded_cloze_qtype extends default_questiontype { // Determine feedback popup if any $popup = ''; $style = ''; - $feedbackimg = ''; + $feedbackimg = ''; if ($options->feedback) { $chosenanswer = null; switch ($wrapped->qtype) { @@ -276,24 +276,12 @@ class embedded_cloze_qtype extends default_questiontype { } /// Determine style - if (!empty($chosenanswer) && $options->correct_responses) { - if (!isset($chosenanswer->fraction) - || $chosenanswer->fraction <= 0.0) { - // The response must have been totally wrong. - $style = 'class="incorrect"'; - $feedbackimg = ''.get_string('incorrect', 'quiz').''; - } else if ($chosenanswer->fraction >= 1.0) { - // The response was correct. - $style = 'class="correct"'; - $feedbackimg = ''.get_string('correct', 'quiz').''; - } else { - // This response did at least give some credit. - $style = 'class="partiallycorrect"'; - $feedbackimg = ''.get_string('partiallycorrect', 'quiz').''; - } + if (!empty($response)) { + $style = 'class = "'.question_get_feedback_class($chosenanswer->fraction).'"'; + $feedbackimg = question_get_feedback_image($chosenanswer->fraction); } else { $style = ''; - $feedbackimg = ''; + $feedbackimg = ''; } } @@ -306,7 +294,7 @@ class embedded_cloze_qtype extends default_questiontype { if (!empty($feedback) && $USER->screenreader) { echo "pixpath/i/feedback.gif\" alt=\"$feedback\" />"; } - echo $feedbackimg; + echo $feedbackimg; break; case 'multichoice': $outputoptions = ''; // Default empty option @@ -320,16 +308,16 @@ class embedded_cloze_qtype extends default_questiontype { // displaying the feedback does not work. Of course, we should // not be relying on JS (for accessibility reasons), but that is // a bigger problem. - // - // The span is used for safari, which does not allow styling of - // selects. + // + // The span is used for safari, which does not allow styling of + // selects. echo "'; if (!empty($feedback) && $USER->screenreader) { echo "pixpath/i/feedback.gif\" alt=\"$feedback\" />"; } - echo $feedbackimg; + echo $feedbackimg; break; default: error("Unable to recognize questiontype ($wrapped->qtype) of diff --git a/question/type/multichoice/questiontype.php b/question/type/multichoice/questiontype.php index 6e4d1f7a3c..cfa9bee52a 100644 --- a/question/type/multichoice/questiontype.php +++ b/question/type/multichoice/questiontype.php @@ -283,58 +283,40 @@ class question_multichoice_qtype extends default_questiontype { $answer = &$answers[$aid]; $qnumchar = chr(ord('a') + $key); $checked = ''; - $chosen = false; - + $chosen = false; + if ($question->options->single) { $type = 'type="radio"'; $name = "name=\"{$question->name_prefix}\""; if (isset($state->responses['']) and $aid == $state->responses['']) { $checked = 'checked="checked"'; - $chosen = true; + $chosen = true; } } else { $type = ' type="checkbox" '; $name = "name=\"{$question->name_prefix}{$aid}\""; if (isset($state->responses[$aid])) { - $checked = 'checked="checked"'; - $chosen = true; - } + $checked = 'checked="checked"'; + $chosen = true; + } } $a = new stdClass; $a->id = $question->name_prefix . $aid; - $a->class = ''; - $a->feedbackimg = ''; + $a->class = ''; + $a->feedbackimg = ''; // Print the control $a->control = "id\" $name $checked $type value=\"$aid\"" . " alt=\"" . s($answer->answer) . '" />'; - if ($options->readonly) { - // Means we need to display answer correctness. - if ($answer->fraction == 1) { - if ($chosen) { - $a->class = 'correct'; - $a->feedbackimg = ''.get_string('correct', 'quiz').''; - } else { - $a->feedbackimg = ''.get_string('correct', 'quiz').''; - } - } else if ($answer->fraction > 0 && $answer->fraction < 1) { - if ($chosen) { - $a->class = 'partiallycorrect'; - $a->feedbackimg = ''.get_string('partiallycorrect', 'quiz').''; - } else { - $a->feedbackimg = ''.get_string('partiallycorrect', 'quiz').''; - } - } else { - if ($chosen) { - $a->class = 'incorrect'; - $a->feedbackimg = ''.get_string('incorrect', 'quiz').''; - } else { - $a->feedbackimg = ''.get_string('incorrect', 'quiz').''; - } - } - } + if ($options->readonly) { + // Means we need to display answer correctness. + if ($chosen) { + $a->class = question_get_feedback_class($answer->fraction); + } + $a->feedbackimg = question_get_feedback_image($answer->fraction, $chosen); + } // Print the answer text $a->text = format_text("$qnumchar. $answer->answer", FORMAT_MOODLE, $formatoptions, $cmoptions->course); diff --git a/question/type/shortanswer/questiontype.php b/question/type/shortanswer/questiontype.php index f72398e3ec..6d7aa9149a 100644 --- a/question/type/shortanswer/questiontype.php +++ b/question/type/shortanswer/questiontype.php @@ -146,27 +146,21 @@ class question_shortanswer_qtype extends default_questiontype { $inputname = ' name="'.$nameprefix.'" '; $feedback = ''; - $class = ''; - $feedbackimg = ''; + // Assume wrong answer first. + $class = question_get_feedback_class(0); + $feedbackimg = question_get_feedback_image(0); if ($options->feedback) { foreach($question->options->answers as $answer) { + if ($this->test_response($question, $state, $answer)) { // Answer was correct or partially correct. - if ($answer->fraction == 1) { - $class = 'correct'; - $feedbackimg = ''.get_string('correct', 'quiz').''; - } else { - $class = 'partiallycorrect'; - $feedbackimg = ''.get_string('partiallycorrect', 'quiz').''; - } + $class = question_get_feedback_class($answer->fraction); + $feedbackimg = question_get_feedback_image($answer->fraction); if ($answer->feedback) { $feedback = format_text($answer->feedback, true, $formatoptions, $cmoptions->course); } break; - } else { - $class = 'incorrect'; - $feedbackimg = ''.get_string('incorrect', 'quiz').''; } } } diff --git a/question/type/truefalse/display.html b/question/type/truefalse/display.html index e60642507a..ea9e536fbc 100644 --- a/question/type/truefalse/display.html +++ b/question/type/truefalse/display.html @@ -12,11 +12,11 @@
- > + > - > + > diff --git a/question/type/truefalse/questiontype.php b/question/type/truefalse/questiontype.php index 1877b11e09..d32a654e66 100644 --- a/question/type/truefalse/questiontype.php +++ b/question/type/truefalse/questiontype.php @@ -155,41 +155,25 @@ class question_truefalse_qtype extends default_questiontype { $falseanswer = &$answers[$question->options->falseanswer]; $correctanswer = ($trueanswer->fraction == 1) ? $trueanswer : $falseanswer; - $trueclass = ''; - $falseclass = ''; - $truefeedbackimg = ''; - $falsefeedbackimg = ''; + $trueclass = ''; + $falseclass = ''; + $truefeedbackimg = ''; + $falsefeedbackimg = ''; // Work out which radio button to select (if any) $truechecked = ($state->responses[''] == $trueanswer->id) ? ' checked="checked"' : ''; $falsechecked = ($state->responses[''] == $falseanswer->id) ? ' checked="checked"' : ''; // Work out visual feedback for answer correctness. - if ($truechecked) { - if ($correctanswer == $trueanswer) { - $trueclass = ' class="correct"'; - $falseclass = ''; - $truefeedbackimg = ''.get_string('correct', 'quiz').''; - $falsefeedbackimg = ''.get_string('incorrect', 'quiz').''; - } else if ($correctanswer == $falseanswer) { - $trueclass = ''; - $falseclass = ' class="correct"'; - $truefeedbackimg = ''.get_string('incorrect', 'quiz').''; - $falsefeedbackimg = ''.get_string('correct', 'quiz').''; - } - } else if ($falsechecked) { - if ($correctanswer == $trueanswer) { - $trueclass = ''; - $falseclass = ' class="incorrect"'; - $truefeedbackimg = ''.get_string('correct', 'quiz').''; - $falsefeedbackimg = ''.get_string('incorrect', 'quiz').''; - } else if ($correctanswer == $falseanswer) { - $trueclass = ' class="incorrect"'; - $falseclass = ''; - $truefeedbackimg = ''.get_string('incorrect', 'quiz').''; - $falsefeedbackimg = ''.get_string('correct', 'quiz').''; - } - } + if ($truechecked) { + $trueclass = question_get_feedback_class($trueanswer->fraction); + } else if ($falsechecked) { + $falseclass = question_get_feedback_class($falseanswer->fraction); + } + if (isset($answers[$state->responses['']])) { + $truefeedbackimg = question_get_feedback_image($trueanswer->fraction, !empty($truechecked)); + $falsefeedbackimg = question_get_feedback_image($falseanswer->fraction, !empty($falsechecked)); + } $inputname = ' name="'.$question->name_prefix.'" '; $trueid = $question->name_prefix.'true';