moodle/mod/quiz/preview.php
defacer 9407d4563f According to the final comments in SC#65:
Made isteacher() require that the first parameter (course id) be
specified and non-empty. If it is empty, [i.e., 0, which was used to
simulate what has now become isteacherinanycourse()], then the return
value IS correct but a warning is printed on screen. This should allow
us to track down any such calls in legacy modules without breaking Moodle.

The correct way to check for teacher status in ANY course is now to
call isteacherinanycourse().
2005-01-23 21:38:01 +00:00

105 lines
3.3 KiB
PHP

<?php // $Id$
require_once("../../config.php");
require_once("locallib.php");
require_variable($id); // question id
optional_variable($quizid, 0);
if (! $question = get_record("quiz_questions", "id", $id)) {
error("This question doesn't exist");
}
if (! $category = get_record("quiz_categories", "id", $question->category)) {
error("This question doesn't belong to a valid category!");
}
if ($quizid) {
if (! $quiz = get_record('quiz', 'id', $quizid)) {
error('Incorrect quiz id');
}
} else {
// make fake quiz
$quiz->id = 0;
$quiz->course = $category->course;
$quiz->name = "";
$quiz->intro = "";
$quiz->timeopen = 0;
$quiz->timeclose = 0;
$quiz->attempts = $CFG->quiz_attempts;
$quiz->attemptonlast = $CFG->quiz_attemptonlast;
$quiz->feedback = $CFG->quiz_showfeedback;
$quiz->correctanswers = $CFG->quiz_showanswer;
$quiz->grademethod = $CFG->quiz_grademethod;
$quiz->review = $CFG->quiz_allowreview;
$quiz->shufflequestions = $CFG->quiz_shufflequestions;
$quiz->shuffleanswers = $CFG->quiz_shuffleanswers;
$quiz->questions = "$question->id";
$quiz->sumgrades = $question->defaultgrade;
$quiz->grade = $CFG->quiz_maximumgrade;
$quiz->timecreated = 0;
$quiz->timemodified = 0;
$quiz->timelimit = $CFG->quiz_timelimit;
$quiz->password = $CFG->quiz_password;
$quiz->subnet = $CFG->quiz_subnet;
$quiz->popup = $CFG->quiz_popup;
}
$qtype = $question->qtype;
require_login();
if (!isteacherinanycourse()) {
error('This page is for teachers only');
}
if (!isteacher($category->course) and !$category->publish) {
error("You can't preview these questions!");
}
print_header();
print_heading(get_string("previewquestion","quiz"));
if ($rawanswers = data_submitted()) {
$rawanswers = (array)$rawanswers;
foreach ($rawanswers as $key => $value) { // Parse input for question->response
$postedId = quiz_extract_posted_id($key);
if ($id == $postedId) $question->response[$key] = trim($value);
}
print_simple_box_start("center", "90%");
$resultdetails = $QUIZ_QTYPES[$question->qtype]->grade_response($question, quiz_qtype_nameprefix($question));
$question->maxgrade = 1;
$quiz->correctanswers=1;
$quiz->feedback=1;
$quiz->grade=1;
$QUIZ_QTYPES[$question->qtype]->print_question(1, $quiz, $question, true, $resultdetails);
print_simple_box_end();
echo "<p align=\"center\"><input name=\"backbtn\" type=\"button\"
onclick=\"history.back()\" value=\"".get_string("back", "quiz")."\" />\n";
echo "<input type=\"button\" onClick=\"window.close()\" value=\"" . get_string("close", "quiz") . "\" /></p>\n";
} else { //show question list
echo "<form method=\"post\" action=\"preview.php\">\n";
echo "<input type=\"hidden\" name=\"id\" value=\"$id\" />\n";
print_simple_box_start("center", "90%");
$readonly = false;
$resultdetails = NULL;
$QUIZ_QTYPES[$question->qtype]->print_question(1, $quiz, $question, $readonly, $resultdetails);
print_simple_box_end();
echo "<br />";
echo "<center>";
echo "<input name=\"submit\" type=\"submit\" value=\"".get_string("checkanswer", "quiz")."\" />\n";
echo "<input type=\"button\" onClick=\"window.close()\" value=\"" . get_string("close", "quiz") . "\" />";
echo "</center>";
echo "</form>";
}
print_footer();
?>