Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 310 and 311] [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]

   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          }
 113  
 114          // Decode the form fields back into valid event property.
 115          $properties->timeduration = $this->get_time_duration_from_form_data($data);
 116  
 117          return $properties;
 118      }
 119  
 120      /**
 121       * A helper function to calculate the time duration for an event based on
 122       * the event_form data.
 123       *
 124       * @param \stdClass $data event_form data
 125       * @return int
 126       */
 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;
 132          } else {
 133              return 0;
 134          }
 135      }
 136  }