. /** * This page handles editing and creation of quiz overrides * * @package mod_quiz * @copyright 2010 Matt Petro * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ use mod_quiz\form\edit_override_form; use mod_quiz\quiz_settings; require_once(__DIR__ . '/../../config.php'); require_once($CFG->dirroot.'/mod/quiz/lib.php'); require_once($CFG->dirroot.'/mod/quiz/locallib.php'); $cmid = optional_param('cmid', 0, PARAM_INT); $overrideid = optional_param('id', 0, PARAM_INT); $action = optional_param('action', null, PARAM_ALPHA); $reset = optional_param('reset', false, PARAM_BOOL); $override = null; if ($overrideid) { $override = $DB->get_record('quiz_overrides', ['id' => $overrideid], '*', MUST_EXIST); $quizobj = quiz_settings::create($override->quiz); } else { $quizobj = quiz_settings::create_for_cmid($cmid); } $quiz = $quizobj->get_quiz(); $cm = $quizobj->get_cm(); $course = $quizobj->get_course(); $context = $quizobj->get_context(); $manager = $quizobj->get_override_manager(); $url = new moodle_url('/mod/quiz/overrideedit.php'); if ($action) { $url->param('action', $action); } if ($overrideid) { $url->param('id', $overrideid); } else { $url->param('cmid', $cmid); } $PAGE->set_url($url); // Activate the secondary nav tab. $PAGE->set_secondary_active_tab("mod_quiz_useroverrides"); require_login($course, false, $cm); // Add or edit an override. $manager->require_manage_capability(); if ($overrideid) { // Editing an override. $data = clone $override; if (!$manager->can_view_override($override, $course, $cm)) { throw new \moodle_exception('invalidoverrideid', 'quiz'); } } else { // Creating a new override. $data = new stdClass(); } // Merge quiz defaults with data. $keys = ['timeopen', 'timeclose', 'timelimit', 'attempts', 'password']; foreach ($keys as $key) { if (!isset($data->{$key}) || $reset) { $data->{$key} = $quiz->{$key}; } } // If we are duplicating an override, then clear the user/group and override id // since they will change. if ($action === 'duplicate') { $override->id = null; $override->userid = null; $override->groupid = null; } // True if group-based override. $groupmode = !empty($data->groupid) || ($action === 'addgroup' && empty($overrideid)); $overridelisturl = new moodle_url('/mod/quiz/overrides.php', ['cmid' => $cm->id]); if (!$groupmode) { $overridelisturl->param('mode', 'user'); } // Setup the form. $mform = new edit_override_form($url, $cm, $quiz, $context, $groupmode, $override); $mform->set_data($data); if ($mform->is_cancelled()) { redirect($overridelisturl); } else if (optional_param('resetbutton', 0, PARAM_ALPHA)) { $url->param('reset', true); redirect($url); } else if ($fromform = $mform->get_data()) { // Only include id when editing (i.e. action is empty). if (empty($action) && !empty($overrideid)) { $fromform->id = $overrideid; } // Process the data. $id = $manager->save_override((array) $fromform); if (!empty($fromform->submitbutton)) { redirect($overridelisturl); } // The user pressed the 'again' button, so redirect back to this page. $url->remove_params('cmid'); $url->param('action', 'duplicate'); $url->param('id', $id); redirect($url); } // Print the form. $pagetitle = get_string('editoverride', 'quiz'); $PAGE->navbar->add($pagetitle); $PAGE->set_pagelayout('admin'); $PAGE->add_body_class('limitedwidth'); $PAGE->set_title($pagetitle); $PAGE->set_heading($course->fullname); $PAGE->activityheader->set_attrs([ "title" => format_string($quiz->name, true, ['context' => $context]), "description" => "", "hidecompletion" => true ]); echo $OUTPUT->header(); $mform->display(); echo $OUTPUT->footer();