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/>.namespace mod_questionnaire\question;/*** This file contains the parent class for slider question types.** @author Hieu Vu Van* @copyright 2022 The Open University.* @license http://www.gnu.org/copyleft/gpl.html GNU Public License* @package mod_questionnaire*/class slider extends question {/*** Return the responseclass used.* @return string*/protected function responseclass() {return '\\mod_questionnaire\\responsetype\\slider';}/*** Return the help name.* @return string*/public function helpname() {return 'slider';}/*** Return true if the question has choices.*/public function has_choices() {return false;}/*** Override and return a form template if provided. Output of question_survey_display is iterpreted based on this.** @return boolean | string*/public function question_template() {return 'mod_questionnaire/question_slider';}/*** Override and return a response template if provided. Output of response_survey_display is iterpreted based on this.** @return boolean | string*/public function response_template() {return 'mod_questionnaire/response_slider';}/*** Return the context tags for the check question template.** @param \mod_questionnaire\responsetype\response\response $response* @param array $dependants Array of all questions/choices depending on this question.* @param boolean $blankquestionnaire* @return object The check question context tags.**/protected function question_survey_display($response, $dependants = [], $blankquestionnaire = false) {global $PAGE;$PAGE->requires->js_init_call('M.mod_questionnaire.init_slider', null, false, questionnaire_get_js_module());$extradata = json_decode($this->extradata);$questiontags = new \stdClass();if (isset($response->answers[$this->id][0])) {$extradata->startingvalue = $response->answers[$this->id][0]->value;}$extradata->name = 'q' . $this->id;$extradata->id = self::qtypename($this->type_id) . $this->id;$questiontags->qelements = new \stdClass();$questiontags->qelements->extradata = $extradata;return $questiontags;}/*** Return the context tags for the slider response template.* @param \mod_questionnaire\responsetype\response\response $response* @return \stdClass The check question response context tags.*/protected function response_survey_display($response) {global $PAGE;$PAGE->requires->js_init_call('M.mod_questionnaire.init_slider', null, false, questionnaire_get_js_module());$resptags = new \stdClass();if (isset($response->answers[$this->id])) {$answer = reset($response->answers[$this->id]);$resptags->content = format_text($answer->value, FORMAT_HTML);if (!empty($response->answers[$this->id]['extradata'])) {$resptags->extradata = $response->answers[$this->id]['extradata'];} else {$extradata = json_decode($this->extradata);$resptags->extradata = $extradata;}}return $resptags;}/*** Add the form required field.* @param \MoodleQuickForm $mform* @return \MoodleQuickForm*/protected function form_required(\MoodleQuickForm $mform) {return $mform;}/*** Return the form precision.* @param \MoodleQuickForm $mform* @param string $helptext* @return \MoodleQuickForm|void*/protected function form_precise(\MoodleQuickForm $mform, $helptext = '') {return question::form_precise_hidden($mform);}/*** Return the form length.* @param \MoodleQuickForm $mform* @param string $helptext* @return \MoodleQuickForm|void*/protected function form_length(\MoodleQuickForm $mform, $helptext = '') {return question::form_length_hidden($mform);}/*** Override if the question uses the extradata field.* @param \MoodleQuickForm $mform* @param string $helpname* @return \MoodleQuickForm*/protected function form_extradata(\MoodleQuickForm $mform, $helpname = '') {$minelementname = 'minrange';$maxelementname = 'maxrange';$startingvalue = 'startingvalue';$stepvalue = 'stepvalue';$ranges = [];if (!empty($this->extradata)) {$ranges = json_decode($this->extradata);}$mform->addElement('text', 'leftlabel', get_string('leftlabel', 'questionnaire'));$mform->setType('leftlabel', PARAM_RAW);if (isset($ranges->leftlabel)) {$mform->setDefault('leftlabel', $ranges->leftlabel);}$mform->addElement('text', 'centerlabel', get_string('centerlabel', 'questionnaire'));$mform->setType('centerlabel', PARAM_RAW);if (isset($ranges->centerlabel)) {$mform->setDefault('centerlabel', $ranges->centerlabel);}$mform->addElement('text', 'rightlabel', get_string('rightlabel', 'questionnaire'));$mform->setType('rightlabel', PARAM_RAW);if (isset($ranges->rightlabel)) {$mform->setDefault('rightlabel', $ranges->rightlabel);}$patterint = '/^-?\d+$/';$mform->addElement('text', $minelementname, get_string($minelementname, 'questionnaire'), ['size' => '3']);$mform->setType($minelementname, PARAM_RAW);$mform->addRule($minelementname, get_string('err_required', 'form'), 'required', null, 'client');$mform->addRule($minelementname, get_string('err_numeric', 'form'), 'numeric', '', 'client');$mform->addRule($minelementname, get_string('err_numeric', 'form'), 'regex', $patterint, 'client');$mform->addHelpButton($minelementname, $minelementname, 'questionnaire');if (isset($ranges->minrange)) {$mform->setDefault($minelementname, $ranges->minrange);} else {$mform->setDefault($minelementname, 1);}$mform->addElement('text', $maxelementname, get_string($maxelementname, 'questionnaire'), ['size' => '3']);$mform->setType($maxelementname, PARAM_RAW);$mform->addHelpButton($maxelementname, $maxelementname, 'questionnaire');$mform->addRule($maxelementname, get_string('err_required', 'form'), 'required', null, 'client');$mform->addRule($maxelementname, get_string('err_numeric', 'form'), 'numeric', '', 'client');$mform->addRule($maxelementname, get_string('err_numeric', 'form'), 'regex', $patterint, 'client');if (isset($ranges->maxrange)) {$mform->setDefault($maxelementname, $ranges->maxrange);} else {$mform->setDefault($maxelementname, 10);}$mform->addElement('text', $startingvalue, get_string($startingvalue, 'questionnaire'), ['size' => '3']);$mform->setType($startingvalue, PARAM_RAW);$mform->addHelpButton($startingvalue, $startingvalue, 'questionnaire');$mform->addRule($startingvalue, get_string('err_required', 'form'), 'required', null, 'client');$mform->addRule($startingvalue, get_string('err_numeric', 'form'), 'numeric', '', 'client');$mform->addRule($startingvalue, get_string('err_numeric', 'form'), 'regex', $patterint, 'client');if (isset($ranges->startingvalue)) {$mform->setDefault($startingvalue, $ranges->startingvalue);} else {$mform->setDefault($startingvalue, 5);}$mform->addElement('text', $stepvalue, get_string($stepvalue, 'questionnaire'), ['size' => '3']);$mform->setType($stepvalue, PARAM_RAW);$mform->addHelpButton($stepvalue, $stepvalue, 'questionnaire');$mform->addRule($stepvalue, get_string('err_required', 'form'), 'required', null, 'client');$mform->addRule($stepvalue, get_string('err_numeric', 'form'), 'numeric', '', 'client');$mform->addRule($stepvalue, get_string('err_numeric', 'form'), 'regex', '/^-?\d+$/', 'client');if (isset($ranges->stepvalue)) {$mform->setDefault($stepvalue, $ranges->stepvalue);} else {$mform->setDefault($stepvalue, 1);}return $mform;}/*** Any preprocessing of general data.* @param \stdClass $formdata* @return bool*/protected function form_preprocess_data($formdata) {$ranges = [];if (isset($formdata->minrange)) {$ranges['minrange'] = $formdata->minrange;}if (isset($formdata->maxrange)) {$ranges['maxrange'] = $formdata->maxrange;}if (isset($formdata->startingvalue)) {$ranges['startingvalue'] = $formdata->startingvalue;}if (isset($formdata->stepvalue)) {$ranges['stepvalue'] = $formdata->stepvalue;}if (isset($formdata->leftlabel)) {$ranges['leftlabel'] = $formdata->leftlabel;}if (isset($formdata->rightlabel)) {$ranges['rightlabel'] = $formdata->rightlabel;}if (isset($formdata->centerlabel)) {$ranges['centerlabel'] = $formdata->centerlabel;}// Now store the new named degrees in extradata.$formdata->extradata = json_encode($ranges);return parent::form_preprocess_data($formdata);}/*** True if question provides mobile support.** @return bool*/public function supports_mobile() {return true;}/*** True if question need extradata for mobile app.** @return bool*/public function mobile_question_extradata_display() {return true;}/*** Return the mobile question display.** @param int $qnum* @param bool $autonum* @return \stdClass*/public function mobile_question_display($qnum, $autonum = false) {$mobiledata = parent::mobile_question_display($qnum, $autonum);$mobiledata->isslider = true;return $mobiledata;}/*** Return the otherdata to be used by the mobile app.** @return array*/public function mobile_otherdata() {$extradata = json_decode($this->extradata);return [$this->mobile_fieldkey() => $extradata->startingvalue];}}