Differences Between: [Versions 310 and 311] [Versions 39 and 311]
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 25 namespace core_calendar\local\event\mappers; 26 27 defined('MOODLE_INTERNAL') || die(); 28 29 require_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 */ 45 class 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 * 50 * @param \calendar_event $legacyevent 51 * @return stdClass 52 */ 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; 58 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; 63 } 64 if ($legacyevent->eventtype == 'course') { 65 // Set up the correct value for the to display on the form. 66 $data->courseid = $legacyevent->courseid; 67 } 68 $data->description = [ 69 'text' => $data->description, 70 'format' => $data->format 71 ]; 72 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); 76 } 77 if (isset($data->subscription)) { 78 unset($data->subscription); 79 } 80 81 return $data; 82 } 83 84 /** 85 * Generate the appropriate calendar_event properties from the form data. 86 * 87 * @param \stdClass $data 88 * @return stdClass 89 */ 90 public function from_data_to_event_properties(\stdClass $data) { 91 $properties = clone($data); 92 93 if ($data->eventtype == 'group') { 94 if (isset($data->groupcourseid)) { 95 $properties->courseid = $data->groupcourseid; 96 unset($properties->groupcourseid); 97 } 98 if (isset($data->groupid)) { 99 $properties->groupid = $data->groupid; 100 } 101 } else { 102 // Default course id if none is set. 103 if (empty($properties->courseid)) { 104 if ($properties->eventtype == 'site') { 105 $properties->courseid = SITEID; 106 } else { 107 $properties->courseid = 0; 108 } 109 } else { 110 $properties->courseid = $data->courseid; 111 } 112 if (empty($properties->groupid)) { 113 $properties->groupid = 0; 114 } 115 } 116 117 // Decode the form fields back into valid event property. 118 $properties->timeduration = $this->get_time_duration_from_form_data($data); 119 120 return $properties; 121 } 122 123 /** 124 * A helper function to calculate the time duration for an event based on 125 * the event_form data. 126 * 127 * @param \stdClass $data event_form data 128 * @return int 129 */ 130 private function get_time_duration_from_form_data(\stdClass $data) { 131 if ($data->duration == 1) { 132 return $data->timedurationuntil - $data->timestart; 133 } else if ($data->duration == 2) { 134 return $data->timedurationminutes * MINSECS; 135 } else { 136 return 0; 137 } 138 } 139 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body