From 63b13467a92ea70625a6162cc29eb090d36b8f61 Mon Sep 17 00:00:00 2001 From: Simey Lameze Date: Mon, 18 Sep 2017 12:08:06 +0800 Subject: [PATCH] MDL-59750 calendar: organise exporters code --- .../external/calendar_event_exporter.php | 22 +++++++++++--- calendar/classes/external/day_exporter.php | 2 -- calendar/classes/external/event_exporter.php | 23 -------------- .../classes/external/event_exporter_base.php | 30 ++++++++++++++++++- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/calendar/classes/external/calendar_event_exporter.php b/calendar/classes/external/calendar_event_exporter.php index f83f2738267..f20c7f71990 100644 --- a/calendar/classes/external/calendar_event_exporter.php +++ b/calendar/classes/external/calendar_event_exporter.php @@ -28,7 +28,7 @@ defined('MOODLE_INTERNAL') || die(); use \core_course\external\course_summary_exporter; use \renderer_base; - +require_once($CFG->dirroot . '/course/lib.php'); /** * Class for displaying a calendar event. * @@ -71,12 +71,26 @@ class calendar_event_exporter extends event_exporter_base { global $CFG; $values = parent::get_other_values($output); + $event = $this->event; - $eventid = $this->event->get_id(); + if ($moduleproxy = $event->get_course_module()) { + $modulename = $moduleproxy->get('modname'); + $moduleid = $moduleproxy->get('id'); + $url = new \moodle_url(sprintf('/mod/%s/view.php', $modulename), ['id' => $moduleid]); - $url = new \moodle_url($this->related['daylink'], [], "event_{$eventid}"); + // Build edit event url for action events. + $params = array('update' => $moduleid, 'return' => true, 'sesskey' => sesskey()); + $editurl = new \moodle_url('/course/mod.php', $params); + $values['editurl'] = $editurl->out(false); + } else if ($event->get_type() == 'course') { + $url = course_get_url($event->get_course()->get('id') ?: SITEID); + } else { + // TODO MDL-58866 We do not have any way to find urls for events outside of course modules. + $course = $event->get_course()->get('id') ?: SITEID; + + $url = course_get_url($course); + } $values['url'] = $url->out(false); - $values['islastday'] = false; $today = $this->related['type']->timestamp_to_date_array($this->related['today']); diff --git a/calendar/classes/external/day_exporter.php b/calendar/classes/external/day_exporter.php index edb075d2dd4..2965451c086 100644 --- a/calendar/classes/external/day_exporter.php +++ b/calendar/classes/external/day_exporter.php @@ -202,8 +202,6 @@ class day_exporter extends exporter { return $exporter->export($output); }, $eventexporters); - - $return['calendareventtypes'] = array_map(function($exporter) { return $exporter->get_calendar_event_type(); }, $eventexporters); diff --git a/calendar/classes/external/event_exporter.php b/calendar/classes/external/event_exporter.php index 35ce4f9ff1a..2642423452c 100644 --- a/calendar/classes/external/event_exporter.php +++ b/calendar/classes/external/event_exporter.php @@ -50,10 +50,6 @@ class event_exporter extends event_exporter_base { protected static function define_other_properties() { $values = parent::define_other_properties(); - - $values['isactionevent'] = ['type' => PARAM_BOOL]; - $values['iscourseevent'] = ['type' => PARAM_BOOL]; - $values['candelete'] = ['type' => PARAM_BOOL]; $values['url'] = ['type' => PARAM_URL]; $values['action'] = [ 'type' => event_action_exporter::read_properties_definition(), @@ -63,12 +59,6 @@ class event_exporter extends event_exporter_base { 'type' => PARAM_URL, 'optional' => true, ]; - $values['groupname'] = [ - 'type' => PARAM_RAW, - 'optional' => true, - 'default' => null, - 'null' => NULL_ALLOWED - ]; return $values; } @@ -87,21 +77,16 @@ class event_exporter extends event_exporter_base { $event = $this->event; $context = $this->related['context']; - $values['isactionevent'] = false; - $values['iscourseevent'] = false; if ($moduleproxy = $event->get_course_module()) { $modulename = $moduleproxy->get('modname'); $moduleid = $moduleproxy->get('id'); $url = new \moodle_url(sprintf('/mod/%s/view.php', $modulename), ['id' => $moduleid]); - $values['isactionevent'] = true; - // Build edit event url for action events. $params = array('update' => $moduleid, 'return' => true, 'sesskey' => sesskey()); $editurl = new \moodle_url('/course/mod.php', $params); $values['editurl'] = $editurl->out(false); } else if ($event->get_type() == 'course') { - $values['iscourseevent'] = true; $url = \course_get_url($this->related['course'] ?: SITEID); } else { // TODO MDL-58866 We do not have any way to find urls for events outside of course modules. @@ -118,15 +103,7 @@ class event_exporter extends event_exporter_base { $values['action'] = $actionexporter->export($output); } - if ($course = $this->related['course']) { - $coursesummaryexporter = new course_summary_exporter($course, ['context' => $context]); - $values['course'] = $coursesummaryexporter->export($output); - } - if ($group = $event->get_group()) { - $values['groupname'] = format_string($group->get('name'), true, - ['context' => \context_course::instance($event->get_course()->get('id'))]); - } return $values; } diff --git a/calendar/classes/external/event_exporter_base.php b/calendar/classes/external/event_exporter_base.php index 06ef9a1fec1..cb3ba804f89 100644 --- a/calendar/classes/external/event_exporter_base.php +++ b/calendar/classes/external/event_exporter_base.php @@ -197,7 +197,19 @@ class event_exporter_base extends exporter { ], 'formattedtime' => [ 'type' => PARAM_RAW, - ] + ], + 'isactionevent' => [ + 'type' => PARAM_BOOL + ], + 'iscourseevent' => [ + 'type' => PARAM_BOOL + ], + 'groupname' => [ + 'type' => PARAM_RAW, + 'optional' => true, + 'default' => null, + 'null' => NULL_ALLOWED + ], ]; } @@ -212,6 +224,13 @@ class event_exporter_base extends exporter { $event = $this->event; $legacyevent = container::get_event_mapper()->from_event_to_legacy_event($event); $context = $this->related['context']; + $values['isactionevent'] = false; + $values['iscourseevent'] = false; + if ($moduleproxy = $event->get_course_module()) { + $values['isactionevent'] = true; + } else if ($event->get_type() == 'course') { + $values['iscourseevent'] = true; + } $timesort = $event->get_times()->get_sort_time()->getTimestamp(); $iconexporter = new event_icon_exporter($event, ['context' => $context]); @@ -238,6 +257,15 @@ class event_exporter_base extends exporter { $values['formattedtime'] = calendar_format_event_time($legacyevent, time(), null, false, $timesort); + if ($course = $this->related['course']) { + $coursesummaryexporter = new course_summary_exporter($course, ['context' => $context]); + $values['course'] = $coursesummaryexporter->export($output); + } + + if ($group = $event->get_group()) { + $values['groupname'] = format_string($group->get('name'), true, + ['context' => \context_course::instance($event->get_course()->get('id'))]); + } return $values; }