From 6fb751562a63700530303798b08701539b6bcaa2 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Fri, 4 Aug 2017 13:06:51 +0800 Subject: [PATCH] MDL-59671 core_calendar: move logic to calendar event exporter --- calendar/classes/external/event_exporter.php | 29 ++++++++ calendar/externallib.php | 70 ++++++-------------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/calendar/classes/external/event_exporter.php b/calendar/classes/external/event_exporter.php index ec2d938dc4a..128fb8cb3ed 100644 --- a/calendar/classes/external/event_exporter.php +++ b/calendar/classes/external/event_exporter.php @@ -26,9 +26,12 @@ namespace core_calendar\external; defined('MOODLE_INTERNAL') || die(); +require_once($CFG->dirroot . "/calendar/lib.php"); + use \core\external\exporter; use \core_calendar\local\event\entities\event_interface; use \core_calendar\local\event\entities\action_event_interface; +use \core_calendar\local\event\container; use \core_course\external\course_summary_exporter; use \renderer_base; @@ -164,6 +167,14 @@ class event_exporter extends exporter { 'course' => [ 'type' => course_summary_exporter::read_properties_definition(), 'optional' => true, + ], + 'canedit' => ['type' => PARAM_BOOL], + 'displayeventsource' => ['type' => PARAM_BOOL], + 'subscription' => [ + 'type' => PARAM_RAW, + 'optional' => true, + 'default' => null, + 'null' => NULL_ALLOWED ] ]; } @@ -177,6 +188,8 @@ class event_exporter extends exporter { protected function get_other_values(renderer_base $output) { $values = []; $event = $this->event; + $legacyevent = container::get_event_mapper()->from_event_to_legacy_event($event); + $context = $this->related['context']; if ($moduleproxy = $event->get_course_module()) { $modulename = $moduleproxy->get('modname'); @@ -207,7 +220,23 @@ class event_exporter extends exporter { $coursesummaryexporter = new course_summary_exporter($course, ['context' => $context]); $values['course'] = $coursesummaryexporter->export($output); } + $values['canedit'] = calendar_edit_event_allowed($legacyevent); + // Handle event subscription. + $values['subscription'] = null; + $values['displayeventsource'] = false; + if (!empty($legacyevent->subscriptionid)) { + $subscription = calendar_get_subscription($legacyevent->subscriptionid); + if (!empty($subscription) && $CFG->calendar_showicalsource) { + $values['displayeventsource'] = true; + $subscriptiondata = new \stdClass(); + if (!empty($subscription->url)) { + $subscriptiondata->url = $subscription->url; + } + $subscriptiondata->name = $subscription->name; + $values['subscription'] = json_encode($subscriptiondata); + } + } return $values; } diff --git a/calendar/externallib.php b/calendar/externallib.php index 037f33221d8..129bf60183f 100644 --- a/calendar/externallib.php +++ b/calendar/externallib.php @@ -712,37 +712,32 @@ class core_calendar_external extends external_api { * @return array Array of event details */ public static function get_calendar_event_by_id($eventid) { - global $CFG; + global $CFG, $PAGE, $USER; require_once($CFG->dirroot."/calendar/lib.php"); - // Parameter validation. $params = ['eventid' => $eventid]; - $params = self::validate_parameters(self::get_calendar_event_by_id_parameters(), $params); + self::validate_parameters(self::get_calendar_event_by_id_parameters(), $params); + $context = \context_user::instance($USER->id); + self::validate_context($context); $warnings = array(); - // We need to get events asked for eventids. - $event = calendar_get_events_by_id([$eventid]); - $eventobj = calendar_event::load($eventid); - list($event[$eventid]->description, $event[$eventid]->format) = $eventobj->format_external_text(); - $event[$eventid]->caneditevent = calendar_edit_event_allowed($eventobj); + $legacyevent = calendar_event::load($eventid); + $legacyevent->count_repeats(); - $event[$eventid]->subscription = null; - $event[$eventid]->displayeventsource = false; - if (!empty($event[$eventid]->subscriptionid)) { - $subscription = calendar_get_subscription($event[$eventid]->subscriptionid); - if (!empty($subscription) && $CFG->calendar_showicalsource) { - $event[$eventid]->displayeventsource = true; - $subscriptiondata = new stdClass(); - if (!empty($subscription->url)) { - $subscriptiondata->url = $subscription->url; - } - $subscriptiondata->name = $subscription->name; - $event[$eventid]->subscription = json_encode($subscriptiondata); - } - } + $eventmapper = event_container::get_event_mapper(); + $event = $eventmapper->from_legacy_event_to_event($legacyevent); - return array('event' => $event[$eventid], 'warnings' => $warnings); + $cache = new events_related_objects_cache([$event]); + $relatedobjects = [ + 'context' => $cache->get_context($event), + 'course' => $cache->get_course($event), + ]; + + $exporter = new event_exporter($event, $relatedobjects); + $renderer = $PAGE->get_renderer('core_calendar'); + + return array('event' => $exporter->export($renderer), 'warnings' => $warnings); } /** @@ -751,35 +746,10 @@ class core_calendar_external extends external_api { * @return external_description */ public static function get_calendar_event_by_id_returns() { + $eventstructure = event_exporter::get_read_structure(); return new external_single_structure(array( - 'event' => new external_single_structure( - array( - 'id' => new external_value(PARAM_INT, 'event id'), - 'name' => new external_value(PARAM_TEXT, 'event name'), - 'description' => new external_value(PARAM_RAW, 'Description', VALUE_OPTIONAL, null, NULL_ALLOWED), - 'format' => new external_format_value('description'), - 'courseid' => new external_value(PARAM_INT, 'course id'), - 'groupid' => new external_value(PARAM_INT, 'group id'), - 'userid' => new external_value(PARAM_INT, 'user id'), - 'repeatid' => new external_value(PARAM_INT, 'repeat id'), - 'modulename' => new external_value(PARAM_TEXT, 'module name', VALUE_OPTIONAL, null, NULL_ALLOWED), - 'instance' => new external_value(PARAM_INT, 'instance id'), - 'eventtype' => new external_value(PARAM_TEXT, 'Event type'), - 'timestart' => new external_value(PARAM_INT, 'timestart'), - 'timeduration' => new external_value(PARAM_INT, 'time duration'), - 'visible' => new external_value(PARAM_INT, 'visible'), - 'uuid' => new external_value(PARAM_TEXT, 'unique id of ical events', VALUE_OPTIONAL, null, NULL_NOT_ALLOWED), - 'sequence' => new external_value(PARAM_INT, 'sequence'), - 'timemodified' => new external_value(PARAM_INT, 'time modified'), - 'subscriptionid' => new external_value(PARAM_INT, 'Subscription id', VALUE_OPTIONAL, null, NULL_ALLOWED), - 'subscription' => new external_value(PARAM_RAW, 'Subscription object serialized', VALUE_OPTIONAL, - null, NULL_ALLOWED), - 'caneditevent' => new external_value(PARAM_BOOL, 'Whether the user can edit the event'), - 'displayeventsource' => new external_value(PARAM_BOOL, 'Whether the source should be displayed'), - ), - 'event' - ), + 'event' => $eventstructure, 'warnings' => new external_warnings() ) );