Autoría | Ultima modificación | Ver Log |
<?php// 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/>./*** The form class for editing questions.* @package mod_questionnaire* @copyright 2016 Mike Churchward (mike.churchward@poetgroup.org)* @author Mike Churchward & Joseph Rézeau* @license http://www.gnu.org/copyleft/gpl.html GNU Public License*/namespace mod_questionnaire;defined('MOODLE_INTERNAL') || die();require_once($CFG->libdir . '/formslib.php');/*** Class edit_question_form* @package mod_questionnaire* @property \MoodleQuickForm _form* @property array _customdata*/class edit_question_form extends \moodleform {/*** Form definition.*/public function definition() {// TODO - Find a way to not use globals. Maybe the base class allows more parameters to be passed?global $questionnaire, $question, $SESSION;// TODO - Is there a better way to do this without session global?// The 'sticky' required response value for further new questions.if (isset($SESSION->questionnaire->required) && !isset($question->qid)) {$question->required = $SESSION->questionnaire->required;}if (!isset($question->type_id)) {throw new \moodle_exception('undefinedquestiontype', 'mod_questionnaire');}// Each question can provide its own form elements to the provided form, or use the default ones.if (!$question->edit_form($this, $questionnaire)) {throw new \moodle_exception('Question type had an unknown error in the edit_form method.', 'mod_questionnaire');}}/*** Form validation.** @param array $data array of ("fieldname"=>value) of submitted data* @param array $files array of uploaded files "element_name"=>tmp_file_path* @return array of "element_name"=>"error_description" if there are errors,* or an empty array if everything is OK (true allowed for backwards compatibility too).*/public function validation($data, $files) {$errors = parent::validation($data, $files);// If this is a rate question.if ($data['type_id'] == QUESRATE) {if ($data['length'] < 2) {$errors["length"] = get_string('notenoughscaleitems', 'questionnaire');}// If this is a rate question with no duplicates option.if ($data['precise'] == 2 ) {$allchoices = $data['allchoices'];$allchoices = explode("\n", $allchoices);$nbvalues = 0;foreach ($allchoices as $choice) {if ($choice && !preg_match("/^[0-9]{1,3}=/", $choice)) {$nbvalues++;}}if ($nbvalues < 2) {$errors["allchoices"] = get_string('noduplicateschoiceserror', 'questionnaire');}}}// If this is a slider question.if ($data['type_id'] == QUESSLIDER) {if (isset($data['minrange']) && isset($data['maxrange']) && isset($data['startingvalue']) &&isset($data['stepvalue'])) {if ($data['minrange'] >= $data['maxrange']) {$errors['maxrange'] = get_string('invalidrange', 'questionnaire');}if (($data['startingvalue'] > $data['maxrange']) || ($data['startingvalue'] < $data['minrange'])) {$errors['startingvalue'] = get_string('invalidstartingvalue', 'questionnaire');}if ($data['startingvalue'] > 100 || $data['startingvalue'] < -100) {$errors['startingvalue'] = get_string('invalidstartingvalue', 'questionnaire');}if (($data['stepvalue'] > $data['maxrange']) || $data['stepvalue'] < 1) {$errors['stepvalue'] = get_string('invalidincrement', 'questionnaire');}if ($data['minrange'] < -100) {$errors['minrange'] = get_string('invalidminmaxrange', 'questionnaire');}if ($data['maxrange'] > 100) {$errors['maxrange'] = get_string('invalidminmaxrange', 'questionnaire');}}}return $errors;}/*** Magic method for getting the protected $_form MoodleQuickForm and $_customdata array properties.* @param string $name* @return mixed*/public function __get($name) {if ($name == '_form') {return $this->_form;} else if ($name == '_customdata') {return $this->_customdata;} else {throw new \coding_exception($name.' is not a publicly accessible property of '.get_class($this));}}}