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 tool_courserating\form;use moodle_exception;use moodle_url;use tool_courserating\api;use tool_courserating\constants;use tool_courserating\helper;use tool_courserating\local\models\summary;use tool_courserating\permission;/*** Form to add or change a rating** @package tool_courserating* @copyright 2022 Marina Glancy <marina.glancy@gmail.com>* @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class addrating extends \core_form\dynamic_form {/*** Current course id** @return int*/protected function get_course_id(): int {$courseid = $this->optional_param('courseid', 0, PARAM_INT);if (!$courseid) {throw new moodle_exception('missingparam', '', '', 'courseid');}return $courseid;}/*** Form definition*/protected function definition() {global $OUTPUT;$mform = $this->_form;$mform->addElement('hidden', 'courseid', $this->get_course_id());$mform->setType('courseid', PARAM_INT);$summary = summary::get_for_course($this->get_course_id());if ($summary->get('cntall')) {$courseid = $this->get_course_id();$str = get_string('viewallreviews', 'tool_courserating');$mform->addElement('html', <<<EOF<p class="mdl-align"><a href="#" data-action="tool_courserating-viewratings" data-courseid="$courseid">$str</a></p>EOF);}$radioarray = [];foreach ([1, 2, 3, 4, 5] as $r) {$label = $OUTPUT->pix_icon('star', $r, 'tool_courserating', ['class' => 'star-on tool_courserating-stars']);$label .= $OUTPUT->pix_icon('star-o', $r, 'tool_courserating', ['class' => 'star-off tool_courserating-stars']);$label = \html_writer::span($label);/** @var \MoodleQuickForm_radio $el */$el = $mform->createElement('radio', 'rating', '', $label, $r);$el->setAttributes($el->getAttributes() + ['class' => ' stars-' . $r]);$radioarray[] = $el;}$el = $mform->addGroup($radioarray, 'ratinggroup', get_string('rating', 'tool_courserating'), [' ', ' '], false);$el->setAttributes($el->getAttributes() + ['class' => 'tool_courserating-form-stars-group']);if (helper::get_setting(constants::SETTING_USEHTML)) {$options = helper::review_editor_options($this->get_context_for_dynamic_submission());$mform->addElement('editor', 'review_editor', get_string('review', 'tool_courserating'),['rows' => 4], $options);} else {$mform->addElement('textarea', 'review', get_string('review', 'tool_courserating'),['rows' => 4]);$mform->setType('review', PARAM_TEXT);}}/*** Form validation** @param array $data* @param array $files* @return array*/public function validation($data, $files) {$errors = [];if (empty($data['rating'])) {$errors['ratinggroup'] = get_string('required');}return $errors;}/*** Display the form** @return void*/public function display() {parent::display();global $PAGE;$PAGE->requires->js_call_amd('tool_courserating/rating', 'setupAddRatingForm',[$this->_form->getElement('ratinggroup')->getAttribute('id')]);}/*** Current context** @return \context*/protected function get_context_for_dynamic_submission(): \context {return \context_course::instance($this->get_course_id());}/*** Check access and throw exception if not allowed** @return void* @throws moodle_exception*/protected function check_access_for_dynamic_submission(): void {permission::require_can_add_rating($this->get_course_id());}/*** Process form submission*/public function process_dynamic_submission() {$data = $this->get_data();api::set_rating($this->get_course_id(), $data);}/*** Load in existing data as form defaults*/public function set_data_for_dynamic_submission(): void {$this->set_data(api::prepare_rating_for_form($this->get_course_id()));}/*** Fake URL for atto auto-save** @return moodle_url*/protected function get_page_url_for_dynamic_submission(): moodle_url {return new moodle_url('/course/view.php', ['id' => $this->get_course_id(), 'addrating' => 1]);}}