mirror of
https://github.com/moodle/moodle.git
synced 2025-02-18 23:05:30 +01:00
(While I was at it I also turned the autologinguests off for most module pages, except on the index.php pages and the view.php pages for those modules that allow guests)
282 lines
11 KiB
PHP
282 lines
11 KiB
PHP
<?php // $Id$
|
|
|
|
require_once("../../config.php");
|
|
require_once("locallib.php");
|
|
|
|
require_login();
|
|
|
|
$courseid = optional_param('courseid');
|
|
$quizid = optional_param('quizid');
|
|
$page = optional_param('page', 0);
|
|
$perpage = optional_param('perpage', 20);
|
|
|
|
if ($modform = data_submitted() and !empty($modform->course)) { // data submitted
|
|
|
|
$SESSION->modform = $modform; // Save the form in the current session
|
|
|
|
} else if ($quizid) {
|
|
if (! $modform = get_record('quiz', 'id', $quizid)) {
|
|
error("The required quiz doesn't exist");
|
|
}
|
|
$modform->instance = $modform->id;
|
|
$SESSION->modform = $modform; // Save the form in the current session
|
|
|
|
$cm = get_coursemodule_from_instance('quiz', $modform->instance);
|
|
add_to_log($cm->course, 'quiz', 'editquestions',
|
|
"view.php?id=$modform->instance",
|
|
"$modform->name", $cm->id);
|
|
|
|
} else if ($courseid) { // Page retrieve through "Edit Questions" link - no quiz selected
|
|
$modform->course = $courseid;
|
|
unset($modform->instance);
|
|
$SESSION->modform = $modform; // Save the form in the current session
|
|
|
|
add_to_log($courseid, 'quiz', 'editquestions', "index.php?id=$courseid");
|
|
|
|
} else {
|
|
if (!isset($SESSION->modform)) {
|
|
// We currently also get here after editing a question by
|
|
// following the edit link on the review page. Perhaps that should be fixed.
|
|
error('');
|
|
}
|
|
|
|
// The data is obtained from a $SESSION variable. This is mostly for historic reasons.
|
|
// With the way things work now it would be just as possible to get the data from the database.
|
|
$modform = $SESSION->modform;
|
|
}
|
|
|
|
|
|
if (! $course = get_record("course", "id", $modform->course)) {
|
|
error("This course doesn't exist");
|
|
}
|
|
|
|
require_login($course->id, false);
|
|
|
|
if (!isteacheredit($course->id)) {
|
|
error("You can't modify this course!");
|
|
}
|
|
|
|
if (isset($modform->instance)
|
|
&& empty($modform->grades)) // Construct an array to hold all the grades.
|
|
{
|
|
$modform->grades = quiz_get_all_question_grades($modform->questions, $modform->instance);
|
|
}
|
|
|
|
|
|
/// Now, check for commands on this page and modify variables as necessary
|
|
|
|
if (isset($_REQUEST['up']) and confirm_sesskey()) { /// Move the given question up a slot
|
|
$questions = explode(",", $modform->questions);
|
|
if ($questions[0] <> $up) {
|
|
foreach ($questions as $key => $question) {
|
|
if ($up == $question) {
|
|
$swap = $questions[$key-1];
|
|
$questions[$key-1] = $question;
|
|
$questions[$key] = $swap;
|
|
break;
|
|
}
|
|
}
|
|
$modform->questions = implode(",", $questions);
|
|
}
|
|
if (!set_field('quiz', 'questions', $modform->questions, 'id', $modform->instance)) {
|
|
error('Could not save question list');
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['down']) and confirm_sesskey()) { /// Move the given question down a slot
|
|
$questions = explode(",", $modform->questions);
|
|
if ($questions[count($questions)-1] <> $down) {
|
|
foreach ($questions as $key => $question) {
|
|
if ($down == $question) {
|
|
$swap = $questions[$key+1];
|
|
$questions[$key+1] = $question;
|
|
$questions[$key] = $swap;
|
|
break;
|
|
}
|
|
}
|
|
$modform->questions = implode(",", $questions);
|
|
}
|
|
if (!set_field('quiz', 'questions', $modform->questions, 'id', $modform->instance)) {
|
|
error('Could not save question list');
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['add']) and confirm_sesskey()) { /// Add a question to the current quiz
|
|
$rawquestions = $_POST;
|
|
if (!empty($modform->questions)) {
|
|
$questions = explode(",", $modform->questions);
|
|
}
|
|
foreach ($rawquestions as $key => $value) { // Parse input for question ids
|
|
if (substr($key, 0, 1) == "q") {
|
|
$key = substr($key,1);
|
|
if (!empty($questions)) {
|
|
foreach ($questions as $question) {
|
|
if ($question == $key) {
|
|
continue 2;
|
|
}
|
|
}
|
|
}
|
|
$questions[] = $key;
|
|
|
|
$questionrecord = get_record("quiz_questions", "id", $key);
|
|
|
|
if (!empty($questionrecord->defaultgrade)) {
|
|
$modform->grades[$key] = $questionrecord->defaultgrade;
|
|
} else if ($questionrecord->qtype == DESCRIPTION){
|
|
$modform->grades[$key] = 0;
|
|
} else {
|
|
$modform->grades[$key] = 1;
|
|
}
|
|
}
|
|
}
|
|
if (!empty($questions)) {
|
|
$modform->questions = implode(",", $questions);
|
|
} else {
|
|
$modform->questions = "";
|
|
}
|
|
if (!set_field('quiz', 'questions', $modform->questions, 'id', $modform->instance)) {
|
|
error('Could not save question list');
|
|
}
|
|
quiz_questiongrades_update($modform->grades, $modform->instance);
|
|
}
|
|
|
|
if (isset($_REQUEST['delete']) and confirm_sesskey()) { /// Delete a question from the list
|
|
$questions = explode(",", $modform->questions);
|
|
foreach ($questions as $key => $question) {
|
|
if ($question == $delete) {
|
|
unset($questions[$key]);
|
|
unset($modform->grades[$question]);
|
|
if (!(delete_records('quiz_question_grades', 'quiz', $modform->instance, 'question', $question)
|
|
and delete_records('quiz_responses', 'question', $question))) {
|
|
error("Could not delete question responses");
|
|
}
|
|
}
|
|
}
|
|
$modform->questions = implode(",", $questions);
|
|
if (!set_field('quiz', 'questions', $modform->questions, 'id', $modform->instance)) {
|
|
error('Could not save question list');
|
|
}
|
|
}
|
|
|
|
if (isset($_REQUEST['setgrades']) and confirm_sesskey()) { /// The grades have been updated, so update our internal list
|
|
$rawgrades = $_POST;
|
|
unset($modform->grades);
|
|
foreach ($rawgrades as $key => $value) { // Parse input for question -> grades
|
|
if (substr($key, 0, 1) == "q") {
|
|
$key = substr($key,1);
|
|
$modform->grades[$key] = $value;
|
|
}
|
|
}
|
|
if (!set_field('quiz', 'questions', $modform->questions, 'id', $modform->instance)) {
|
|
error('Could not save question list');
|
|
}
|
|
quiz_questiongrades_update($modform->grades, $modform->instance);
|
|
}
|
|
|
|
if (isset($_REQUEST['cat'])) { /// coming from category selection drop-down menu
|
|
$modform->category = $cat;
|
|
}
|
|
|
|
if (isset($_REQUEST['recurse'])) { /// coming from checkbox below category selection form
|
|
$modform->recurse = $recurse;
|
|
}
|
|
|
|
/// all commands have been dealt with, now print the page
|
|
|
|
if (empty($modform->category) or !record_exists('quiz_categories', 'id', $modform->category)) {
|
|
$category = quiz_get_default_category($course->id);
|
|
$modform->category = $category->id;
|
|
}
|
|
if (!isset($modform->recurse)) {
|
|
$modform->recurse = 1;
|
|
}
|
|
|
|
$SESSION->modform = $modform;
|
|
|
|
$strquizzes = get_string('modulenameplural', 'quiz');
|
|
$strediting = get_string('editquestions', "quiz");
|
|
|
|
// Print basic page layout.
|
|
|
|
if (isset($modform->instance) and record_exists_sql("SELECT * FROM {$CFG->prefix}quiz_attempts WHERE quiz = '$modform->instance' AND NOT (userid = '$USER->id') LIMIT 1")){
|
|
// one column layout with table of questions used in this quiz
|
|
print_header_simple($strediting, '',
|
|
"<a href=\"index.php?id=$course->id\">$strquizzes</a>".
|
|
" -> <a href=\"view.php?q=$modform->instance\">$modform->name</a>".
|
|
" -> $strediting");
|
|
print_simple_box_start("center");
|
|
print_heading($modform->name);
|
|
$attemptcount = count_records_select("quiz_attempts", "quiz = '$modform->instance' AND timefinish > 0");
|
|
|
|
$strviewallanswers = get_string("viewallanswers","quiz",$attemptcount);
|
|
$strattemptsexist = get_string("attemptsexist","quiz");
|
|
$usercount = count_records("quiz_grades", "quiz", "$modform->instance");
|
|
$strusers = get_string("users");
|
|
if (! $cm = get_coursemodule_from_instance("quiz", $modform->instance, $course->id)) {
|
|
error("Course Module ID was incorrect");
|
|
}
|
|
notify("$strattemptsexist<br /><a href=\"report.php?id=$cm->id\">$strviewallanswers ($usercount $strusers)</a>");
|
|
|
|
$sumgrades = quiz_print_question_list($modform->questions, $modform->grades, false);
|
|
if (!set_field('quiz', 'sumgrades', $sumgrades, 'id', $modform->instance)) {
|
|
error('Failed to set sumgrades');
|
|
}
|
|
|
|
print_simple_box_end();
|
|
print_continue('view.php?q='.$modform->instance);
|
|
print_footer($course);
|
|
exit;
|
|
}
|
|
|
|
if (!isset($modform->instance)) {
|
|
// one column layout for non-quiz-specific editing page
|
|
print_header_simple($strediting, '',
|
|
"<a href=\"index.php?id=$course->id\">$strquizzes</a>".
|
|
" -> $strediting");
|
|
echo '<table align="center" border="0" cellpadding="2" cellspacing="0">';
|
|
echo '<tr><td valign="top">';
|
|
|
|
} else {
|
|
// two column layout with quiz info in left column
|
|
print_header_simple($strediting, '',
|
|
"<a href=\"index.php?id=$course->id\">$strquizzes</a>".
|
|
" -> <a href=\"view.php?q=$modform->instance\">$modform->name</a>".
|
|
" -> $strediting");
|
|
echo '<table border="0" width="100%" cellpadding="2" cellspacing="0">';
|
|
echo '<tr><td width="50%" valign="top">';
|
|
print_simple_box_start("center", "100%");
|
|
print_heading($modform->name);
|
|
$sumgrades = quiz_print_question_list($modform->questions, $modform->grades);
|
|
if (!set_field('quiz', 'sumgrades', $sumgrades, 'id', $modform->instance)) {
|
|
error('Failed to set sumgrades');
|
|
}
|
|
|
|
print_simple_box_end();
|
|
print_continue('view.php?q='.$modform->instance);
|
|
echo '</td><td valign="top" width="50%">';
|
|
}
|
|
// non-quiz-specific column
|
|
print_simple_box_start("center", "100%");
|
|
// starts with category selection form
|
|
quiz_print_category_form($course, $modform->category, $modform->recurse);
|
|
print_simple_box_end();
|
|
|
|
print_spacer(5,1);
|
|
// continues with list of questions
|
|
print_simple_box_start("center", "100%");
|
|
quiz_print_cat_question_list($modform->category,
|
|
isset($modform->instance), $modform->recurse, $page, $perpage);
|
|
print_simple_box_end();
|
|
if (!isset($modform->instance)) {
|
|
print_continue("index.php?id=$modform->course");
|
|
} else {
|
|
print_continue('view.php?q='.$modform->instance);
|
|
}
|
|
echo '</td></tr>';
|
|
echo '</table>';
|
|
|
|
|
|
|
|
print_footer($course);
|
|
?>
|