From 8e6c87ccf3c11b9e2ca7cfd222b6e2a0c67a93db Mon Sep 17 00:00:00 2001 From: moodler Date: Wed, 1 Jan 2003 14:47:11 +0000 Subject: [PATCH] Teachers can choose to allow review of quizzes, which means that students 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 | 6 ++++++ lang/en/quiz.php | 3 +++ mod/quiz/lib.php | 38 +++++++++++++++++++++-------------- mod/quiz/mod.html | 15 ++++++++++++++ mod/quiz/report.php | 38 ++++++++++++++++++++++++++++++----- mod/quiz/view.php | 12 +++++++++-- 6 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 lang/en/help/quiz/review.html diff --git a/lang/en/help/quiz/review.html b/lang/en/help/quiz/review.html new file mode 100644 index 0000000000..6376609f60 --- /dev/null +++ b/lang/en/help/quiz/review.html @@ -0,0 +1,6 @@ +

Allow review once quiz is closed

+ +

If you enable this option, then students will be able to + review their past attempts at this quiz.

+ +

This is only enabled once the quiz is closed.

diff --git a/lang/en/quiz.php b/lang/en/quiz.php index e5eb1ace21..9af28c6c19 100644 --- a/lang/en/quiz.php +++ b/lang/en/quiz.php @@ -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:"; diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 241d31b54e..58cc00a398 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -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 ""; if ($options->single) { @@ -465,14 +465,14 @@ function quiz_print_question($number, $questionid, $grade, $courseid, echo "id"."a$answer->id VALUE=\"$answer->id\">"; } echo ""; - if ($feedback and $correct[$answer->id]) { - echo "$qnum. $answer->answer"; - } else { + if (empty($feedback) or empty($correct[$answer->id])) { echo "$qnum. $answer->answer"; + } else { + echo "$qnum. $answer->answer"; } - if ($feedback) { + if (!empty($feedback)) { echo " "; - if ($response[$answerid]) { + if (!empty($response[$answerid])) { quiz_print_comment($feedback[$answerid]); } echo ""; @@ -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 "
"; } - if (!$results) { + if (empty($results)) { echo "
"; } echo ""; diff --git a/mod/quiz/mod.html b/mod/quiz/mod.html index 4617f3ac1c..b347bca6db 100644 --- a/mod/quiz/mod.html +++ b/mod/quiz/mod.html @@ -28,6 +28,9 @@ if (empty($form->correctanswers)) { $form->correctanswers = ""; } + if (empty($form->review)) { + $form->review = ""; + } if (empty($form->grade)) { $form->grade = ""; } @@ -132,6 +135,18 @@ ?> + +

:

+ + review", ""); + helpbutton("review", get_string("allowreview","quiz"), "quiz"); + ?> + +

:

diff --git a/mod/quiz/report.php b/mod/quiz/report.php index e3f0823352..3a2364f87d 100644 --- a/mod/quiz/report.php +++ b/mod/quiz/report.php @@ -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) { @@ -38,8 +39,21 @@ 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"); @@ -68,12 +82,18 @@ 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!"); } @@ -95,18 +115,26 @@ $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"); diff --git a/mod/quiz/view.php b/mod/quiz/view.php index cd8c68132b..7ecb933c5d 100644 --- a/mod/quiz/view.php +++ b/mod/quiz/view.php @@ -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"); @@ -106,10 +108,17 @@ } else { $timetaken = "-"; } + $attemptgrade = format_float(($attempt->sumgrades/$quiz->sumgrades)*$quiz->grade); + if ($attemptgrade == $mygrade) { + $attemptgrade = "$attemptgrade"; + } + if (!$available and $quiz->review) { + $attemptgrade = "id&review=$attempt->id\">$attemptgrade"; + } $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); } @@ -122,7 +131,6 @@ echo "

".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")); -- 2.39.5