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/>./*** Event create form and update form mapper.** @package core_calendar* @copyright 2017 Ryan Wyllie <ryan@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace core_calendar\local\event\mappers;defined('MOODLE_INTERNAL') || die();require_once($CFG->dirroot . '/calendar/lib.php');/*** Event create form and update form mapper class.** This class will perform the necessary data transformations to take* a legacy event and build the appropriate data structure for both the* create and update event forms.** It will also do the reverse transformation* and take the returned form data and provide a data structure that can* be used to set legacy event properties.** @copyright 2017 Ryan Wyllie <ryan@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class create_update_form_mapper implements create_update_form_mapper_interface {/*** Generate the appropriate data for the form from a legacy event.** @param \calendar_event $legacyevent* @return stdClass*/public function from_legacy_event_to_data(\calendar_event $legacyevent) {$legacyevent->count_repeats();$data = $legacyevent->properties();$data->timedurationuntil = $legacyevent->timestart + $legacyevent->timeduration;$data->duration = (empty($legacyevent->timeduration)) ? 0 : 1;if ($legacyevent->eventtype == 'group') {// Set up the correct value for the to display on the form.$data->groupid = $legacyevent->groupid;$data->groupcourseid = $legacyevent->courseid;}if ($legacyevent->eventtype == 'course') {// Set up the correct value for the to display on the form.$data->courseid = $legacyevent->courseid;}$data->description = ['text' => $data->description,'format' => $data->format];// Don't return context or subscription because they're not form values and break validation.if (isset($data->context)) {unset($data->context);}if (isset($data->subscription)) {unset($data->subscription);}return $data;}/*** Generate the appropriate calendar_event properties from the form data.** @param \stdClass $data* @return stdClass*/public function from_data_to_event_properties(\stdClass $data) {$properties = clone($data);if ($data->eventtype == 'group') {if (isset($data->groupcourseid)) {$properties->courseid = $data->groupcourseid;unset($properties->groupcourseid);}if (isset($data->groupid)) {$properties->groupid = $data->groupid;}} else {// Default course id if none is set.if (empty($properties->courseid)) {if ($properties->eventtype == 'site') {$properties->courseid = SITEID;} else {$properties->courseid = 0;}} else {$properties->courseid = $data->courseid;}if (empty($properties->groupid)) {$properties->groupid = 0;}}// Decode the form fields back into valid event property.$properties->timeduration = $this->get_time_duration_from_form_data($data);return $properties;}/*** A helper function to calculate the time duration for an event based on* the event_form data.** @param \stdClass $data event_form data* @return int*/private function get_time_duration_from_form_data(\stdClass $data) {if ($data->duration == 1) {return $data->timedurationuntil - $data->timestart;} else if ($data->duration == 2) {return $data->timedurationminutes * MINSECS;} else {return 0;}}}