Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add options to show/hide the history and the correct answer #13

Merged
merged 3 commits into from
Nov 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 45 additions & 5 deletions archive_form.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,18 @@
*/


use mod_quiz\local\reports\attempts_report_options_form;

defined('MOODLE_INTERNAL') || die();

require_once($CFG->libdir.'/formslib.php');
// This work-around is required until Moodle 4.2 is the lowest version we support.
if (class_exists('\mod_quiz\local\reports\attempts_report_options_form')) {
class_alias('\mod_quiz\local\reports\attempts_report_options_form', '\quiz_archive_settings_form_parent_class_alias');
} else {
require_once($CFG->dirroot . '/mod/quiz/report/attemptsreport_form.php');
class_alias('\mod_quiz_attempts_report_form', '\quiz_archive_settings_form_parent_class_alias');
}


/**
* Quiz archive report settings form.
Expand All @@ -34,14 +43,45 @@
* @copyright 2018 Luca Bösch <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class quiz_archive_settings_form extends moodleform {
class quiz_archive_settings_form extends quiz_archive_settings_form_parent_class_alias {

/**
* Definition of our form. Overriding parent method, because our form is much simpler
* and does not have multiple sections.
*
* @return void
*/
protected function definition() {
$mform = $this->_form;

$mform->addElement('header', 'preferencesuser', get_string('reportdisplayoptions', 'quiz'));

$this->standard_preference_fields($mform);

$mform->addElement('submit', 'submitbutton', get_string('showreport', 'quiz'));
}

/**
* Called to define this moodle form.
* Override parent function. Our form currently only has two checkboxes, so their
* data is always valid or could at least be converted to valid values.
*
* @param mixed $data
* @param mixed $files
* @return array
*/
public function validation($data, $files) {
return [];
}

/**
* Add the preference fields that we offer.
*
* @param MoodleQuickForm $mform the form
* @return void
*/
public function definition() {
$mform =& $this->_form;
protected function standard_preference_fields(MoodleQuickForm $mform) {
$mform->addElement('advcheckbox', 'showhistory', get_string('includehistory', 'quiz_archive'));
$mform->addElement('advcheckbox', 'showright', get_string('includecorrectanswer', 'quiz_archive'));
}

}
184 changes: 30 additions & 154 deletions archive_options.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,82 +22,32 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

use mod_quiz\local\reports\attempts_report_options;

defined('MOODLE_INTERNAL') || die();

// This work-around is required until Moodle 4.2 is the lowest version we support.
if (class_exists('\mod_quiz\local\reports\attempts_report_options')) {
class_alias('\mod_quiz\local\reports\attempts_report_options', '\quiz_archive_options_parent_class_alias');
} else {
require_once($CFG->dirroot . '/mod/quiz/report/attemptsreport_options.php');
class_alias('\mod_quiz_attempts_report_options', '\quiz_archive_options_parent_class_alias');
}

/**
* Class to store the options for a {@see quiz_archive_report}.
*
* @package quiz_archive
* @copyright 2018 Luca Bösch <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class quiz_archive_options extends 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 = [
'stateinprogress' => quiz_attempt::IN_PROGRESS,
'stateoverdue' => quiz_attempt::OVERDUE,
'statefinished' => quiz_attempt::FINISHED,
'stateabandoned' => quiz_attempt::ABANDONED,
];
class quiz_archive_options extends quiz_archive_options_parent_class_alias {

/**
* @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 bool whether to show the correct response. */
public $showright = true;

/** @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 = [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;

/** @var bool whether to show the question text columns. */
public $showqtext = false;

/** @var bool whether to show the students' response columns. */
public $showresponses = true;

/** @var bool whether to show the correct response columns. */
public $showright = false;

/** @var bool which try/tries to show responses from. */
public $whichtries = question_attempt::LAST_TRY;
/** @var bool whether to show the history. */
public $showhistory = true;

