weekly release 3.4dev
[moodle.git] / calendar / classes / local / event / mappers / create_update_form_mapper.php
CommitLineData
aa091225
RW
1<?php
2// This file is part of Moodle - http://moodle.org/
3//
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.
8//
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.
13//
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/>.
16
17/**
18 * Event create form and update form mapper.
19 *
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
23 */
24
25namespace core_calendar\local\event\mappers;
26
27defined('MOODLE_INTERNAL') || die();
28
29require_once($CFG->dirroot . '/calendar/lib.php');
30
31/**
32 * Event create form and update form mapper class.
33 *
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.
37 *
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.
41 *
42 * @copyright 2017 Ryan Wyllie <ryan@moodle.com>
43 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
44 */
45class create_update_form_mapper implements create_update_form_mapper_interface {
46
47 /**
48 * Generate the appropriate data for the form from a legacy event.
49 *
705eea84 50 * @param \calendar_event $legacyevent
aa091225
RW
51 * @return stdClass
52 */
53 public function from_legacy_event_to_data(\calendar_event $legacyevent) {
54 $legacyevent->count_repeats();
55 $data = $legacyevent->properties(true);
56 $data->timedurationuntil = $legacyevent->timestart + $legacyevent->timeduration;
57 $data->duration = (empty($legacyevent->timeduration)) ? 0 : 1;
58
59 if ($legacyevent->eventtype == 'group') {
60 // Set up the correct value for the to display on the form.
61 $data->groupid = "{$legacyevent->courseid}-{$legacyevent->groupid}";
62 $data->groupcourseid = $legacyevent->courseid;
63 }
64
65 return $data;
66 }
67
68 /**
69 * Generate the appropriate calendar_event properties from the form data.
70 *
705eea84 71 * @param \stdClass $data
aa091225
RW
72 * @return stdClass
73 */
74 public function from_data_to_event_properties(\stdClass $data) {
75 $properties = clone($data);
76
77 // Undo the form definition work around to allow us to have two different
78 // course selectors present depending on which event type the user selects.
79 if (isset($data->groupcourseid)) {
80 $properties->courseid = $data->groupcourseid;
81 unset($properties->groupcourseid);
82 }
83
84 // Pull the group id back out of the value. The form saves the value
85 // as "<courseid>-<groupid>" to allow the javascript to work correctly.
86 if (isset($data->groupid)) {
87 list($courseid, $groupid) = explode('-', $data->groupid);
88 $properties->groupid = $groupid;
89 }
90
91 // Default course id if none is set.
22d44a63 92 if (!isset($properties->courseid)) {
6bb88899
RW
93 if ($properties->eventtype === 'site') {
94 $properties->courseid = SITEID;
95 } else {
96 $properties->courseid = 0;
97 }
aa091225
RW
98 }
99
100 // Decode the form fields back into valid event property.
101 $properties->timeduration = $this->get_time_duration_from_form_data($data);
102
103 return $properties;
104 }
105
106 /**
107 * A helper function to calculate the time duration for an event based on
108 * the event_form data.
109 *
aa091225
RW
110 * @param \stdClass $data event_form data
111 * @return int
112 */
113 private function get_time_duration_from_form_data(\stdClass $data) {
114 if ($data->duration == 1) {
705eea84 115 return $data->timedurationuntil - $data->timestart;
aa091225
RW
116 } else if ($data->duration == 2) {
117 return $data->timedurationminutes * MINSECS;
118 } else {
119 return 0;
120 }
121 }
122}