diff --git a/mod/quiz/addrandom.php b/mod/quiz/addrandom.php index 3839ca47c06..8d57c0d6149 100644 --- a/mod/quiz/addrandom.php +++ b/mod/quiz/addrandom.php @@ -26,9 +26,9 @@ require_once(__DIR__ . '/../../config.php'); require_once($CFG->dirroot . '/mod/quiz/locallib.php'); -require_once($CFG->dirroot . '/mod/quiz/addrandomform.php'); require_once($CFG->dirroot . '/question/editlib.php'); +use mod_quiz\form\add_random_form; use qbank_managecategories\question_category_object; list($thispageurl, $contexts, $cmid, $cm, $quiz, $pagevars) = @@ -75,7 +75,7 @@ $qcobject = new question_category_object( null, $contexts->having_cap('moodle/question:add')); -$mform = new quiz_add_random_form(new moodle_url('/mod/quiz/addrandom.php'), +$mform = new add_random_form(new moodle_url('/mod/quiz/addrandom.php'), array('contexts' => $contexts, 'cat' => $pagevars['cat'])); if ($mform->is_cancelled()) { diff --git a/mod/quiz/addrandomform.php b/mod/quiz/addrandomform.php index d16121fc017..df1c42fe9f1 100644 --- a/mod/quiz/addrandomform.php +++ b/mod/quiz/addrandomform.php @@ -15,134 +15,11 @@ // along with Moodle. If not, see . /** - * Defines the Moodle forum used to add random questions to the quiz. + * File only retained to prevent fatal errors in code that tries to require/include this. * - * @package mod_quiz - * @copyright 2008 Olli Savolainen - * @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'); - - -/** - * The add random questions form. - * - * @copyright 1999 onwards Martin Dougiamas and others {@link http://moodle.com} - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ -class quiz_add_random_form extends moodleform { - - protected function definition() { - global $OUTPUT, $PAGE, $CFG; - - $mform = $this->_form; - $mform->setDisableShortforms(); - - $contexts = $this->_customdata['contexts']; - $usablecontexts = $contexts->having_cap('moodle/question:useall'); - - // Random from existing category section. - $mform->addElement('header', 'existingcategoryheader', - get_string('randomfromexistingcategory', 'quiz')); - - $mform->addElement('questioncategory', 'category', get_string('category'), - array('contexts' => $usablecontexts, 'top' => true)); - $mform->setDefault('category', $this->_customdata['cat']); - - $mform->addElement('checkbox', 'includesubcategories', '', get_string('recurse', 'quiz')); - - $tops = question_get_top_categories_for_contexts(array_column($contexts->all(), 'id')); - $mform->hideIf('includesubcategories', 'category', 'in', $tops); - - if ($CFG->usetags) { - $tagstrings = array(); - $tags = core_tag_tag::get_tags_by_area_in_contexts('core_question', 'question', $usablecontexts); - foreach ($tags as $tag) { - $tagstrings["{$tag->id},{$tag->name}"] = $tag->name; - } - $options = array( - 'multiple' => true, - 'noselectionstring' => get_string('anytags', 'quiz'), - ); - $mform->addElement('autocomplete', 'fromtags', get_string('randomquestiontags', 'mod_quiz'), $tagstrings, $options); - $mform->addHelpButton('fromtags', 'randomquestiontags', 'mod_quiz'); - } - - // TODO: in the past, the drop-down used to only show sensible choices for - // number of questions to add. That is, if the currently selected filter - // only matched 9 questions (not already in the quiz), then the drop-down would - // only offer choices 1..9. This nice UI hint got lost when the UI became Ajax-y. - // We should add it back. - $mform->addElement('select', 'numbertoadd', get_string('randomnumber', 'quiz'), - $this->get_number_of_questions_to_add_choices()); - - $previewhtml = $OUTPUT->render_from_template('mod_quiz/random_question_form_preview', []); - $mform->addElement('html', $previewhtml); - - $mform->addElement('submit', 'existingcategory', get_string('addrandomquestion', 'quiz')); - - // If the manage categories plugins is enabled, add the elements to create a new category in the form. - if (\core\plugininfo\qbank::is_plugin_enabled(\qbank_managecategories\helper::PLUGINNAME)) { - // Random from a new category section. - $mform->addElement('header', 'newcategoryheader', - get_string('randomquestionusinganewcategory', 'quiz')); - - $mform->addElement('text', 'name', get_string('name'), 'maxlength="254" size="50"'); - $mform->setType('name', PARAM_TEXT); - - $mform->addElement('questioncategory', 'parent', get_string('parentcategory', 'question'), - array('contexts' => $usablecontexts, 'top' => true)); - $mform->addHelpButton('parent', 'parentcategory', 'question'); - - $mform->addElement('submit', 'newcategory', - get_string('createcategoryandaddrandomquestion', 'quiz')); - } - - // Cancel button. - $mform->addElement('cancel'); - $mform->closeHeaderBefore('cancel'); - - $mform->addElement('hidden', 'addonpage', 0, 'id="rform_qpage"'); - $mform->setType('addonpage', PARAM_SEQUENCE); - $mform->addElement('hidden', 'cmid', 0); - $mform->setType('cmid', PARAM_INT); - $mform->addElement('hidden', 'returnurl', 0); - $mform->setType('returnurl', PARAM_LOCALURL); - - // Add the javascript required to enhance this mform. - $PAGE->requires->js_call_amd('mod_quiz/add_random_form', 'init', [ - $mform->getAttribute('id'), - $contexts->lowest()->id, - $tops, - $CFG->usetags - ]); - } - - public function validation($fromform, $files) { - $errors = parent::validation($fromform, $files); - - if (!empty($fromform['newcategory']) && trim($fromform['name']) == '') { - $errors['name'] = get_string('categorynamecantbeblank', 'question'); - } - - return $errors; - } - - /** - * Return an arbitrary array for the dropdown menu - * - * @param int $maxrand - * @return array of integers [1, 2, ..., 100] (or to the smaller of $maxrand and 100.) - */ - private function get_number_of_questions_to_add_choices($maxrand = 100) { - $randomcount = array(); - for ($i = 1; $i <= min(100, $maxrand); $i++) { - $randomcount[$i] = $i; - } - return $randomcount; - } -} +debugging('This file is no longer required in Moodle 4.2+. Please do not include/require it.', DEBUG_DEVELOPER); diff --git a/mod/quiz/classes/form/add_random_form.php b/mod/quiz/classes/form/add_random_form.php new file mode 100644 index 00000000000..2498abb0e2e --- /dev/null +++ b/mod/quiz/classes/form/add_random_form.php @@ -0,0 +1,145 @@ +. + +namespace mod_quiz\form; + +use core_tag_tag; +use moodleform; + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->libdir.'/formslib.php'); + + +/** + * The add random questions form. + * + * @package mod_quiz + * @copyright 1999 onwards Martin Dougiamas and others {@link http://moodle.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class add_random_form extends moodleform { + + protected function definition() { + global $OUTPUT, $PAGE, $CFG; + + $mform = $this->_form; + $mform->setDisableShortforms(); + + $contexts = $this->_customdata['contexts']; + $usablecontexts = $contexts->having_cap('moodle/question:useall'); + + // Random from existing category section. + $mform->addElement('header', 'existingcategoryheader', + get_string('randomfromexistingcategory', 'quiz')); + + $mform->addElement('questioncategory', 'category', get_string('category'), + array('contexts' => $usablecontexts, 'top' => true)); + $mform->setDefault('category', $this->_customdata['cat']); + + $mform->addElement('checkbox', 'includesubcategories', '', get_string('recurse', 'quiz')); + + $tops = question_get_top_categories_for_contexts(array_column($contexts->all(), 'id')); + $mform->hideIf('includesubcategories', 'category', 'in', $tops); + + if ($CFG->usetags) { + $tagstrings = array(); + $tags = core_tag_tag::get_tags_by_area_in_contexts('core_question', 'question', $usablecontexts); + foreach ($tags as $tag) { + $tagstrings["{$tag->id},{$tag->name}"] = $tag->name; + } + $options = array( + 'multiple' => true, + 'noselectionstring' => get_string('anytags', 'quiz'), + ); + $mform->addElement('autocomplete', 'fromtags', get_string('randomquestiontags', 'mod_quiz'), $tagstrings, $options); + $mform->addHelpButton('fromtags', 'randomquestiontags', 'mod_quiz'); + } + + // TODO: in the past, the drop-down used to only show sensible choices for + // number of questions to add. That is, if the currently selected filter + // only matched 9 questions (not already in the quiz), then the drop-down would + // only offer choices 1..9. This nice UI hint got lost when the UI became Ajax-y. + // We should add it back. + $mform->addElement('select', 'numbertoadd', get_string('randomnumber', 'quiz'), + $this->get_number_of_questions_to_add_choices()); + + $previewhtml = $OUTPUT->render_from_template('mod_quiz/random_question_form_preview', []); + $mform->addElement('html', $previewhtml); + + $mform->addElement('submit', 'existingcategory', get_string('addrandomquestion', 'quiz')); + + // If the manage categories plugins is enabled, add the elements to create a new category in the form. + if (\core\plugininfo\qbank::is_plugin_enabled(\qbank_managecategories\helper::PLUGINNAME)) { + // Random from a new category section. + $mform->addElement('header', 'newcategoryheader', + get_string('randomquestionusinganewcategory', 'quiz')); + + $mform->addElement('text', 'name', get_string('name'), 'maxlength="254" size="50"'); + $mform->setType('name', PARAM_TEXT); + + $mform->addElement('questioncategory', 'parent', get_string('parentcategory', 'question'), + array('contexts' => $usablecontexts, 'top' => true)); + $mform->addHelpButton('parent', 'parentcategory', 'question'); + + $mform->addElement('submit', 'newcategory', + get_string('createcategoryandaddrandomquestion', 'quiz')); + } + + // Cancel button. + $mform->addElement('cancel'); + $mform->closeHeaderBefore('cancel'); + + $mform->addElement('hidden', 'addonpage', 0, 'id="rform_qpage"'); + $mform->setType('addonpage', PARAM_SEQUENCE); + $mform->addElement('hidden', 'cmid', 0); + $mform->setType('cmid', PARAM_INT); + $mform->addElement('hidden', 'returnurl', 0); + $mform->setType('returnurl', PARAM_LOCALURL); + + // Add the javascript required to enhance this mform. + $PAGE->requires->js_call_amd('mod_quiz/add_random_form', 'init', [ + $mform->getAttribute('id'), + $contexts->lowest()->id, + $tops, + $CFG->usetags + ]); + } + + public function validation($fromform, $files) { + $errors = parent::validation($fromform, $files); + + if (!empty($fromform['newcategory']) && trim($fromform['name']) == '') { + $errors['name'] = get_string('categorynamecantbeblank', 'question'); + } + + return $errors; + } + + /** + * Return an arbitrary array for the dropdown menu + * + * @param int $maxrand + * @return array of integers [1, 2, ..., 100] (or to the smaller of $maxrand and 100.) + */ + private function get_number_of_questions_to_add_choices($maxrand = 100) { + $randomcount = array(); + for ($i = 1; $i <= min(100, $maxrand); $i++) { + $randomcount[$i] = $i; + } + return $randomcount; + } +} diff --git a/mod/quiz/db/renamedclasses.php b/mod/quiz/db/renamedclasses.php index 98c68d5c571..5752280611c 100644 --- a/mod/quiz/db/renamedclasses.php +++ b/mod/quiz/db/renamedclasses.php @@ -55,4 +55,5 @@ $renamedclasses = [ 'mod_quiz_preflight_check_form' => 'mod_quiz\form\preflight_check_form', 'quiz_override_form' => 'mod_quiz\form\edit_override_form', 'quiz_access_rule_base' => 'mod_quiz\local\access_rule_base', + 'quiz_add_random_form' => 'mod_quiz\form\add_random_form', ]; diff --git a/mod/quiz/edit.php b/mod/quiz/edit.php index b25d7ebfb0f..93c93eabb4d 100644 --- a/mod/quiz/edit.php +++ b/mod/quiz/edit.php @@ -43,7 +43,6 @@ require_once(__DIR__ . '/../../config.php'); require_once($CFG->dirroot . '/mod/quiz/locallib.php'); -require_once($CFG->dirroot . '/mod/quiz/addrandomform.php'); require_once($CFG->dirroot . '/question/editlib.php'); // These params are only passed from page request to request while we stay on diff --git a/mod/quiz/lib.php b/mod/quiz/lib.php index 7f0bf9daa1b..a4c5b2f5494 100644 --- a/mod/quiz/lib.php +++ b/mod/quiz/lib.php @@ -29,6 +29,7 @@ defined('MOODLE_INTERNAL') || die(); use mod_quiz\access_manager; +use mod_quiz\form\add_random_form; use mod_quiz\question\bank\custom_view; use mod_quiz\question\display_options; use mod_quiz\question\qubaids_for_quiz; @@ -2460,7 +2461,6 @@ function mod_quiz_output_fragment_quiz_question_bank($args) { */ function mod_quiz_output_fragment_add_random_question_form($args) { global $CFG; - require_once($CFG->dirroot . '/mod/quiz/addrandomform.php'); $contexts = new \core_question\local\bank\question_edit_contexts($args['context']); $formoptions = [ @@ -2474,7 +2474,7 @@ function mod_quiz_output_fragment_add_random_question_form($args) { 'cmid' => $args['cmid'] ]; - $form = new quiz_add_random_form( + $form = new add_random_form( new \moodle_url('/mod/quiz/addrandom.php'), $formoptions, 'post', diff --git a/mod/quiz/upgrade.txt b/mod/quiz/upgrade.txt index 498b6825019..b78063e9c71 100644 --- a/mod/quiz/upgrade.txt +++ b/mod/quiz/upgrade.txt @@ -39,6 +39,7 @@ This files describes API changes in the quiz code. - mod_quiz_preflight_check_form => mod_quiz\form\preflight_check_form - quiz_override_form => mod_quiz\form\edit_override_form - quiz_access_rule_base => mod_quiz\local\access_rule_base + - quiz_add_random_form => mod_quiz\form\add_random_form * The following classes have been deprecated: - mod_quiz_overdue_attempt_updater - merged into mod_quiz\task\update_overdue_attempts