/**
* Constructor.
Expand All @@ -111,51 +61,16 @@ public function __construct($mode, $quiz, $cm, $course) {
$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 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());
}

/**
* Get the URL parameters required to show the report with these options.
* @return array URL parameter name => value.
*/
protected function get_url_params() {
$params = [
'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 current value of the settings to pass to the settings form.
*/
public function get_initial_form_data() {
$toform = parent::get_initial_form_data();
$toform->qtext = $this->showqtext;
$toform->resp = $this->showresponses;
$toform->right = $this->showright;
if (quiz_allows_multiple_tries($this->quiz)) {
$toform->whichtries = $this->whichtries;
}
$toform = new stdClass();

$toform->showright = $this->showright;
$toform->showhistory = $this->showhistory;

return $toform;
}
Expand All @@ -165,74 +80,35 @@ public function get_initial_form_data() {
* @param object $fromform The data from $mform->get_data() from the settings form.
*/
public function setup_from_form_data($fromform) {
parent::setup_from_form_data($fromform);

$this->showqtext = $fromform->qtext;
$this->showresponses = $fromform->resp;
$this->showright = $fromform->right;
if (quiz_allows_multiple_tries($this->quiz)) {
$this->whichtries = $fromform->whichtries;
}
$this->showright = $fromform->showright;
$this->showhistory = $fromform->showhistory;
}

/**
* Set the fields of this object from the URL parameters.
*/
public function setup_from_params() {
parent::setup_from_params();

$this->showqtext = optional_param('qtext', $this->showqtext, PARAM_BOOL);
$this->showresponses = optional_param('resp', $this->showresponses, PARAM_BOOL);
$this->showright = optional_param('right', $this->showright, PARAM_BOOL);
if (quiz_allows_multiple_tries($this->quiz)) {
$this->whichtries = optional_param('whichtries', $this->whichtries, PARAM_ALPHA);
}
$this->showright = optional_param('right', $this->showright, PARAM_BOOL);
$this->showhistory = optional_param('history', $this->showhistory, PARAM_BOOL);
}

/**
* Set the fields of this object from the user's preferences.
* (For those settings that are backed by user-preferences).
* Override parent method, because we do not have settings that are backed by
* user-preferences.
*/
public function setup_from_user_preferences() {
parent::setup_from_user_preferences();

$this->showqtext = get_user_preferences('quiz_report_archive_qtext', $this->showqtext);
$this->showresponses = get_user_preferences('quiz_report_archive_resp', $this->showresponses);
$this->showright = get_user_preferences('quiz_report_archive_right', $this->showright);
if (quiz_allows_multiple_tries($this->quiz)) {
$this->whichtries = get_user_preferences('quiz_report_archive_which_tries', $this->whichtries);
}
}

/**
* Update the user preferences so they match the settings in this object.
* (For those settings that are backed by user-preferences).
* Override parent method, because we do not have settings that are backed by
* user-preferences.
*/
public function update_user_preferences() {
parent::update_user_preferences();

set_user_preference('quiz_report_archive_qtext', $this->showqtext);
set_user_preference('quiz_report_archive_resp', $this->showresponses);
set_user_preference('quiz_report_archive_right', $this->showright);
if (quiz_allows_multiple_tries($this->quiz)) {
set_user_preference('quiz_report_archive_which_tries', $this->whichtries);
}
}

/**
* Check the settings, and remove any 'impossible' combinations.
* Override parent method, because our settings cannot be incompatible.
*/
public function resolve_dependencies() {
parent::resolve_dependencies();

if (!$this->showqtext && !$this->showresponses && !$this->showright) {
// We have to show at least something.
$this->showresponses = true;
}

// We only want to show the checkbox to delete attempts
// if the user has permissions and if the report mode is showing attempts.
$this->checkboxcolumn = has_capability('mod/quiz:deleteattempts', context_module::instance($this->cm->id))
&& ($this->attempts != quiz_attempts_report::ENROLLED_WITHOUT);
}
}
4 changes: 4 additions & 0 deletions lang/en/quiz_archive.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,7 @@

// PRIVACY.
$string['privacy:metadata'] = 'The quiz archive plugin does not store any personal data about any user.';

// OPTIONS.
$string['includehistory'] = 'Include response history';
$string['includecorrectanswer'] = 'Include correct answer';
Loading