2 // This file is part of Moodle - http://moodle.org/
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 * Event create form and update form mapper.
20 * @package core_calendar
21 * @copyright 2017 Ryan Wyllie <ryan@moodle.com>
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25 namespace core_calendar\local\event\mappers;
27 defined('MOODLE_INTERNAL') || die();
29 require_once($CFG->dirroot . '/calendar/lib.php');
32 * Event create form and update form mapper class.
34 * This class will perform the necessary data transformations to take
35 * a legacy event and build the appropriate data structure for both the
36 * create and update event forms.
38 * It will also do the reverse transformation
39 * and take the returned form data and provide a data structure that can
40 * be used to set legacy event properties.
42 * @copyright 2017 Ryan Wyllie <ryan@moodle.com>
43 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
45 class create_update_form_mapper implements create_update_form_mapper_interface {
48 * Generate the appropriate data for the form from a legacy event.
50 * @param \calendar_event $legacyevent
53 public function from_legacy_event_to_data(\calendar_event $legacyevent) {
54 $legacyevent->count_repeats();
55 $data = $legacyevent->properties();
56 $data->timedurationuntil = $legacyevent->timestart + $legacyevent->timeduration;
57 $data->duration = (empty($legacyevent->timeduration)) ? 0 : 1;
59 if ($legacyevent->eventtype == 'group') {
60 // Set up the correct value for the to display on the form.
61 $data->groupid = $legacyevent->groupid;
62 $data->groupcourseid = $legacyevent->courseid;
64 if ($legacyevent->eventtype == 'course') {
65 // Set up the correct value for the to display on the form.
66 $data->courseid = $legacyevent->courseid;
68 $data->description = [
69 'text' => $data->description,
70 'format' => $data->format
73 // Don't return context or subscription because they're not form values and break validation.
74 if (isset($data->context)) {
75 unset($data->context);
77 if (isset($data->subscription)) {
78 unset($data->subscription);
85 * Generate the appropriate calendar_event properties from the form data.
87 * @param \stdClass $data
90 public function from_data_to_event_properties(\stdClass $data) {
91 $properties = clone($data);
93 if ($data->eventtype == 'group') {
94 if (isset($data->groupcourseid)) {
95 $properties->courseid = $data->groupcourseid;
96 unset($properties->groupcourseid);
98 if (isset($data->groupid)) {
99 $properties->groupid = $data->groupid;
102 // Default course id if none is set.
103 if (empty($properties->courseid)) {
104 if ($properties->eventtype == 'site') {
105 $properties->courseid = SITEID;
107 $properties->courseid = 0;
110 $properties->courseid = $data->courseid;
114 // Decode the form fields back into valid event property.
115 $properties->timeduration = $this->get_time_duration_from_form_data($data);
121 * A helper function to calculate the time duration for an event based on
122 * the event_form data.
124 * @param \stdClass $data event_form data
127 private function get_time_duration_from_form_data(\stdClass $data) {
128 if ($data->duration == 1) {
129 return $data->timedurationuntil - $data->timestart;
130 } else if ($data->duration == 2) {
131 return $data->timedurationminutes * MINSECS;