Page MenuHomePhabricator

Patch: Calculate missing end date from duration
Open, Needs TriagePublic

Description

I noticed that the davcal table view shows the current time as the end date when an event does not have an DTEND property.
In my case that happened when creating an recurring event in Nextcloud. It seems to be caused by the DateTime constructor in syntax/table.php:261 which gets called with null if $event['end'] is empty.

This patch calculates the end date using the DURATION property.

--- helper.php	2019-04-30 08:34:58.000000000 +0200
+++ helper_new.php	2020-02-10 19:06:52.203240422 +0100
@@ -1109,6 +1109,14 @@
           $entry['end'] = $dtEnd->format("Y-m-d");
         else 
           $entry['end'] = $dtEnd->format(\DateTime::ATOM);
+      } else {
+        if($event->DURATION !== null){
+          $interval = $event->DURATION->getDateInterval();
+          $datetime_start = new DateTime($start->getValue());
+          $dtEnd = $datetime_start->add($interval);
+          $dtEnd->setTimezone($timezone);
+          $entry['end'] = $dtEnd->format(\DateTime::ATOM);
+        }
       }
       $description = $event->DESCRIPTION;
       if($description !== null)

Event Timeline

davidmehren created this object in space S1 Open Source.

Thanks for the patch, I'll review and apply it as soon as possible (there is another patch pending that arrived via E-Mail that needs some work as well).