]> git.mjollnir.org Git - moodle.git/commitdiff
Teachers can choose to allow review of quizzes, which means that students
authormoodler <moodler>
Wed, 1 Jan 2003 14:47:11 +0000 (14:47 +0000)
committermoodler <moodler>
Wed, 1 Jan 2003 14:47:11 +0000 (14:47 +0000)
are allowed to see past quizzes.  This only works once the quiz is completely
closed (to perhaps prevent easy cheating).

lang/en/help/quiz/review.html [new file with mode: 0644]
lang/en/quiz.php
mod/quiz/lib.php
mod/quiz/mod.html
mod/quiz/report.php
mod/quiz/view.php

diff --git a/lang/en/help/quiz/review.html b/lang/en/help/quiz/review.html
new file mode 100644 (file)
index 0000000..6376609
--- /dev/null
@@ -0,0 +1,6 @@
+<P ALIGN=CENTER><B>Allow review once quiz is closed</B></P>
+
+<P>If you enable this option, then students will be able to 
+   review their past attempts at this quiz.</P>
+
+<P>This is only enabled once the quiz is closed.</P>
index e5eb1ace21a3f1cdacfa32836b53d61871427cee..9af28c6c19dd2260f033bc0d71ee052e1c5d1bbf 100644 (file)
@@ -6,6 +6,7 @@ $string['modulenameplural'] = "Quizzes";
 #------------------------------------------------------------
 
 $string['addselectedtoquiz'] = "Add selected to quiz";
+$string['allowreview'] = "Allow review";
 $string['alwaysavailable'] = "Always available";
 $string['alreadysubmitted'] = "It is likely that you have already submitted this attempt";
 $string['answer'] = "Answer";
@@ -68,6 +69,8 @@ $string['noanswers'] = "No answers were selected!";
 $string['noattempts'] = "No attempts have been made on this quiz";
 $string['nomoreattempts'] = "No more attempts are allowed";
 $string['noquestions'] = "No questions have been added yet";
+$string['noreview'] = "You are not allowed to review this quiz";
+$string['noreviewuntil'] = "You are not allowed to review this quiz until \$a";
 $string['publish'] = "Publish";
 $string['question'] = "Question";
 $string['questioninuse'] = "The question '\$a' is currently being used:";
