From 9efec07f77fa93ab34784eedc73a14d21e21d7ba Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Thu, 8 Dec 2022 16:44:52 +0000 Subject: [PATCH] MDL-74923 quiz: move admin setting classes to mod_quiz\admin namespace --- admin/presets/classes/manager.php | 12 ++++++++--- admin/presets/tests/manager_test.php | 4 ++-- .../browser_security_setting.php} | 18 +++++------------ .../grade_method_setting.php} | 20 ++++++------------- .../overdue_handling_setting.php} | 20 ++++++------------- .../review_setting.php} | 16 ++++----------- .../user_image_setting.php} | 16 ++++----------- ...adminpresets_browser_security_setting.php} | 2 +- ... => adminpresets_grade_method_setting.php} | 2 +- ...adminpresets_overdue_handling_setting.php} | 2 +- ...ng.php => adminpresets_review_setting.php} | 8 ++++---- ...hp => adminpresets_user_image_setting.php} | 2 +- mod/quiz/db/renamedclasses.php | 15 ++++++++++++++ mod/quiz/report.php | 1 - mod/quiz/settings.php | 17 ++++++++-------- mod/quiz/upgrade.txt | 20 +++++++++++++++++++ 16 files changed, 88 insertions(+), 87 deletions(-) rename mod/quiz/classes/{admin_setting_browsersecurity.php => admin/browser_security_setting.php} (75%) rename mod/quiz/classes/{admin_setting_grademethod.php => admin/grade_method_setting.php} (77%) rename mod/quiz/classes/{admin_setting_overduehandling.php => admin/overdue_handling_setting.php} (77%) rename mod/quiz/classes/{admin_review_setting.php => admin/review_setting.php} (95%) rename mod/quiz/classes/{admin_setting_user_image.php => admin/user_image_setting.php} (79%) rename mod/quiz/classes/adminpresets/{adminpresets_mod_quiz_admin_setting_browsersecurity.php => adminpresets_browser_security_setting.php} (91%) rename mod/quiz/classes/adminpresets/{adminpresets_mod_quiz_admin_setting_grademethod.php => adminpresets_grade_method_setting.php} (91%) rename mod/quiz/classes/adminpresets/{adminpresets_mod_quiz_admin_setting_overduehandling.php => adminpresets_overdue_handling_setting.php} (91%) rename mod/quiz/classes/adminpresets/{adminpresets_mod_quiz_admin_review_setting.php => adminpresets_review_setting.php} (84%) rename mod/quiz/classes/adminpresets/{adminpresets_mod_quiz_admin_setting_user_image.php => adminpresets_user_image_setting.php} (91%) diff --git a/admin/presets/classes/manager.php b/admin/presets/classes/manager.php index 9d22ef0f5f4..4b478af3cda 100644 --- a/admin/presets/classes/manager.php +++ b/admin/presets/classes/manager.php @@ -309,11 +309,17 @@ class manager { $classname = null; - // Getting the appropiate class to get the correct setting value. + // Getting the appropriate class to get the correct setting value. $settingtype = get_class($settingdata); - // Check if it is a setting from a plugin. - $plugindata = explode('_', $settingtype); + $namespacedata = explode('\\', $settingtype); + if (count($namespacedata) > 1) { + $plugindata = explode('_', $namespacedata[0]); + $settingtype = end($namespacedata); + } else { + $plugindata = explode('_', $settingtype, 2); + } + $types = \core_component::get_plugin_types(); if (array_key_exists($plugindata[0], $types)) { $plugins = \core_component::get_plugin_list($plugindata[0]); diff --git a/admin/presets/tests/manager_test.php b/admin/presets/tests/manager_test.php index a87da91f4fb..456320a1e5e 100644 --- a/admin/presets/tests/manager_test.php +++ b/admin/presets/tests/manager_test.php @@ -133,8 +133,8 @@ class manager_test extends \advanced_testcase { $settingpage = $adminroot->locate('modsettingquiz'); $settingdata = $settingpage->settings->quizbrowsersecurity;; $result = $manager->get_setting($settingdata, ''); - $this->assertInstanceOf('\mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_browsersecurity', $result); - $this->assertNotEquals('core_adminpresets\local\setting\adminpresets_setting', get_class($result)); + $this->assertInstanceOf(\mod_quiz\adminpresets\adminpresets_browser_security_setting::class, $result); + $this->assertNotEquals(\core_adminpresets\local\setting\adminpresets_setting::class, get_class($result)); // Check the adminpresets_setting class is returned when no specific class exists. $settingpage = $adminroot->locate('managecustomfields'); diff --git a/mod/quiz/classes/admin_setting_browsersecurity.php b/mod/quiz/classes/admin/browser_security_setting.php similarity index 75% rename from mod/quiz/classes/admin_setting_browsersecurity.php rename to mod/quiz/classes/admin/browser_security_setting.php index 6d83ac29a70..e7be3f35c72 100644 --- a/mod/quiz/classes/admin_setting_browsersecurity.php +++ b/mod/quiz/classes/admin/browser_security_setting.php @@ -14,27 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -/** - * Admin settings class for the quiz browser security option. - * - * @package mod_quiz - * @copyright 2008 Tim Hunt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - +namespace mod_quiz\admin; /** * Admin settings class for the quiz browser security option. * * Just so we can lazy-load the choices. * + * @package mod_quiz + * @category admin * @copyright 2011 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class mod_quiz_admin_setting_browsersecurity extends admin_setting_configselect_with_advanced { +class browser_security_setting extends \admin_setting_configselect_with_advanced { public function load_choices() { global $CFG; @@ -43,7 +35,7 @@ class mod_quiz_admin_setting_browsersecurity extends admin_setting_configselect_ } require_once($CFG->dirroot . '/mod/quiz/locallib.php'); - $this->choices = quiz_access_manager::get_browser_security_choices(); + $this->choices = \quiz_access_manager::get_browser_security_choices(); return true; } diff --git a/mod/quiz/classes/admin_setting_grademethod.php b/mod/quiz/classes/admin/grade_method_setting.php similarity index 77% rename from mod/quiz/classes/admin_setting_grademethod.php rename to mod/quiz/classes/admin/grade_method_setting.php index 45e31ce9b87..edee39433b8 100644 --- a/mod/quiz/classes/admin_setting_grademethod.php +++ b/mod/quiz/classes/admin/grade_method_setting.php @@ -14,27 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -/** - * Admin settings class for the quiz grading method. - * - * @package mod_quiz - * @copyright 2008 Tim Hunt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - +namespace mod_quiz\admin; /** * Admin settings class for the quiz grading method. * * Just so we can lazy-load the choices. * - * @copyright 2011 The Open University - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package mod_quiz + * @category admin + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class mod_quiz_admin_setting_grademethod extends admin_setting_configselect_with_advanced { +class grade_method_setting extends \admin_setting_configselect_with_advanced { public function load_choices() { global $CFG; diff --git a/mod/quiz/classes/admin_setting_overduehandling.php b/mod/quiz/classes/admin/overdue_handling_setting.php similarity index 77% rename from mod/quiz/classes/admin_setting_overduehandling.php rename to mod/quiz/classes/admin/overdue_handling_setting.php index 71b1245521e..9cc2cfcf014 100644 --- a/mod/quiz/classes/admin_setting_overduehandling.php +++ b/mod/quiz/classes/admin/overdue_handling_setting.php @@ -14,27 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -/** - * Admin settings class for the quiz overdue attempt handling method. - * - * @package mod_quiz - * @copyright 2008 Tim Hunt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - +namespace mod_quiz\admin; /** * Admin settings class for the quiz overdue attempt handling method. * * Just so we can lazy-load the choices. * - * @copyright 2011 The Open University - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @package mod_quiz + * @category admin + * @copyright 2011 The Open University + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class mod_quiz_admin_setting_overduehandling extends admin_setting_configselect_with_advanced { +class overdue_handling_setting extends \admin_setting_configselect_with_advanced { public function load_choices() { global $CFG; diff --git a/mod/quiz/classes/admin_review_setting.php b/mod/quiz/classes/admin/review_setting.php similarity index 95% rename from mod/quiz/classes/admin_review_setting.php rename to mod/quiz/classes/admin/review_setting.php index 74fb458843b..1dbe1ffcd0d 100644 --- a/mod/quiz/classes/admin_review_setting.php +++ b/mod/quiz/classes/admin/review_setting.php @@ -14,25 +14,17 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . +namespace mod_quiz\admin; + /** * Admin settings class for the quiz review options. * * @package mod_quiz - * @copyright 2008 Tim Hunt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - - -/** - * Admin settings class for the quiz review options. - * + * @category admin * @copyright 2008 Tim Hunt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class mod_quiz_admin_review_setting extends admin_setting { +class review_setting extends \admin_setting { /** * @var integer should match the constants defined in * {@see display_options}. Copied for performance reasons. diff --git a/mod/quiz/classes/admin_setting_user_image.php b/mod/quiz/classes/admin/user_image_setting.php similarity index 79% rename from mod/quiz/classes/admin_setting_user_image.php rename to mod/quiz/classes/admin/user_image_setting.php index ba265019193..3f3ba70d31f 100644 --- a/mod/quiz/classes/admin_setting_user_image.php +++ b/mod/quiz/classes/admin/user_image_setting.php @@ -14,27 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -/** - * Admin settings class for the choices for how to display the user's image - * - * @package mod_quiz - * @copyright 2008 Tim Hunt - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -defined('MOODLE_INTERNAL') || die(); - +namespace mod_quiz\admin; /** * Admin settings class for the choices for how to display the user's image. * * Just so we can lazy-load the choices. * + * @package mod_quiz + * @category admin * @copyright 2011 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class mod_quiz_admin_setting_user_image extends admin_setting_configselect_with_advanced { +class user_image_setting extends \admin_setting_configselect_with_advanced { public function load_choices() { global $CFG; diff --git a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_browsersecurity.php b/mod/quiz/classes/adminpresets/adminpresets_browser_security_setting.php similarity index 91% rename from mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_browsersecurity.php rename to mod/quiz/classes/adminpresets/adminpresets_browser_security_setting.php index d73e0a63e63..04834c52861 100644 --- a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_browsersecurity.php +++ b/mod/quiz/classes/adminpresets/adminpresets_browser_security_setting.php @@ -26,7 +26,7 @@ use core_adminpresets\local\setting\adminpresets_admin_setting_configselect_with * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David Monllaó code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class adminpresets_mod_quiz_admin_setting_browsersecurity extends adminpresets_admin_setting_configselect_with_advanced { +class adminpresets_browser_security_setting extends adminpresets_admin_setting_configselect_with_advanced { public function set_behaviors() { $this->behaviors['loadchoices'] = &$this->settingdata; diff --git a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_grademethod.php b/mod/quiz/classes/adminpresets/adminpresets_grade_method_setting.php similarity index 91% rename from mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_grademethod.php rename to mod/quiz/classes/adminpresets/adminpresets_grade_method_setting.php index 1393d5a30e5..39f63d87de1 100644 --- a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_grademethod.php +++ b/mod/quiz/classes/adminpresets/adminpresets_grade_method_setting.php @@ -26,7 +26,7 @@ use core_adminpresets\local\setting\adminpresets_admin_setting_configselect_with * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David Monllaó code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class adminpresets_mod_quiz_admin_setting_grademethod extends adminpresets_admin_setting_configselect_with_advanced { +class adminpresets_grade_method_setting extends adminpresets_admin_setting_configselect_with_advanced { public function set_behaviors() { $this->behaviors['loadchoices'] = &$this->settingdata; diff --git a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_overduehandling.php b/mod/quiz/classes/adminpresets/adminpresets_overdue_handling_setting.php similarity index 91% rename from mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_overduehandling.php rename to mod/quiz/classes/adminpresets/adminpresets_overdue_handling_setting.php index 4e5745921da..9d5393eaed7 100644 --- a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_overduehandling.php +++ b/mod/quiz/classes/adminpresets/adminpresets_overdue_handling_setting.php @@ -26,7 +26,7 @@ use core_adminpresets\local\setting\adminpresets_admin_setting_configselect_with * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David Monllaó code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class adminpresets_mod_quiz_admin_setting_overduehandling extends adminpresets_admin_setting_configselect_with_advanced { +class adminpresets_overdue_handling_setting extends adminpresets_admin_setting_configselect_with_advanced { public function set_behaviors() { $this->behaviors['loadchoices'] = &$this->settingdata; diff --git a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_review_setting.php b/mod/quiz/classes/adminpresets/adminpresets_review_setting.php similarity index 84% rename from mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_review_setting.php rename to mod/quiz/classes/adminpresets/adminpresets_review_setting.php index 102dafb12e8..e365bc22c56 100644 --- a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_review_setting.php +++ b/mod/quiz/classes/adminpresets/adminpresets_review_setting.php @@ -27,15 +27,15 @@ use core_adminpresets\local\setting\adminpresets_setting; * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David Monllaó code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class adminpresets_mod_quiz_admin_review_setting extends adminpresets_setting { +class adminpresets_review_setting extends adminpresets_setting { /** - * The setting value is a sum of 'mod_quiz_admin_review_setting::times' + * The setting value is a sum of 'review_setting::times' */ protected function set_visiblevalue() { - // Getting the masks descriptions (mod_quiz_admin_review_setting protected method). - $reflectiontimes = new ReflectionMethod('mod_quiz_admin_review_setting', 'times'); + // Getting the masks descriptions (review_setting protected method). + $reflectiontimes = new ReflectionMethod('mod_quiz\admin\review_setting', 'times'); $reflectiontimes->setAccessible(true); $times = $reflectiontimes->invoke(null); diff --git a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_user_image.php b/mod/quiz/classes/adminpresets/adminpresets_user_image_setting.php similarity index 91% rename from mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_user_image.php rename to mod/quiz/classes/adminpresets/adminpresets_user_image_setting.php index 2ed15506fb8..0607ee30e7b 100644 --- a/mod/quiz/classes/adminpresets/adminpresets_mod_quiz_admin_setting_user_image.php +++ b/mod/quiz/classes/adminpresets/adminpresets_user_image_setting.php @@ -26,7 +26,7 @@ use core_adminpresets\local\setting\adminpresets_admin_setting_configselect_with * @author Jordan Kesraoui | Sylvain Revenu | Pimenko based on David Monllaó code * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class adminpresets_mod_quiz_admin_setting_user_image extends adminpresets_admin_setting_configselect_with_advanced { +class adminpresets_user_image_setting extends adminpresets_admin_setting_configselect_with_advanced { public function set_behaviors() { $this->behaviors['loadchoices'] = &$this->settingdata; diff --git a/mod/quiz/db/renamedclasses.php b/mod/quiz/db/renamedclasses.php index 6f39b09f139..ea77f6b5de7 100644 --- a/mod/quiz/db/renamedclasses.php +++ b/mod/quiz/db/renamedclasses.php @@ -31,4 +31,19 @@ $renamedclasses = [ 'mod_quiz_display_options' => 'mod_quiz\question\display_options', 'qubaids_for_quiz' => 'mod_quiz\question\qubaids_for_quiz', 'qubaids_for_quiz_user' => 'mod_quiz\question\qubaids_for_quiz_user', + 'mod_quiz_admin_setting_browsersecurity' => 'mod_quiz\admin\browser_security_setting', + 'mod_quiz_admin_setting_grademethod' => 'mod_quiz\admin\grade_method_setting', + 'mod_quiz_admin_setting_overduehandling' => 'mod_quiz\admin\overdue_handling_setting', + 'mod_quiz_admin_review_setting' => 'mod_quiz\admin\review_setting', + 'mod_quiz_admin_setting_user_image' => 'mod_quiz\admin\user_image_setting', + 'mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_browsersecurity' => + 'mod_quiz\adminpresets\adminpresets_browser_security_setting', + 'mod_quiz\adminpresets/adminpresets_mod_quiz_admin_setting_grademethod' => + 'mod_quiz\adminpresets\adminpresets_grade_method_setting', + 'mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_overduehandling' => + 'mod_quiz\adminpresets\adminpresets_overdue_handling_setting', + 'mod_quiz\adminpresets\adminpresets_mod_quiz_admin_review_setting' => + 'mod_quiz\adminpresets\adminpresets_review_setting', + 'mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_user_image' => + 'mod_quiz\adminpresets\adminpresets_user_image_setting', ]; diff --git a/mod/quiz/report.php b/mod/quiz/report.php index 7b38f6f0ef9..bb0eb8a5aee 100644 --- a/mod/quiz/report.php +++ b/mod/quiz/report.php @@ -27,7 +27,6 @@ define('NO_OUTPUT_BUFFERING', true); require_once(__DIR__ . '/../../config.php'); require_once($CFG->dirroot . '/mod/quiz/locallib.php'); require_once($CFG->dirroot . '/mod/quiz/report/reportlib.php'); -require_once($CFG->dirroot . '/mod/quiz/report/default.php'); $id = optional_param('id', 0, PARAM_INT); $q = optional_param('q', 0, PARAM_INT); diff --git a/mod/quiz/settings.php b/mod/quiz/settings.php index 678235d4181..8c166053ff4 100644 --- a/mod/quiz/settings.php +++ b/mod/quiz/settings.php @@ -22,6 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +use mod_quiz\admin\review_setting; defined('MOODLE_INTERNAL') || die(); @@ -72,7 +73,7 @@ if ($ADMIN->fulltree) { get_string('attemptgradeddelay', 'quiz'), get_string('attemptgradeddelay_desc', 'quiz'), 5 * HOURSECS, HOURSECS)); // What to do with overdue attempts. - $setting = new mod_quiz_admin_setting_overduehandling('quiz/overduehandling', + $setting = new \mod_quiz\admin\overdue_handling_setting('quiz/overduehandling', get_string('overduehandling', 'quiz'), get_string('overduehandling_desc', 'quiz'), array('value' => 'autosubmit', 'adv' => false), null); $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); @@ -104,7 +105,7 @@ if ($ADMIN->fulltree) { $quizsettings->add($setting); // Grading method. - $setting = new mod_quiz_admin_setting_grademethod('quiz/grademethod', + $setting = new \mod_quiz\admin\grade_method_setting('quiz/grademethod', get_string('grademethod', 'quiz'), get_string('configgrademethod', 'quiz'), array('value' => QUIZ_GRADEHIGHEST, 'adv' => false), null); $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); @@ -174,21 +175,21 @@ if ($ADMIN->fulltree) { // Review options. $quizsettings->add(new admin_setting_heading('reviewheading', get_string('reviewoptionsheading', 'quiz'), '')); - foreach (mod_quiz_admin_review_setting::fields() as $field => $name) { - $default = mod_quiz_admin_review_setting::all_on(); + foreach (review_setting::fields() as $field => $name) { + $default = review_setting::all_on(); $forceduring = null; if ($field == 'attempt') { $forceduring = true; } else if ($field == 'overallfeedback') { - $default = $default ^ mod_quiz_admin_review_setting::DURING; + $default = $default ^ review_setting::DURING; $forceduring = false; } - $quizsettings->add(new mod_quiz_admin_review_setting('quiz/review' . $field, + $quizsettings->add(new review_setting('quiz/review' . $field, $name, '', $default, $forceduring)); } // Show the user's picture. - $setting = new mod_quiz_admin_setting_user_image('quiz/showuserpicture', + $setting = new \mod_quiz\admin\user_image_setting('quiz/showuserpicture', get_string('showuserpicture', 'quiz'), get_string('configshowuserpicture', 'quiz'), array('value' => 0, 'adv' => false), null); $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); @@ -259,7 +260,7 @@ if ($ADMIN->fulltree) { $quizsettings->add($setting); // Browser security. - $setting = new mod_quiz_admin_setting_browsersecurity('quiz/browsersecurity', + $setting = new \mod_quiz\admin\browser_security_setting('quiz/browsersecurity', get_string('showinsecurepopup', 'quiz'), get_string('configpopup', 'quiz'), array('value' => '-', 'adv' => true), null); $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); diff --git a/mod/quiz/upgrade.txt b/mod/quiz/upgrade.txt index 2c136eed71a..2bb7be9f5bd 100644 --- a/mod/quiz/upgrade.txt +++ b/mod/quiz/upgrade.txt @@ -10,6 +10,26 @@ This files describes API changes in the quiz code. - qubaids_for_quiz => mod_quiz\question\qubaids_for_quiz - qubaids_for_quiz_user => mod_quiz\question\qubaids_for_quiz_user - which is deprecated, because it is almost the same as mod_quiz\question\qubaids_for_users_attempts. + - mod_quiz_admin_setting_browsersecurity => mod_quiz\admin\browser_security_setting + - mod_quiz_admin_setting_grademethod => mod_quiz\admin\grade_method_setting + - mod_quiz_admin_setting_overduehandling => mod_quiz\admin\overdue_handling_setting + - mod_quiz_admin_review_setting => mod_quiz\admin\review_setting + - mod_quiz_admin_setting_user_image => mod_quiz\admin\user_image_setting + - mod_quiz_admin_setting_browsersecurity => mod_quiz\admin\browser_security_setting + - mod_quiz_admin_setting_grademethod => mod_quiz\admin\grade_method_setting + - mod_quiz_admin_setting_overduehandling => mod_quiz\admin\overdue_handling_setting + - mod_quiz_admin_review_setting => mod_quiz\admin\review_setting + - mod_quiz_admin_setting_user_image => mod_quiz\admin\user_image_setting + - mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_browsersecurity => + mod_quiz\adminpresets\adminpresets_browser_security_setting + - mod_quiz\adminpresets/adminpresets_mod_quiz_admin_setting_grademethod => + mod_quiz\adminpresets\adminpresets_grade_method_setting + - mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_overduehandling => + mod_quiz\adminpresets\adminpresets_overdue_handling_setting + - mod_quiz\adminpresets\adminpresets_mod_quiz_admin_review_setting => + mod_quiz\adminpresets\adminpresets_review_setting + - mod_quiz\adminpresets\adminpresets_mod_quiz_admin_setting_user_image => + mod_quiz\adminpresets\adminpresets_user_image_setting === 4.1 ===