edit_shortanswer_form.php 3.47 KB
Newer Older
1
<?php
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

17
18
19
/**
 * Defines the editing form for the shortanswer question type.
 *
20
21
22
23
 * @package    qtype
 * @subpackage shortanswer
 * @copyright  2007 Jamie Pratt
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
25
 */

26
27
28
29

defined('MOODLE_INTERNAL') || die();


30
/**
31
32
 * Short answer question editing form definition.
 *
33
34
 * @copyright  2007 Jamie Pratt
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35
 */
36
class qtype_shortanswer_edit_form extends question_edit_form {
37

38
    protected function definition_inner($mform) {
39
        $menu = [
40
41
            get_string('caseno', 'qtype_shortanswer'),
            get_string('caseyes', 'qtype_shortanswer')
42
        ];
43
44
        $mform->addElement('select', 'usecase',
                get_string('casesensitive', 'qtype_shortanswer'), $menu);
45
        $mform->setDefault('usecase', $this->get_default_value('usecase', $menu[0]));
46

47
48
        $mform->addElement('static', 'answersinstruct',
                get_string('correctanswers', 'qtype_shortanswer'),
49
                get_string('filloutoneanswer', 'qtype_shortanswer'));
50
51
        $mform->closeHeaderBefore('answersinstruct');

52
        $this->add_per_answer_fields($mform, get_string('answerno', 'qtype_shortanswer', '{no}'),
53
                question_bank::fraction_options());
54
55

        $this->add_interactive_settings();
56
57
    }

58
59
60
61
    protected function get_more_choices_string() {
        return get_string('addmoreanswerblanks', 'qtype_shortanswer');
    }

62
    protected function data_preprocessing($question) {
63
64
65
        $question = parent::data_preprocessing($question);
        $question = $this->data_preprocessing_answers($question);
        $question = $this->data_preprocessing_hints($question);
66

67
        return $question;
68
    }
69
70

    public function validation($data, $files) {
71
        $errors = parent::validation($data, $files);
72
73
        $answers = $data['answer'];
        $answercount = 0;
74
        $maxgrade = false;
75
        foreach ($answers as $key => $answer) {
76
            $trimmedanswer = trim($answer);
77
            if ($trimmedanswer !== '') {
78
                $answercount++;
79
80
81
                if ($data['fraction'][$key] == 1) {
                    $maxgrade = true;
                }
82
83
            } else if ($data['fraction'][$key] != 0 ||
                    !html_is_blank($data['feedback'][$key]['text'])) {
84
                $errors["answeroptions[{$key}]"] = get_string('answermustbegiven', 'qtype_shortanswer');
85
                $answercount++;
86
            }
87
        }
88
        if ($answercount==0) {
89
            $errors['answeroptions[0]'] = get_string('notenoughanswers', 'qtype_shortanswer', 1);
90
        }
91
        if ($maxgrade == false) {
92
            $errors['answeroptions[0]'] = get_string('fractionsnomax', 'question');
93
        }
94
95
        return $errors;
    }
96

97
    public function qtype() {
98
99
100
        return 'shortanswer';
    }
}