From 8baf412ef7701caba68f7249d29a201d5e00bb0d Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Mon, 6 Aug 2018 17:36:36 +1000 Subject: [PATCH] MDL-62960 calendar: Visuall indicator for valid course event drop zones --- .../external/calendar_event_exporter.php | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/calendar/classes/external/calendar_event_exporter.php b/calendar/classes/external/calendar_event_exporter.php index 1764d12271d..1f79d199c79 100644 --- a/calendar/classes/external/calendar_event_exporter.php +++ b/calendar/classes/external/calendar_event_exporter.php @@ -176,6 +176,9 @@ class calendar_event_exporter extends event_exporter_base { if ($event->get_course_module()) { $values = array_merge($values, $this->get_module_timestamp_limits($event)); + } else if ($hascourse && $course->id != SITEID && empty($event->get_group())) { + // This is a course event. + $values = array_merge($values, $this->get_course_timestamp_limits($event)); } return $values; @@ -210,6 +213,44 @@ class calendar_event_exporter extends event_exporter_base { return $this->event->get_type(); } + /** + * Return the set of minimum and maximum date timestamp values + * for the given event. + * + * @param event_interface $event + * @return array + */ + protected function get_course_timestamp_limits($event) { + $values = []; + $mapper = container::get_event_mapper(); + $starttime = $event->get_times()->get_start_time(); + + list($min, $max) = component_callback( + 'core_course', + 'core_calendar_get_valid_event_timestart_range', + [$mapper->from_event_to_legacy_event($event), $event->get_course()->get_proxied_instance()], + [false, false] + ); + + // The callback will return false for either of the + // min or max cutoffs to indicate that there are no + // valid timestart values. In which case the event is + // not draggable. + if ($min === false || $max === false) { + return ['draggable' => false]; + } + + if ($min) { + $values = array_merge($values, $this->get_timestamp_min_limit($starttime, $min)); + } + + if ($max) { + $values = array_merge($values, $this->get_timestamp_max_limit($starttime, $max)); + } + + return $values; + } + /** * Return the set of minimum and maximum date timestamp values * for the given event.