Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
< * Base class for the options that control what is visible in an {@link quiz_attempts_report}.
> * File only retained to prevent fatal errors in code that tries to require/include this.
*
< * @package mod_quiz < * @copyright 2012 The Open University < * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
> * @todo MDL-76612 delete this file as part of Moodle 4.6 development. > * @deprecated This file is no longer required in Moodle 4.2+.
*/
< <
defined('MOODLE_INTERNAL') || die();
< require_once($CFG->libdir . '/formslib.php'); < < < /** < * Base class for the options that control what is visible in an {@link quiz_attempts_report}. < * < * @copyright 2012 The Open University < * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later < */ < class mod_quiz_attempts_report_options { < < /** @var string the report mode. */ < public $mode; < < /** @var object the settings for the quiz being reported on. */ < public $quiz; < < /** @var object the course module objects for the quiz being reported on. */ < public $cm; < < /** @var object the course settings for the course the quiz is in. */ < public $course; < < /** < * @var array form field name => corresponding quiz_attempt:: state constant. < */ < protected static $statefields = array( < 'stateinprogress' => quiz_attempt::IN_PROGRESS, < 'stateoverdue' => quiz_attempt::OVERDUE, < 'statefinished' => quiz_attempt::FINISHED, < 'stateabandoned' => quiz_attempt::ABANDONED, < ); < < /** < * @var string quiz_attempts_report::ALL_WITH or quiz_attempts_report::ENROLLED_WITH < * quiz_attempts_report::ENROLLED_WITHOUT or quiz_attempts_report::ENROLLED_ALL < */ < public $attempts = quiz_attempts_report::ENROLLED_WITH; < < /** @var int the currently selected group. 0 if no group is selected. */ < public $group = 0; < < /** < * @var array|null of quiz_attempt::IN_PROGRESS, etc. constants. null means < * no restriction. < */ < public $states = array(quiz_attempt::IN_PROGRESS, quiz_attempt::OVERDUE, < quiz_attempt::FINISHED, quiz_attempt::ABANDONED); < < /** < * @var bool whether to show all finished attmepts, or just the one that gave < * the final grade for the user. < */ < public $onlygraded = false; < < /** @var int Number of attempts to show per page. */ < public $pagesize = quiz_attempts_report::DEFAULT_PAGE_SIZE; < < /** @var string whether the data should be downloaded in some format, or '' to display it. */ < public $download = ''; < < /** @var bool whether the current user has permission to see grades. */ < public $usercanseegrades; < < /** @var bool whether the report table should have a column of checkboxes. */ < public $checkboxcolumn = false; < < /** < * Constructor. < * @param string $mode which report these options are for. < * @param object $quiz the settings for the quiz being reported on. < * @param object $cm the course module objects for the quiz being reported on. < * @param object $coures the course settings for the coures this quiz is in. < */ < public function __construct($mode, $quiz, $cm, $course) { < $this->mode = $mode; < $this->quiz = $quiz; < $this->cm = $cm; < $this->course = $course; < < $this->usercanseegrades = quiz_report_should_show_grades($quiz, context_module::instance($cm->id)); < } < < /** < * Get the URL parameters required to show the report with these options. < * @return array URL parameter name => value. < */ < protected function get_url_params() { < $params = array( < 'id' => $this->cm->id, < 'mode' => $this->mode, < 'attempts' => $this->attempts, < 'onlygraded' => $this->onlygraded, < ); < < if ($this->states) { < $params['states'] = implode('-', $this->states); < } < < if (groups_get_activity_groupmode($this->cm, $this->course)) { < $params['group'] = $this->group; < } < return $params; < } < < /** < * Get the URL to show the report with these options. < * @return moodle_url the URL. < */ < public function get_url() { < return new moodle_url('/mod/quiz/report.php', $this->get_url_params()); < } < < /** < * Process the data we get when the settings form is submitted. This includes < * updating the fields of this class, and updating the user preferences < * where appropriate. < * @param object $fromform The data from $mform->get_data() from the settings form. < */ < public function process_settings_from_form($fromform) { < $this->setup_from_form_data($fromform); < $this->resolve_dependencies(); < $this->update_user_preferences(); < } < < /** < * Set up this preferences object using optional_param (using user_preferences < * to set anything not specified by the params. < */ < public function process_settings_from_params() { < $this->setup_from_user_preferences(); < $this->setup_from_params(); < $this->resolve_dependencies(); < } < < /** < * Get the current value of the settings to pass to the settings form. < */ < public function get_initial_form_data() { < $toform = new stdClass(); < $toform->attempts = $this->attempts; < $toform->onlygraded = $this->onlygraded; < $toform->pagesize = $this->pagesize; < < if ($this->states) { < foreach (self::$statefields as $field => $state) { < $toform->$field = in_array($state, $this->states); < } < } < < return $toform; < } < < /** < * Set the fields of this object from the form data. < * @param object $fromform The data from $mform->get_data() from the settings form. < */ < public function setup_from_form_data($fromform) { < $this->attempts = $fromform->attempts; < $this->group = groups_get_activity_group($this->cm, true); < $this->onlygraded = !empty($fromform->onlygraded); < $this->pagesize = $fromform->pagesize; < < $this->states = array(); < foreach (self::$statefields as $field => $state) { < if (!empty($fromform->$field)) { < $this->states[] = $state; < } < } < } < < /** < * Set the fields of this object from the URL parameters. < */ < public function setup_from_params() { < $this->attempts = optional_param('attempts', $this->attempts, PARAM_ALPHAEXT); < $this->group = groups_get_activity_group($this->cm, true); < $this->onlygraded = optional_param('onlygraded', $this->onlygraded, PARAM_BOOL); < $this->pagesize = optional_param('pagesize', $this->pagesize, PARAM_INT); < < $states = optional_param('states', '', PARAM_ALPHAEXT); < if (!empty($states)) { < $this->states = explode('-', $states); < } < < $this->download = optional_param('download', $this->download, PARAM_ALPHA); < } < < /** < * Set the fields of this object from the user's preferences. < * (For those settings that are backed by user-preferences). < */ < public function setup_from_user_preferences() { < $this->pagesize = get_user_preferences('quiz_report_pagesize', $this->pagesize); < } < < /** < * Update the user preferences so they match the settings in this object. < * (For those settings that are backed by user-preferences). < */ < public function update_user_preferences() { < set_user_preference('quiz_report_pagesize', $this->pagesize); < } < < /** < * Check the settings, and remove any 'impossible' combinations. < */ < public function resolve_dependencies() { < if ($this->group) { < // Default for when a group is selected. < if ($this->attempts === null || $this->attempts == quiz_attempts_report::ALL_WITH) { < $this->attempts = quiz_attempts_report::ENROLLED_WITH; < } < < } else if (!$this->group && $this->course->id == SITEID) { < // Force report on front page to show all, unless a group is selected. < $this->attempts = quiz_attempts_report::ALL_WITH; < < } else if (!in_array($this->attempts, array(quiz_attempts_report::ALL_WITH, quiz_attempts_report::ENROLLED_WITH, < quiz_attempts_report::ENROLLED_WITHOUT, quiz_attempts_report::ENROLLED_ALL))) { < $this->attempts = quiz_attempts_report::ENROLLED_WITH; < } < < $cleanstates = array(); < foreach (self::$statefields as $state) { < if (in_array($state, $this->states)) { < $cleanstates[] = $state; < } < } < $this->states = $cleanstates; < if (count($this->states) == count(self::$statefields)) { < // If all states have been selected, then there is no constraint < // required in the SQL, so clear the array. < $this->states = null; < } < < if (!quiz_report_can_filter_only_graded($this->quiz)) { < // A grading mode like 'average' has been selected, so we cannot do < // the show the attempt that gave the final grade thing. < $this->onlygraded = false; < } < < if ($this->attempts == quiz_attempts_report::ENROLLED_WITHOUT) { < $this->states = null; < $this->onlygraded = false; < } < < if (!$this->is_showing_finished_attempts()) { < $this->onlygraded = false; < } < < if ($this->pagesize < 1) { < $this->pagesize = quiz_attempts_report::DEFAULT_PAGE_SIZE; < } < } < < /** < * Whether the options are such that finished attempts are being shown. < * @return boolean < */ < protected function is_showing_finished_attempts() { < return $this->states === null || in_array(quiz_attempt::FINISHED, $this->states); < } < }
> debugging('This file is no longer required in Moodle 4.2+. Please do not include/require it.', DEBUG_DEVELOPER);