From 4141f88361a95e0a8962ee23303ed11a5f93e6a8 Mon Sep 17 00:00:00 2001 From: Kevin Pham Date: Wed, 16 Jun 2021 13:15:26 +1000 Subject: [PATCH] MDL-71902 mod_quiz: Add locked flag option for quiz options - Applies locked settings to many other quiz general options. For example, allows an admin to lock the browsersecurity level so it cannot be changed at an instance level, and will apply the 'default' option (which is currently None). --- mod/quiz/settings.php | 51 +++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/mod/quiz/settings.php b/mod/quiz/settings.php index aea753dc5e9..678235d4181 100644 --- a/mod/quiz/settings.php +++ b/mod/quiz/settings.php @@ -64,6 +64,7 @@ if ($ADMIN->fulltree) { get_string('timelimit', 'quiz'), get_string('configtimelimitsec', 'quiz'), '0', 60); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Delay to notify graded attempts. @@ -71,15 +72,18 @@ if ($ADMIN->fulltree) { get_string('attemptgradeddelay', 'quiz'), get_string('attemptgradeddelay_desc', 'quiz'), 5 * HOURSECS, HOURSECS)); // What to do with overdue attempts. - $quizsettings->add(new mod_quiz_admin_setting_overduehandling('quiz/overduehandling', + $setting = new mod_quiz_admin_setting_overduehandling('quiz/overduehandling', get_string('overduehandling', 'quiz'), get_string('overduehandling_desc', 'quiz'), - array('value' => 'autosubmit', 'adv' => false), null)); + array('value' => 'autosubmit', 'adv' => false), null); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); // Grace period time. $setting = new admin_setting_configduration('quiz/graceperiod', get_string('graceperiod', 'quiz'), get_string('graceperiod_desc', 'quiz'), '86400'); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Minimum grace period used behind the scenes. @@ -96,16 +100,21 @@ if ($ADMIN->fulltree) { get_string('attemptsallowed', 'quiz'), get_string('configattemptsallowed', 'quiz'), 0, $options); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Grading method. - $quizsettings->add(new mod_quiz_admin_setting_grademethod('quiz/grademethod', + $setting = new mod_quiz_admin_setting_grademethod('quiz/grademethod', get_string('grademethod', 'quiz'), get_string('configgrademethod', 'quiz'), - array('value' => QUIZ_GRADEHIGHEST, 'adv' => false), null)); + array('value' => QUIZ_GRADEHIGHEST, 'adv' => false), null); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); // Maximum grade. - $quizsettings->add(new admin_setting_configtext('quiz/maximumgrade', - get_string('maximumgrade'), get_string('configmaximumgrade', 'quiz'), 10, PARAM_INT)); + $setting = new admin_setting_configtext('quiz/maximumgrade', + get_string('maximumgrade'), get_string('configmaximumgrade', 'quiz'), 10, PARAM_INT); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); // Questions per page. $perpage = array(); @@ -118,6 +127,7 @@ if ($ADMIN->fulltree) { get_string('newpageevery', 'quiz'), get_string('confignewpageevery', 'quiz'), 1, $perpage); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Navigation method. @@ -125,6 +135,7 @@ if ($ADMIN->fulltree) { get_string('navmethod', 'quiz'), get_string('confignavmethod', 'quiz'), QUIZ_NAVMETHOD_FREE, quiz_get_navigation_options()); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Shuffle within questions. @@ -132,12 +143,15 @@ if ($ADMIN->fulltree) { get_string('shufflewithin', 'quiz'), get_string('configshufflewithin', 'quiz'), 1); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Preferred behaviour. - $quizsettings->add(new admin_setting_question_behaviour('quiz/preferredbehaviour', + $setting = new admin_setting_question_behaviour('quiz/preferredbehaviour', get_string('howquestionsbehave', 'question'), get_string('howquestionsbehave_desc', 'quiz'), - 'deferredfeedback')); + 'deferredfeedback'); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); // Can redo completed questions. $setting = new admin_setting_configselect('quiz/canredoquestions', @@ -145,6 +159,7 @@ if ($ADMIN->fulltree) { 0, array(0 => get_string('no'), 1 => get_string('canredoquestionsyes', 'quiz'))); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Each attempt builds on last. @@ -153,6 +168,7 @@ if ($ADMIN->fulltree) { get_string('configeachattemptbuildsonthelast', 'quiz'), 0); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Review options. @@ -172,9 +188,11 @@ if ($ADMIN->fulltree) { } // Show the user's picture. - $quizsettings->add(new mod_quiz_admin_setting_user_image('quiz/showuserpicture', + $setting = new mod_quiz_admin_setting_user_image('quiz/showuserpicture', get_string('showuserpicture', 'quiz'), get_string('configshowuserpicture', 'quiz'), - array('value' => 0, 'adv' => false), null)); + array('value' => 0, 'adv' => false), null); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); // Decimal places for overall grades. $options = array(); @@ -185,6 +203,7 @@ if ($ADMIN->fulltree) { get_string('decimalplaces', 'quiz'), get_string('configdecimalplaces', 'quiz'), 2, $options); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Decimal places for question grades. @@ -197,6 +216,7 @@ if ($ADMIN->fulltree) { get_string('configdecimalplacesquestion', 'quiz'), -1, $options); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Show blocks during quiz attempts. @@ -204,6 +224,7 @@ if ($ADMIN->fulltree) { get_string('showblocks', 'quiz'), get_string('configshowblocks', 'quiz'), 0); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Password. @@ -212,6 +233,7 @@ if ($ADMIN->fulltree) { ''); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, false); $setting->set_required_flag_options(admin_setting_flag::ENABLED, false); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // IP restrictions. @@ -219,6 +241,7 @@ if ($ADMIN->fulltree) { get_string('requiresubnet', 'quiz'), get_string('configrequiresubnet', 'quiz'), '', PARAM_TEXT); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Enforced delay between attempts. @@ -226,17 +249,21 @@ if ($ADMIN->fulltree) { get_string('delay1st2nd', 'quiz'), get_string('configdelay1st2nd', 'quiz'), 0, 60); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); $setting = new admin_setting_configduration('quiz/delay2', get_string('delaylater', 'quiz'), get_string('configdelaylater', 'quiz'), 0, 60); $setting->set_advanced_flag_options(admin_setting_flag::ENABLED, true); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); $quizsettings->add($setting); // Browser security. - $quizsettings->add(new mod_quiz_admin_setting_browsersecurity('quiz/browsersecurity', + $setting = new mod_quiz_admin_setting_browsersecurity('quiz/browsersecurity', get_string('showinsecurepopup', 'quiz'), get_string('configpopup', 'quiz'), - array('value' => '-', 'adv' => true), null)); + array('value' => '-', 'adv' => true), null); + $setting->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $quizsettings->add($setting); $quizsettings->add(new admin_setting_configtext('quiz/initialnumfeedbacks', get_string('initialnumfeedbacks', 'quiz'), get_string('initialnumfeedbacks_desc', 'quiz'),