Merge branch 'MDL-70065_310' of https://github.com/timhunt/moodle into MOODLE_310_STABLE
[moodle.git] / question / type / shortanswer / edit_shortanswer_form.php
CommitLineData
aeb15530 1<?php
fe6ce234
DC
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/>.
16
271ffe3f 17/**
18 * Defines the editing form for the shortanswer question type.
19 *
7764183a
TH
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
271ffe3f 24 */
25
7764183a
TH
26
27defined('MOODLE_INTERNAL') || die();
28
29
271ffe3f 30/**
068b4594
TH
31 * Short answer question editing form definition.
32 *
7764183a
TH
33 * @copyright 2007 Jamie Pratt
34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
271ffe3f 35 */
6e34cd29 36class qtype_shortanswer_edit_form extends question_edit_form {
c7df5006 37
068b4594
TH
38 protected function definition_inner($mform) {
39 $menu = array(
40 get_string('caseno', 'qtype_shortanswer'),
41 get_string('caseyes', 'qtype_shortanswer')
42 );
8cfc4fbd
TH
43 $mform->addElement('select', 'usecase',
44 get_string('casesensitive', 'qtype_shortanswer'), $menu);
271ffe3f 45
8cfc4fbd
TH
46 $mform->addElement('static', 'answersinstruct',
47 get_string('correctanswers', 'qtype_shortanswer'),
068b4594 48 get_string('filloutoneanswer', 'qtype_shortanswer'));
271ffe3f 49 $mform->closeHeaderBefore('answersinstruct');
50
2aef1fe5 51 $this->add_per_answer_fields($mform, get_string('answerno', 'qtype_shortanswer', '{no}'),
92111e8d 52 question_bank::fraction_options());
068b4594
TH
53
54 $this->add_interactive_settings();
271ffe3f 55 }
56
55748620
TH
57 protected function get_more_choices_string() {
58 return get_string('addmoreanswerblanks', 'qtype_shortanswer');
59 }
60
c7df5006 61 protected function data_preprocessing($question) {
7a719748
TH
62 $question = parent::data_preprocessing($question);
63 $question = $this->data_preprocessing_answers($question);
64 $question = $this->data_preprocessing_hints($question);
3f469e80 65
fe6ce234 66 return $question;
271ffe3f 67 }
068b4594
TH
68
69 public function validation($data, $files) {
fe93ba83 70 $errors = parent::validation($data, $files);
271ffe3f 71 $answers = $data['answer'];
72 $answercount = 0;
846e7545 73 $maxgrade = false;
2cb16d8f 74 foreach ($answers as $key => $answer) {
271ffe3f 75 $trimmedanswer = trim($answer);
8cfc4fbd 76 if ($trimmedanswer !== '') {
271ffe3f 77 $answercount++;
846e7545 78 if ($data['fraction'][$key] == 1) {
79 $maxgrade = true;
80 }
8cfc4fbd
TH
81 } else if ($data['fraction'][$key] != 0 ||
82 !html_is_blank($data['feedback'][$key]['text'])) {
f4fe3968 83 $errors["answeroptions[{$key}]"] = get_string('answermustbegiven', 'qtype_shortanswer');
94a6d656 84 $answercount++;
846e7545 85 }
271ffe3f 86 }
8cfc4fbd 87 if ($answercount==0) {
11a66e2c 88 $errors['answeroptions[0]'] = get_string('notenoughanswers', 'qtype_shortanswer', 1);
271ffe3f 89 }
846e7545 90 if ($maxgrade == false) {
11a66e2c 91 $errors['answeroptions[0]'] = get_string('fractionsnomax', 'question');
846e7545 92 }
271ffe3f 93 return $errors;
94 }
7a719748 95
068b4594 96 public function qtype() {
271ffe3f 97 return 'shortanswer';
98 }
99}