Merge branch 'MDL-67513-m310' of https://github.com/NeillM/moodle into MOODLE_310_STABLE
[moodle.git] / question / type / randomsamatch / edit_randomsamatch_form.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Defines the editing form for the randomsamatch question type.
19  *
20  * @package    qtype_randomsamatch
21  * @copyright  2007 Jamie Pratt me@jamiep.org
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License
23  */
26 defined('MOODLE_INTERNAL') || die();
29 /**
30  * randomsamatch editing form definition.
31  *
32  * @copyright  2007 Jamie Pratt me@jamiep.org
33  * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License
34  */
35 class qtype_randomsamatch_edit_form extends question_edit_form {
36     protected function definition_inner($mform) {
37         $questionstoselect = array();
38         for ($i = 2; $i <= qtype_randomsamatch::MAX_SUBQUESTIONS; $i++) {
39             $questionstoselect[$i] = $i;
40         }
42         $mform->addElement('select', 'choose',
43                 get_string('randomsamatchnumber', 'qtype_randomsamatch'), $questionstoselect);
44         $mform->setType('feedback', PARAM_RAW);
46         $mform->addElement('advcheckbox', 'subcats',
47                 get_string('subcats', 'qtype_randomsamatch'), null, null, array(0, 1));
48         $mform->addHelpButton('subcats', 'subcats', 'qtype_randomsamatch');
49         $mform->setDefault('subcats', 1);
51         $mform->addElement('hidden', 'fraction', 0);
52         $mform->setType('fraction', PARAM_RAW);
54         $this->add_combined_feedback_fields(true);
55         $this->add_interactive_settings(true, true);
56     }
58     protected function data_preprocessing($question) {
59         $question = parent::data_preprocessing($question);
60         $question = $this->data_preprocessing_combined_feedback($question, true);
61         $question = $this->data_preprocessing_hints($question, true, true);
63         if (!empty($question->options)) {
64             $question->choose = $question->options->choose;
65             $question->subcats = $question->options->subcats;
66         }
68         if (empty($question->name)) {
69             $question->name = get_string('randomsamatch', 'qtype_randomsamatch');
70         }
72         if (empty($question->questiontext)) {
73             $question->questiontext = get_string('randomsamatchintro', 'qtype_randomsamatch');
74         }
75         return $question;
76     }
78     public function qtype() {
79         return 'randomsamatch';
80     }
82     public function validation($data, $files) {
83         global $DB;
84         $errors = parent::validation($data, $files);
86         if (isset($data->categorymoveto)) {
87             list($category) = explode(',', $data['categorymoveto']);
88         } else {
89             list($category) = explode(',', $data['category']);
90         }
91         $saquestions = question_bank::get_qtype('randomsamatch')->get_available_saquestions_from_category(
92                 $category, $data['subcats']);
93         $numberavailable = count($saquestions);
94         if ($saquestions === false) {
95             $a = new stdClass();
96             $a->catname = $DB->get_field('question_categories', 'name', array('id' => $category));
97             $errors['choose'] = get_string('nosaincategory', 'qtype_randomsamatch', $a);
99         } else if ($numberavailable < $data['choose']) {
100             $a = new stdClass();
101             $a->catname = $DB->get_field('question_categories', 'name', array('id' => $category));
102             $a->nosaquestions = $numberavailable;
103             $errors['choose'] = get_string('notenoughsaincategory', 'qtype_randomsamatch', $a);
104         }
105         return $errors;
106     }