|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 // This file is part of Moodle - http://moodle.org/ 00003 // 00004 // Moodle is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // Moodle is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00016 00027 defined('MOODLE_INTERNAL') || die(); 00028 00029 require_once($CFG->dirroot . '/mod/quiz/lib.php'); 00030 require_once($CFG->dirroot . '/mod/quiz/settingslib.php'); 00031 00032 // First get a list of quiz reports with there own settings pages. If there none, 00033 // we use a simpler overall menu structure. 00034 $reports = get_plugin_list_with_file('quiz', 'settings.php', false); 00035 $reportsbyname = array(); 00036 foreach ($reports as $report => $reportdir) { 00037 $strreportname = get_string($report . 'report', 'quiz_'.$report); 00038 $reportsbyname[$strreportname] = $report; 00039 } 00040 ksort($reportsbyname); 00041 00042 // Create the quiz settings page. 00043 if (empty($reportsbyname)) { 00044 $pagetitle = get_string('modulename', 'quiz'); 00045 } else { 00046 $pagetitle = get_string('generalsettings', 'admin'); 00047 } 00048 $quizsettings = new admin_settingpage('modsettingquiz', $pagetitle, 'moodle/site:config'); 00049 00050 // Introductory explanation that all the settings are defaults for the add quiz form. 00051 $quizsettings->add(new admin_setting_heading('quizintro', '', get_string('configintro', 'quiz'))); 00052 00053 // Time limit 00054 $quizsettings->add(new admin_setting_configtext_with_advanced('quiz/timelimit', 00055 get_string('timelimitsec', 'quiz'), get_string('configtimelimitsec', 'quiz'), 00056 array('value' => '0', 'fix' => false), PARAM_INT)); 00057 00058 // Number of attempts 00059 $options = array(get_string('unlimited')); 00060 for ($i = 1; $i <= QUIZ_MAX_ATTEMPT_OPTION; $i++) { 00061 $options[$i] = $i; 00062 } 00063 $quizsettings->add(new admin_setting_configselect_with_advanced('quiz/attempts', 00064 get_string('attemptsallowed', 'quiz'), get_string('configattemptsallowed', 'quiz'), 00065 array('value' => 0, 'fix' => false), $options)); 00066 00067 // Grading method. 00068 $quizsettings->add(new mod_quiz_admin_setting_grademethod('quiz/grademethod', 00069 get_string('grademethod', 'quiz'), get_string('configgrademethod', 'quiz'), 00070 array('value' => QUIZ_GRADEHIGHEST, 'fix' => false), null)); 00071 00072 // Maximum grade 00073 $quizsettings->add(new admin_setting_configtext('quiz/maximumgrade', 00074 get_string('maximumgrade'), get_string('configmaximumgrade', 'quiz'), 10, PARAM_INT)); 00075 00076 // Shuffle questions 00077 $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/shufflequestions', 00078 get_string('shufflequestions', 'quiz'), get_string('configshufflequestions', 'quiz'), 00079 array('value' => 0, 'adv' => false))); 00080 00081 // Questions per page 00082 $perpage = array(); 00083 $perpage[0] = get_string('never'); 00084 $perpage[1] = get_string('aftereachquestion', 'quiz'); 00085 for ($i = 2; $i <= QUIZ_MAX_QPP_OPTION; ++$i) { 00086 $perpage[$i] = get_string('afternquestions', 'quiz', $i); 00087 } 00088 $quizsettings->add(new admin_setting_configselect_with_advanced('quiz/questionsperpage', 00089 get_string('newpageevery', 'quiz'), get_string('confignewpageevery', 'quiz'), 00090 array('value' => 1, 'fix' => false), $perpage)); 00091 00092 // Shuffle within questions 00093 $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/shuffleanswers', 00094 get_string('shufflewithin', 'quiz'), get_string('configshufflewithin', 'quiz'), 00095 array('value' => 1, 'adv' => false))); 00096 00097 // Preferred behaviour. 00098 $quizsettings->add(new admin_setting_question_behaviour('quiz/preferredbehaviour', 00099 get_string('howquestionsbehave', 'question'), get_string('howquestionsbehave_desc', 'quiz'), 00100 'deferredfeedback')); 00101 00102 // Each attempt builds on last. 00103 $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/attemptonlast', 00104 get_string('eachattemptbuildsonthelast', 'quiz'), 00105 get_string('configeachattemptbuildsonthelast', 'quiz'), 00106 array('value' => 0, 'adv' => true))); 00107 00108 // Review options. 00109 $quizsettings->add(new admin_setting_heading('reviewheading', 00110 get_string('reviewoptionsheading', 'quiz'), '')); 00111 foreach (mod_quiz_admin_review_setting::fields() as $field => $name) { 00112 $default = mod_quiz_admin_review_setting::all_on(); 00113 $forceduring = null; 00114 if ($field == 'attempt') { 00115 $forceduring = true; 00116 } else if ($field == 'overallfeedback') { 00117 $default = $default ^ mod_quiz_admin_review_setting::DURING; 00118 $forceduring = false; 00119 } 00120 $quizsettings->add(new mod_quiz_admin_review_setting('quiz/review' . $field, 00121 $name, '', $default, $forceduring)); 00122 } 00123 00124 // Show the user's picture 00125 $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/showuserpicture', 00126 get_string('showuserpicture', 'quiz'), get_string('configshowuserpicture', 'quiz'), 00127 array('value' => 0, 'adv' => false))); 00128 00129 // Decimal places for overall grades. 00130 $options = array(); 00131 for ($i = 0; $i <= QUIZ_MAX_DECIMAL_OPTION; $i++) { 00132 $options[$i] = $i; 00133 } 00134 $quizsettings->add(new admin_setting_configselect_with_advanced('quiz/decimalpoints', 00135 get_string('decimalplaces', 'quiz'), get_string('configdecimalplaces', 'quiz'), 00136 array('value' => 2, 'fix' => false), $options)); 00137 00138 // Decimal places for question grades. 00139 $options = array(-1 => get_string('sameasoverall', 'quiz')); 00140 for ($i = 0; $i <= QUIZ_MAX_Q_DECIMAL_OPTION; $i++) { 00141 $options[$i] = $i; 00142 } 00143 $quizsettings->add(new admin_setting_configselect_with_advanced('quiz/questiondecimalpoints', 00144 get_string('decimalplacesquestion', 'quiz'), 00145 get_string('configdecimalplacesquestion', 'quiz'), 00146 array('value' => -1, 'fix' => true), $options)); 00147 00148 // Show blocks during quiz attempts 00149 $quizsettings->add(new admin_setting_configcheckbox_with_advanced('quiz/showblocks', 00150 get_string('showblocks', 'quiz'), get_string('configshowblocks', 'quiz'), 00151 array('value' => 0, 'adv' => true))); 00152 00153 // Password. 00154 $quizsettings->add(new admin_setting_configtext_with_advanced('quiz/password', 00155 get_string('requirepassword', 'quiz'), get_string('configrequirepassword', 'quiz'), 00156 array('value' => '', 'fix' => true), PARAM_TEXT)); 00157 00158 // IP restrictions. 00159 $quizsettings->add(new admin_setting_configtext_with_advanced('quiz/subnet', 00160 get_string('requiresubnet', 'quiz'), get_string('configrequiresubnet', 'quiz'), 00161 array('value' => '', 'fix' => true), PARAM_TEXT)); 00162 00163 // Enforced delay between attempts. 00164 $quizsettings->add(new admin_setting_configtext_with_advanced('quiz/delay1', 00165 get_string('delay1st2nd', 'quiz'), get_string('configdelay1st2nd', 'quiz'), 00166 array('value' => 0, 'fix' => true), PARAM_INTEGER)); 00167 $quizsettings->add(new admin_setting_configtext_with_advanced('quiz/delay2', 00168 get_string('delaylater', 'quiz'), get_string('configdelaylater', 'quiz'), 00169 array('value' => 0, 'fix' => true), PARAM_INTEGER)); 00170 00171 // 'Secure' window. 00172 $quizsettings->add(new mod_quiz_admin_setting_browsersecurity('quiz/browsersecurity', 00173 get_string('showinsecurepopup', 'quiz'), get_string('configpopup', 'quiz'), 00174 array('value' => '-', 'adv' => true), null)); 00175 00176 // Now, depending on whether any reports have their own settings page, add 00177 // the quiz setting page to the appropriate place in the tree. 00178 if (empty($reportsbyname)) { 00179 $ADMIN->add('modsettings', $quizsettings); 00180 } else { 00181 $ADMIN->add('modsettings', new admin_category('modsettingsquizcat', 00182 get_string('modulename', 'quiz'), !$module->visible)); 00183 $ADMIN->add('modsettingsquizcat', $quizsettings); 00184 00185 // Add the report pages for the settings.php files in sub directories of mod/quiz/report 00186 foreach ($reportsbyname as $strreportname => $report) { 00187 $reportname = $report; 00188 00189 $settings = new admin_settingpage('modsettingsquizcat'.$reportname, 00190 $strreportname, 'moodle/site:config', !$module->visible); 00191 if ($ADMIN->fulltree) { 00192 include($CFG->dirroot . "/mod/quiz/report/$reportname/settings.php"); 00193 } 00194 $ADMIN->add('modsettingsquizcat', $settings); 00195 } 00196 } 00197 00198 $settings = null; // we do not want standard settings link