index 241d31b54e401b65fbeb7445b9f083f728f3c284..58cc00a3982758aeaf1ff98e3490141b468d140e 100644 (file)
@@ -453,10 +453,10 @@ function quiz_print_question($number, $questionid, $grade, $courseid,
                $answer = $answers[$answerid];
                $qnum = $key + 1;
 
-               if ($feedback and $response[$answerid]) {
-                   $checked = "CHECKED";
-               } else {
+               if (empty($feedback) or empty($response[$answerid])) {
                    $checked = "";
+               } else {
+                   $checked = "CHECKED";
                }
                echo "<TR><TD valign=top>";
                if ($options->single) {
@@ -465,14 +465,14 @@ function quiz_print_question($number, $questionid, $grade, $courseid,
                    echo "<INPUT $checked TYPE=CHECKBOX NAME=q$question->id"."a$answer->id VALUE=\"$answer->id\">";
                }
                echo "</TD>";
-               if ($feedback and $correct[$answer->id]) {
-                   echo "<TD valign=top CLASS=highlight>$qnum. $answer->answer</TD>";
-               } else {
+               if (empty($feedback) or empty($correct[$answer->id])) {
                    echo "<TD valign=top>$qnum. $answer->answer</TD>";
+               } else {
+                   echo "<TD valign=top CLASS=highlight>$qnum. $answer->answer</TD>";
                }
-               if ($feedback) {
+               if (!empty($feedback)) {
                    echo "<TD valign=top>&nbsp;";
-                   if ($response[$answerid]) {
+                   if (!empty($response[$answerid])) {
                        quiz_print_comment($feedback[$answerid]);
                    }
                    echo "</TD>";
@@ -498,7 +498,7 @@ function quiz_print_question($number, $questionid, $grade, $courseid,
 function quiz_print_quiz_questions($quiz, $results=NULL) {
 // Prints a whole quiz on one page.
 
-    if (!$quiz->questions) {
+    if (empty($quiz->questions)) {
         notify("No questions have been defined!", "view.php?id=$cm->id");
         return false;
     }
@@ -520,12 +520,20 @@ function quiz_print_quiz_questions($quiz, $results=NULL) {
         $response       = NULL;
         $actualgrades   = NULL;
         $correct        = NULL;
-        if ($results) {
-            $feedback      = $results->feedback[$questionid];
-            $response      = $results->response[$questionid];
-            $actualgrades  = $results->grades[$questionid];
+        if (!empty($results)) {
+            if (!empty($results->feedback[$questionid])) {
+                $feedback      = $results->feedback[$questionid];
+            }
+            if (!empty($results->response[$questionid])) {
+                $response      = $results->response[$questionid];
+            }
+            if (!empty($results->grades[$questionid])) {
+                $actualgrades  = $results->grades[$questionid];
+            }
             if ($quiz->correctanswers) {
-                $correct   = $results->correct[$questionid];
+                if (!empty($results->correct[$questionid])) {
+                    $correct   = $results->correct[$questionid];
+                }
             }
         }
 
@@ -536,7 +544,7 @@ function quiz_print_quiz_questions($quiz, $results=NULL) {
         echo "<BR>";
     }
 
-    if (!$results) {
+    if (empty($results)) {
         echo "<CENTER><INPUT TYPE=submit VALUE=\"".get_string("savemyanswers", "quiz")."\"></CENTER>";
     }
     echo "</FORM>";
index 4617f3ac1c3a5fb1069bd42229d485567aefaa76..b347bca6dbf000d49927cbf1d90228c9d04a0ab1 100644 (file)
@@ -28,6 +28,9 @@
     if (empty($form->correctanswers)) {
         $form->correctanswers = "";
     }
+    if (empty($form->review)) {
+        $form->review = "";
+    }
     if (empty($form->grade)) {
         $form->grade = "";
     }
      ?>
     </TD>
 </TR>
+<TR valign=top>
+    <TD align=right><P><B><? print_string("allowreview", "quiz") ?>:</B></P></TD>
+    <TD>
+    <?
+        $options = array();
+        $options[0] = get_string("no");
+        $options[1] = get_string("yes");
+        choose_from_menu($options, "review", "$form->review", "");
+        helpbutton("review", get_string("allowreview","quiz"), "quiz");
+     ?>
+    </TD>
+</TR>
 <TR valign=top>
     <TD align=right><P><B><? print_string("maximumgrade") ?>:</B></P></TD>
     <TD>
index e3f08233529808ce6974be8459b4ed3b6423cc8d..3a2364f87dcace4d0805cb62bb6f35a010dc5574 100644 (file)
@@ -9,6 +9,7 @@
     optional_variable($q);     // quiz ID
 
     optional_variable($attempt);     // A particular attempt ID
+    optional_variable($review);      // A particular attempt ID for review by student
     optional_variable($regrade);     // Regrade all attempts
 
     if ($id) {
 
     require_login($course->id);
 
+
     if (!isteacher($course->id)) {
-        error("Only teachers can see this page");
+        if (!$quiz->review) {
+            error(get_string("noreview", "quiz"));
+        }
+        if (time() < $quiz->timeclose) {
+            error(get_string("noreviewuntil", "quiz", userdate($quiz->timeclose)));
+        }
+        if (empty($review)) {
+            error("You are using this script wrongly.");
+        }
+    }
+
+    if (!empty($review)) {
+        $attempt = $review;
     }
 
     add_to_log($course->id, "quiz", "report", "report.php?id=$cm->id", "$quiz->id");
 
     print_heading($quiz->name);
 
-    if ($attempt) {  // Show a particular attempt
+    if (!empty($attempt)) {  // Show a particular attempt
 
         if (! $attempt = get_record("quiz_attempts", "id", $attempt)) {
             error("No such attempt ID exists");
         }
 
+        if (!isteacher($course->id)) {
+            if ($attempt->userid != $USER->id) {
+                error("This is not your attempt!");
+            }
+        }
+
         if (! $questions = quiz_get_attempt_responses($attempt)) {
             error("Could not reconstruct quiz results for attempt $attempt->id!");
         }
         $table->data[] = array("$strgrade:", "$result->grade/$quiz->grade");
         print_table($table);
 
-        print_continue("report.php?q=$quiz->id");
+        if (empty($review)) {
+            print_continue("report.php?q=$quiz->id");
+        } else {
+            print_continue("view.php?q=$quiz->id");
+        }
 
         $quiz->feedback = true;
         $quiz->correctanswers = true;
         quiz_print_quiz_questions($quiz, $result);
 
-        print_continue("report.php?q=$quiz->id");
+        if (empty($review)) {
+            print_continue("report.php?q=$quiz->id");
+        } else {
+            print_continue("view.php?q=$quiz->id");
+        }
         print_footer($course);
         exit;
     }
 
-    if ($regrade) {
+    if (!empty($regrade)) {
         if (!$attempts = get_records("quiz_attempts", "quiz", $quiz->id)) {
             print_header(get_string("noattempts", "quiz"));
             print_continue("report.php?id=$cm->id");
index cd8c68132baca5afa1994fc4138e7bc56117ace6..7ecb933c5d0e8db81de4348673f2ba413c2b3e51 100644 (file)
@@ -96,6 +96,8 @@
     $strgrade         = get_string("grade");
     $strbestgrade     = get_string("bestgrade", "quiz");
 
+    $mygrade = quiz_get_best_grade($quiz->id, $USER->id);
+
     if ($numattempts) { 
         $table->head = array($strattempt, $strtimetaken, $strtimecompleted, "$strgrade / $quiz->grade");
         $table->align = array("CENTER", "CENTER", "LEFT", "RIGHT");
             } else {
                 $timetaken = "-";
             }
+            $attemptgrade = format_float(($attempt->sumgrades/$quiz->sumgrades)*$quiz->grade);
+            if ($attemptgrade == $mygrade) {
+                $attemptgrade = "<SPAN class=highlight>$attemptgrade</SPAN>";
+            }
+            if (!$available and $quiz->review) {
+                $attemptgrade = "<A HREF=\"report.php?q=$quiz->id&review=$attempt->id\">$attemptgrade</A>";
+            }
             $table->data[] = array( $attempt->attempt, 
                                     format_time($attempt->timefinish - $attempt->timestart),
                                     userdate($attempt->timefinish), 
-                                    format_float(($attempt->sumgrades/$quiz->sumgrades)*$quiz->grade) );
+                                    $attemptgrade);
         }
         print_table($table);
     }
         echo "<P ALIGN=CENTER>".get_string("quizclosed", "quiz", userdate($quiz->timeclose));
     }
 
-    $mygrade = quiz_get_best_grade($quiz->id, $USER->id);
 
     if (!$quiz->questions) {
         print_heading(get_string("noquestions", "quiz"));