Merge branch 'MDL-70065_310' of https://github.com/timhunt/moodle into MOODLE_310_STABLE
[moodle.git] / question / type / shortanswer / edit_shortanswer_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 shortanswer question type.
19  *
20  * @package    qtype
21  * @subpackage shortanswer
22  * @copyright  2007 Jamie Pratt
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
27 defined('MOODLE_INTERNAL') || die();
30 /**
31  * Short answer question editing form definition.
32  *
33  * @copyright  2007 Jamie Pratt
34  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35  */
36 class qtype_shortanswer_edit_form extends question_edit_form {
38     protected function definition_inner($mform) {
39         $menu = array(
40             get_string('caseno', 'qtype_shortanswer'),
41             get_string('caseyes', 'qtype_shortanswer')
42         );
43         $mform->addElement('select', 'usecase',
44                 get_string('casesensitive', 'qtype_shortanswer'), $menu);
46         $mform->addElement('static', 'answersinstruct',
47                 get_string('correctanswers', 'qtype_shortanswer'),
48                 get_string('filloutoneanswer', 'qtype_shortanswer'));
49         $mform->closeHeaderBefore('answersinstruct');
51         $this->add_per_answer_fields($mform, get_string('answerno', 'qtype_shortanswer', '{no}'),
52                 question_bank::fraction_options());
54         $this->add_interactive_settings();
55     }
57     protected function get_more_choices_string() {
58         return get_string('addmoreanswerblanks', 'qtype_shortanswer');
59     }
61     protected function data_preprocessing($question) {
62         $question = parent::data_preprocessing($question);
63         $question = $this->data_preprocessing_answers($question);
64         $question = $this->data_preprocessing_hints($question);
66         return $question;
67     }
69     public function validation($data, $files) {
70         $errors = parent::validation($data, $files);
71         $answers = $data['answer'];
72         $answercount = 0;
73         $maxgrade = false;
74         foreach ($answers as $key => $answer) {
75             $trimmedanswer = trim($answer);
76             if ($trimmedanswer !== '') {
77                 $answercount++;
78                 if ($data['fraction'][$key] == 1) {
79                     $maxgrade = true;
80                 }
81             } else if ($data['fraction'][$key] != 0 ||
82                     !html_is_blank($data['feedback'][$key]['text'])) {
83                 $errors["answeroptions[{$key}]"] = get_string('answermustbegiven', 'qtype_shortanswer');
84                 $answercount++;
85             }
86         }
87         if ($answercount==0) {
88             $errors['answeroptions[0]'] = get_string('notenoughanswers', 'qtype_shortanswer', 1);
89         }
90         if ($maxgrade == false) {
91             $errors['answeroptions[0]'] = get_string('fractionsnomax', 'question');
92         }
93         return $errors;
94     }
96     public function qtype() {
97         return 'shortanswer';
98     }
99 }