<td class="c1 control <?php echo $answer->class ?>">
<?php echo $answer->control; ?>
</td>
-<?php if (!empty($answer->feedback)) { ?>
+ <td>
+ <?php echo $answer->feedbackimg; ?>
+ </td>
+ <?php if (!empty($answer->feedback)) { ?>
<td class="c0 feedback">
<?php echo $answer->feedback; ?>
</td>
-<?php } ?>
+ <?php } ?>
</tr>
<?php } ?>
</table>
and $options->correct_responses
and isset($correctanswers[$subquestion->id])
and ($correctanswers[$subquestion->id] == $response)) {
- $a->class = ' highlight ';
+ $a->class = ' correct ';
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ } else if ($response) {
+ $a->class = ' incorrect ';
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
} else {
- $a->class = '';
- }
+ $a->class = ' ';
+ $a->feedbackimg = ' ';
+ }
$a->control = choose_from_menu($answers, $menuname, $response, 'choose', '', 0,
true, $options->readonly);
// Determine feedback popup if any
$popup = '';
$style = '';
+ $feedbackimg = '';
if ($options->feedback) {
$chosenanswer = null;
switch ($wrapped->qtype) {
if (!empty($chosenanswer) && $options->correct_responses) {
if (!isset($chosenanswer->fraction)
|| $chosenanswer->fraction <= 0.0) {
- // The response must have been totally wrong:
+ // The response must have been totally wrong.
$style = 'class="incorrect"';
-
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
} else if ($chosenanswer->fraction >= 1.0) {
- // The response was correct!!
+ // The response was correct.
$style = 'class="correct"';
-
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
} else {
- // This response did at least give some credit:
- $style = 'class="partialcorrect"';
+ // This response did at least give some credit.
+ $style = 'class="partiallycorrect"';
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_amber_big.gif" alt="'.get_string('partiallycorrect', 'quiz').'" width="16" height="16" />';
}
} else {
$style = '';
+ $feedbackimg = '';
}
}
if (!empty($feedback) && $USER->screenreader) {
echo "<img src=\"$CFG->pixpath/i/feedback.gif\" alt=\"$feedback\" />";
}
+ echo $feedbackimg;
break;
case 'multichoice':
$outputoptions = '<option></option>'; // Default empty option
? ' selected="selected" ' : '';
$outputoptions .= "<option value=\"$mcanswer->id\" $selected>$mcanswer->answer</option>";
}
- // In the next line, $readonly is invalid HTML, but it works in
- // all browsers. $disabled would be valid, but then the JS for
- // displaying the feedback does not work. Of course, we should
- // not be relying on JS (for accessibility reasons), but that is
- //a bigger problem.
- echo "<select $popup $readonly $style name=\"$inputname\">";
- echo $outputoptions;
- echo '</select>';
- if (!empty($feedback) && $USER->screenreader) {
+ // In the next line, $readonly is invalid HTML, but it works in
+ // all browsers. $disabled would be valid, but then the JS for
+ // 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.
+ echo "<span $style><select $popup $readonly $style name=\"$inputname\">";
+ echo $outputoptions;
+ echo '</select></span>';
+ if (!empty($feedback) && $USER->screenreader) {
echo "<img src=\"$CFG->pixpath/i/feedback.gif\" alt=\"$feedback\" />";
- }
- break;
- default:
- error("Unable to recognize questiontype ($wrapped->qtype) of
- question part $positionkey.");
- break;
+ }
+ echo $feedbackimg;
+ break;
+ default:
+ error("Unable to recognize questiontype ($wrapped->qtype) of
+ question part $positionkey.");
+ break;
}
echo "</label>"; // MDL-7497
}
<td class="c1 text <?php echo $answer->class ?>">
<label for="<?php echo $answer->id ?>">
<?php echo $answer->text; ?>
+ <?php echo $answer->feedbackimg; ?>
</label>
</td>
<td class="c0 feedback">
$answer = &$answers[$aid];
$qnumchar = chr(ord('a') + $key);
$checked = '';
-
+ $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;
}
} else {
$type = ' type="checkbox" ';
$name = "name=\"{$question->name_prefix}{$aid}\"";
- $checked = isset($state->responses[$aid])
- ? 'checked="checked"' : '';
+ if (isset($state->responses[$aid])) {
+ $checked = 'checked="checked"';
+ $chosen = true;
+ }
}
$a = new stdClass;
$a->id = $question->name_prefix . $aid;
+ $a->class = '';
+ $a->feedbackimg = '';
// Print the control
$a->control = "<input $readonly id=\"$a->id\" $name $checked $type value=\"$aid\"" .
" alt=\"" . s($answer->answer) . '" />';
- // Print the text by the control highlighting if correct responses
- // should be shown and the current answer is the correct answer in
- // the single selection case or has a positive score in the multiple
- // selection case
- $a->class = ($options->readonly && $options->correct_responses &&
- is_array($correctanswers) && in_array($aid, $correctanswers)) ?
- 'highlight' : '';
+ if ($options->readonly) {
+ // Means we need to display answer correctness.
+ if ($answer->fraction == 1) {
+ if ($chosen) {
+ $a->class = 'correct';
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ } else {
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_small.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ }
+ } else if ($answer->fraction > 0 && $answer->fraction < 1) {
+ if ($chosen) {
+ $a->class = 'partiallycorrect';
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_amber_big.gif" alt="'.get_string('partiallycorrect', 'quiz').'" width="16" height="16" />';
+ } else {
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_amber_small.gif" alt="'.get_string('partiallycorrect', 'quiz').'" width="16" height="16" />';
+ }
+ } else {
+ if ($chosen) {
+ $a->class = 'incorrect';
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ } else {
+ $a->feedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_small.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ }
+ }
+ }
// Print the answer text
$a->text = format_text("$qnumchar. $answer->answer", FORMAT_MOODLE, $formatoptions, $cmoptions->course);
</div>
<div class="answer">
- <input type="text" <?php echo "$readonly $inputname $value"; ?> size="80"/>
+ <input type="text" class="<?php echo $class; ?>" <?php echo "$readonly $inputname $value"; ?> size="80"/>
+ <?php echo $feedbackimg; ?>
</div>
<?php if ($feedback) { ?>
<div class="feedback">
$inputname = ' name="'.$nameprefix.'" ';
$feedback = '';
+ $class = '';
+ $feedbackimg = '';
+
if ($options->feedback) {
foreach($question->options->answers as $answer) {
- if($this->test_response($question, $state, $answer)) {
- if ($answer->feedback) {
+ if ($this->test_response($question, $state, $answer)) {
+ // Answer was correct or partially correct.
+ if ($answer->fraction == 1) {
+ $class = 'correct';
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ } else {
+ $class = 'partiallycorrect';
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_amber_big.gif" alt="'.get_string('partiallycorrect', 'quiz').'" width="16" height="16" />';
+ }
+ if ($answer->feedback) {
$feedback = format_text($answer->feedback, true, $formatoptions, $cmoptions->course);
}
break;
- }
+ } else {
+ $class = 'incorrect';
+ $feedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ }
}
}
print_string('partiallycorrect', 'quiz');
// MDL-7496
if ($correctanswer) {
- echo ('<div class="correctness correct">');
+ echo ('<div class="correctness">');
print_string('correctansweris', 'quiz', s($correctanswer));
echo ('</div>');
}
// MDL-7496
print_string('incorrect', 'quiz');
if ($correctanswer) {
- echo ('<div class="correctness correct">');
+ echo ('<div class="correctness">');
print_string('correctansweris', 'quiz', s($correctanswer));
echo ('</div>');
}
<div class="answer">
<span <?php echo $trueclass; ?>>
<?php echo $radiotrue ?>
+ <?php echo $truefeedbackimg; ?>
</span>
<span <?php echo $falseclass; ?>>
<?php echo $radiofalse ?>
+ <?php echo $falsefeedbackimg; ?>
</span>
</div>
<?php if ($feedback) { ?>
$falseanswer = &$answers[$question->options->falseanswer];
$correctanswer = ($trueanswer->fraction == 1) ? $trueanswer : $falseanswer;
+ $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 which answer is correct if we need to highlight it
- if ($options->correct_responses) {
- $trueclass = ($trueanswer->fraction) ? ' class="highlight"' : '';
- $falseclass = ($falseanswer->fraction) ? ' class="highlight"' : '';
- } else {
- $trueclass = '';
- $falseclass = '';
- }
+ // Work out visual feedback for answer correctness.
+ if ($truechecked) {
+ if ($correctanswer == $trueanswer) {
+ $trueclass = ' class="correct"';
+ $falseclass = '';
+ $truefeedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ $falsefeedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_small.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ } else if ($correctanswer == $falseanswer) {
+ $trueclass = '';
+ $falseclass = ' class="correct"';
+ $truefeedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_small.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ $falsefeedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_big.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ }
+ } else if ($falsechecked) {
+ if ($correctanswer == $trueanswer) {
+ $trueclass = '';
+ $falseclass = ' class="incorrect"';
+ $truefeedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_small.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ $falsefeedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ } else if ($correctanswer == $falseanswer) {
+ $trueclass = ' class="incorrect"';
+ $falseclass = '';
+ $truefeedbackimg = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
+ $falsefeedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_green_small.gif" alt="'.get_string('correct', 'quiz').'" width="16" height="16" />';
+ }
+ }
$inputname = ' name="'.$question->name_prefix.'" ';
$trueid = $question->name_prefix.'true';