define("SHORTANSWER", "1");
define("TRUEFALSE", "2");
define("MULTICHOICE", "3");
+define("RANDOM", "4");
$QUIZ_QUESTION_TYPE = array ( MULTICHOICE => get_string("multichoice", "quiz"),
TRUEFALSE => get_string("truefalse", "quiz"),
- SHORTANSWER => get_string("shortanswer", "quiz") );
+ SHORTANSWER => get_string("shortanswer", "quiz"),
+ RANDOM => get_string("random", "quiz") );
echo "<FONT COLOR=\"$THEME->cellheading2\">".text_to_html($text, true, false)."</FONT>";
}
+function quiz_print_correctanswer($text) {
+ global $THEME;
+
+ echo "<P ALIGN=RIGHT><SPAN CLASS=highlight>$text</SPAN></P>";
+}
+
function quiz_print_question($number, $questionid, $grade, $courseid,
- $feedback=NULL, $response=NULL, $actualgrade=NULL) {
+ $feedback=NULL, $response=NULL, $actualgrade=NULL, $correct=NULL) {
/// Prints a quiz question, any format
global $THEME;
$comment = $THEME->cellheading2;
+ $green = "#AAFFAA";
if (!$question = get_record("quiz_questions", "id", $questionid)) {
notify("Error: Question not found!");
if ($feedback) {
quiz_print_comment("<P ALIGN=right>$feedback[0]</P>");
}
+ if ($correct) {
+ $correctanswers = implode(",", $correct);
+ quiz_print_correctanswer($correctanswers);
+ }
break;
case TRUEFALSE:
$falsechecked = "CHECKED";
$feedbackid = $false->id;
}
- echo "<P ALIGN=RIGHT>$stranswer: ";
+ if ($correct) {
+ if ($correct[$true->id]) {
+ $truecorrect = "CLASS=highlight";
+ }
+ if ($correct[$false->id]) {
+ $falsecorrect = "CLASS=highlight";
+ }
+ }
+ echo "<TABLE ALIGN=right cellpadding=5><TR><TD align=right>$stranswer: ";
+ echo "<TD $truecorrect>";
echo "<INPUT $truechecked TYPE=RADIO NAME=\"q$question->id\" VALUE=\"$true->id\">$true->answer";
- echo " ";
+ echo "</TD><TD $falsecorrect>";
echo "<INPUT $falsechecked TYPE=RADIO NAME=\"q$question->id\" VALUE=\"$false->id\">$false->answer</P>";
+ echo "</TD></TR></TABLE><BR CLEAR=ALL>";
if ($feedback) {
quiz_print_comment("<P ALIGN=right>$feedback[$feedbackid]</P>");
}
echo "<INPUT $checked TYPE=CHECKBOX NAME=q$question->id"."a$answer->id VALUE=\"$answer->id\">";
}
echo "</TD>";
- echo "<TD valign=top>$qnum. $answer->answer</TD>";
+ if ($feedback and $correct[$answer->id]) {
+ echo "<TD valign=top CLASS=highlight>$qnum. $answer->answer</TD>";
+ } else {
+ echo "<TD valign=top>$qnum. $answer->answer</TD>";
+ }
if ($feedback) {
echo "<TD valign=top> ";
if ($response[$answerid]) {
echo "</TABLE>";
break;
+ case RANDOM:
+ echo "<P>Random questions not supported yet</P>";
+ break;
+
+
default:
notify("Error: Unknown question type!");
}
echo "<INPUT TYPE=hidden NAME=q VALUE=\"$quiz->id\">";
foreach ($questions as $key => $questionid) {
+ $feedback = NULL;
+ $response = NULL;
+ $actualgrades = NULL;
+ $correct = NULL;
if ($results) {
- $feedback = $results->feedback[$questionid];
- } else {
- $feedback = NULL;
+ $feedback = $results->feedback[$questionid];
+ $response = $results->response[$questionid];
+ $actualgrades = $results->grades[$questionid];
+ if ($quiz->correctanswers) {
+ $correct = $results->correct[$questionid];
+ }
}
+
print_simple_box_start("CENTER", "90%");
quiz_print_question($key+1, $questionid, $grades[$questionid]->grade, $quiz->course,
- $results->feedback[$questionid], $results->response[$questionid], $results->grades[$questionid]);
+ $feedback, $response, $actualgrades, $correct);
print_simple_box_end();
echo "<BR>";
}
AND mc.question = g.question");
break;
+ case RANDOM:
+ return false; // Not done yet
+ break;
+
default:
return false;
}
/// $result->grades[] (array of grades, indexed by question id)
/// $result->response[] (array of response arrays, indexed by question id)
/// $result->feedback[] (array of feedback arrays, indexed by question id)
+/// $result->correct[] (array of feedback arrays, indexed by question id)
if (!$questions) {
error("No questions!");
}
$grade = 0; // default
+ $correct = array();
$feedback = array();
$response = array();
}
$response[0] = $question->answer;
foreach($answers as $answer) { // There might be multiple right answers
+ if ($answer->fraction > $bestshortanswer) {
+ $correct[$answer->id] = $answer->answer;
+ }
if (!$answer->usecase) { // Don't compare case
$answer->answer = strtolower($answer->answer);
$question->answer = strtolower($question->answer);
if ($question->answer == $answer->answer) {
$feedback[0] = $answer->feedback;
$grade = (float)$answer->fraction * $answer->grade;
- continue;
}
}
break;
}
foreach($answers as $answer) { // There should be two answers (true and false)
$feedback[$answer->id] = $answer->feedback;
+ if ($answer->fraction > 0) {
+ $correct[$answer->id] = true;
+ }
if ($question->answer == $answer->id) {
$grade = (float)$answer->fraction * $answer->grade;
$response[$answer->id] = true;
case MULTICHOICE:
foreach($answers as $answer) { // There will be multiple answers, perhaps more than one is right
$feedback[$answer->id] = $answer->feedback;
+ if ($answer->fraction > 0) {
+ $correct[$answer->id] = true;
+ }
+ $correct[$answer->id] = $answer->fraction; // 0 or 1
if ($question->answer) {
foreach ($question->answer as $questionanswer) {
if ($questionanswer == $answer->id) {
}
}
break;
+ case RANDOM:
+ // Not done yet
+ break;
}
$result->sumgrades += $grade;
$result->feedback[$question->id] = $feedback;
$result->response[$question->id] = $response;
+ $result->correct[$question->id] = $correct;
}
$fraction = (float)($result->sumgrades / $quiz->sumgrades);