diff --git a/calendar/export_execute.php b/calendar/export_execute.php index c604f22ed17a3..74755f2851fb1 100644 --- a/calendar/export_execute.php +++ b/calendar/export_execute.php @@ -215,10 +215,14 @@ //dtend is better than duration, because it works in Microsoft Outlook and works better in Korganizer $ev->add_property('dtstart', Bennu::timestamp_to_datetime($event->timestart)); // when event starts. $ev->add_property('dtend', Bennu::timestamp_to_datetime($event->timestart + $event->timeduration)); + } else if ($event->timeduration == 0) { + // When no duration is present, the event is instantaneous event, ex - Due date of a module. + // Moodle doesn't support all day events yet. See MDL-56227. + $ev->add_property('dtstart', Bennu::timestamp_to_datetime($event->timestart)); + $ev->add_property('dtend', Bennu::timestamp_to_datetime($event->timestart)); } else { - // When no duration is present, ie an all day event, VALUE should be date instead of time and dtend = dtstart + 1 day. - $ev->add_property('dtstart', Bennu::timestamp_to_date($event->timestart), array('value' => 'DATE')); // All day event. - $ev->add_property('dtend', Bennu::timestamp_to_date($event->timestart + DAYSECS), array('value' => 'DATE')); // All day event. + // This can be used to represent all day events in future. + throw new coding_exception("Negative duration is not supported yet."); } if ($event->courseid != 0) { $coursecontext = context_course::instance($event->courseid); diff --git a/calendar/lib.php b/calendar/lib.php index 55ad67fb8fec4..e2749eaba4951 100644 --- a/calendar/lib.php +++ b/calendar/lib.php @@ -2935,7 +2935,8 @@ function calendar_add_icalendar_event($event, $courseid, $subscriptionid, $timez // Check to see if the event started at Midnight on the imported calendar. date_default_timezone_set($timezone); if (date('H:i:s', $eventrecord->timestart) === "00:00:00") { - // This event should be an all day event. + // This event should be an all day event. This is not correct, we don't do anything differently for all day events. + // See MDL-56227. $eventrecord->timeduration = 0; } \core_date::set_default_server_timezone(); diff --git a/lib/bennu/iCalendar_components.php b/lib/bennu/iCalendar_components.php index 9b9e313572c4e..83a1e5f573fb1 100644 --- a/lib/bennu/iCalendar_components.php +++ b/lib/bennu/iCalendar_components.php @@ -411,7 +411,7 @@ function invariant_holds() { // DTEND must be later than DTSTART // The standard is not clear on how to hande different value types though // TODO: handle this correctly even if the value types are different - if($this->properties['DTEND'][0]->value <= $this->properties['DTSTART'][0]->value) { + if($this->properties['DTEND'][0]->value < $this->properties['DTSTART'][0]->value) { return false; } diff --git a/lib/bennu/readme_moodle.txt b/lib/bennu/readme_moodle.txt index e33a956898af6..845664cf3c1ef 100644 --- a/lib/bennu/readme_moodle.txt +++ b/lib/bennu/readme_moodle.txt @@ -8,3 +8,4 @@ modifications: 5/ updated DTEND;TZID and DTSTAR;TZID values to support quotations (7 Nov 2014) 6/ MDL-49032: fixed rfc2445_fold() to fix incorrect RFC2445_WSP definition (16 Sep 2015) 7/ added timestamp_to_date function to support zero duration events (16 Sept 2015) +8/ Updated \iCalendar_event::invariant_holds() to allow for same dtstart and dtend timestamps (13 July 2017)