Refactored printing of feedback images and printing of feedback html classes. See MDL-7467 for more details.

This commit is contained in:
vyshane
2006-12-18 06:04:47 +00:00
parent 88878a5be2
commit 2b0870563d
6 changed files with 67 additions and 114 deletions
+21 -16
View File
@@ -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 = '<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" />';
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;
}
}
+10 -22
View File
@@ -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 = '<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.
$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="partiallycorrect"';
$feedbackimg = '<img src="'.$CFG->pixpath.'/i/tick_amber_big.gif" alt="'.get_string('partiallycorrect', 'quiz').'" width="16" height="16" />';
}
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 "<img src=\"$CFG->pixpath/i/feedback.gif\" alt=\"$feedback\" />";
}
echo $feedbackimg;
echo $feedbackimg;
break;
case 'multichoice':
$outputoptions = '<option></option>'; // 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 "<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\" />";
}
echo $feedbackimg;
echo $feedbackimg;
break;
default:
error("Unable to recognize questiontype ($wrapped->qtype) of
+15 -33
View File
@@ -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 = "<input $readonly id=\"$a->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 = '<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" />';
}
}
}
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);
+6 -12
View File
@@ -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 = '<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" />';
}
$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 = '<img src="'.$CFG->pixpath.'/i/cross_red_big.gif" alt="'.get_string('incorrect', 'quiz').'" width="16" height="16" />';
}
}
}
+2 -2
View File
@@ -12,11 +12,11 @@
</div>
<div class="answer">
<span <?php echo $trueclass; ?>>
<span <?php echo 'class="'.$trueclass.'"'; ?>>
<?php echo $radiotrue ?>
<?php echo $truefeedbackimg; ?>
</span>
<span <?php echo $falseclass; ?>>
<span <?php echo 'class="'.$falseclass.'"'; ?>>
<?php echo $radiofalse ?>
<?php echo $falsefeedbackimg; ?>
</span>
+13 -29
View File
@@ -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 = '<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" />';
}
}
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';