moodle/mod/quiz/review.php
gustav_delius 34283aa87d The teacher now can choose whether to see the advanced quiz
options or not. This is handled as in the resource module. The
"Show advanced options" button is only shown if the admin has
chosen to declare some of the options as advanced.

There are now 4 review options as suggested by Martin in
http://moodle.org/mod/forum/discuss.php?d=16709

Provides separate buttons "Update this quiz" and "Edit questions",
see http://moodle.org/mod/forum/discuss.php?d=16708. To make this
possible edit.php can now be called with a quiz id and it saves
its data itself rather than relying on mod.php.

mod.html now has a "Save changes" and a "Save changes and edit questions" button.

"Attempt quiz now" button gets a different language string for
re-attempts. This is currently set to "Re-attempt quiz".

After viewing the feedback for an attempt the "Continue" button
leads back to the course homepage, as requested in bugs 1224 and
1976. If there is no feedback the user is brought straight to quiz/view.php.
2005-01-02 07:15:19 +00:00

153 lines
4.9 KiB
PHP

<?php // $Id$
// This page prints a review of a particular quiz attempt
require_once("../../config.php");
require_once("lib.php");
optional_variable($id); // Course Module ID, or
optional_variable($q); // quiz ID
require_variable($attempt); // A particular attempt ID for review
if ($id) {
if (! $cm = get_record("course_modules", "id", $id)) {
error("Course Module ID was incorrect");
}
if (! $course = get_record("course", "id", $cm->course)) {
error("Course is misconfigured");
}
if (! $quiz = get_record("quiz", "id", $cm->instance)) {
error("Course module is incorrect");
}
} else {
if (! $quiz = get_record("quiz", "id", $q)) {
error("Course module is incorrect");
}
if (! $course = get_record("course", "id", $quiz->course)) {
error("Course is misconfigured");
}
if (! $cm = get_coursemodule_from_instance("quiz", $quiz->id, $course->id)) {
error("Course Module ID was incorrect");
}
}
if (! $attempt = get_record("quiz_attempts", "id", $attempt)) {
error("No such attempt ID exists");
}
require_login($course->id);
if (!isteacher($course->id)) {
if (!$quiz->review) {
error(get_string("noreview", "quiz"));
}
if (time() < $quiz->timeclose and $quiz->review == QUIZ_REVIEW_AFTER) {
error(get_string("noreviewuntil", "quiz", userdate($quiz->timeclose)));
}
if (time() > $quiz->timeclose and $quiz->review == QUIZ_REVIEW_BEFORE) {
error(get_string("noreview", "quiz"));
}
if ($attempt->userid != $USER->id) {
error("This is not your attempt!");
}
}
add_to_log($course->id, "quiz", "review", "review.php?id=$cm->id&amp;attempt=$attempt->id", "$quiz->id", "$cm->id");
// Print the page header
$strquizzes = get_string("modulenameplural", "quiz");
$strquiz = get_string("modulename", "quiz");
$strreport = get_string("report", "quiz");
$strreview = get_string("review", "quiz");
$strname = get_string("name");
$strattempts = get_string("attempts", "quiz");
$strscore = get_string("score", "quiz");
$strgrade = get_string("grade");
$strbestgrade = get_string("bestgrade", "quiz");
$strtimetaken = get_string("timetaken", "quiz");
$strtimecompleted = get_string("timecompleted", "quiz");
$stroverdue = get_string("overdue", "quiz");
print_header_simple("$quiz->name", "",
"<a href=\"index.php?id=$course->id\">$strquizzes</a>
-> <a href=\"view.php?id=$cm->id\">$quiz->name</a> -> $strreview",
"", "", true);
echo '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>'; // for overlib
print_heading($quiz->name);
/// Include Javascript protection for this page if required
if (!empty($quiz->popup)) {
include("protect_js.php");
}
if (!($questions = quiz_get_attempt_questions($quiz, $attempt))) {
error("Unable to get questions from database for quiz $quiz->id attempt $attempt->id number $attempt->attempt");
}
if (!$result = quiz_grade_responses($quiz, $questions)) {
error("Could not re-grade this quiz attempt!");
}
$timelimit = (int)$quiz->timelimit * 60;
$overtime = 0;
if ($timetaken = ($attempt->timefinish - $attempt->timestart)) {
if($timelimit && $timetaken > ($timelimit + 60)) {
$overtime = $timetaken - $timelimit;
$overtime = format_time($overtime);
}
$timetaken = format_time($timetaken);
} else {
$timetaken = "-";
}
$table->align = array("right", "left");
$table->data[] = array("$strtimetaken:", $timetaken);
$table->data[] = array("$strtimecompleted:", userdate($attempt->timefinish));
if (!empty($overtime)) {
$table->data[] = array("$stroverdue:", $overtime);
}
if ($quiz->grade) {
if($overtime) {
$result->sumgrades = "0";
$result->percentage = "0";
$result->grade = "0.0";
}
$table->data[] = array("$strscore:", "$result->sumgrades/$quiz->sumgrades ($result->percentage %)");
$table->data[] = array("$strgrade:", "$result->grade/$quiz->grade");
}
print_table($table);
if (isteacher($course->id)) {
print_continue("report.php?q=$quiz->id");
} else {
print_continue("view.php?q=$quiz->id");
}
$quiz->feedback = true;
$quiz->correctanswers = true;
$quiz->shuffleanswers = false;
$quiz->shufflequestions = false;
quiz_print_quiz_questions($quiz, $questions, $result);
if (isteacher($course->id)) {
print_continue("report.php?q=$quiz->id");
} else {
print_continue("view.php?q=$quiz->id");
}
print_footer($course);
?>