diff options
author | Richard Steinmetz <richard@steinmetz.cloud> | 2024-10-16 09:53:59 +0200 |
---|---|---|
committer | Richard Steinmetz <richard@steinmetz.cloud> | 2024-10-16 09:55:30 +0200 |
commit | cbcc8fc1a904dfb5057ca856472e04a88df5af75 (patch) | |
tree | 51ff88c497b3a44ccd1ae98a3c451d1f17cd3492 /apps/dav/lib/CalDAV | |
parent | 94e1241c589e13464a958b29052739a354aadddd (diff) | |
download | nextcloud-server-cbcc8fc1a904dfb5057ca856472e04a88df5af75.tar.gz nextcloud-server-cbcc8fc1a904dfb5057ca856472e04a88df5af75.zip |
fix(caldav): duration handling in the event reader classfix/caldav/event-reader-duration
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
Diffstat (limited to 'apps/dav/lib/CalDAV')
-rw-r--r-- | apps/dav/lib/CalDAV/EventReader.php | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/apps/dav/lib/CalDAV/EventReader.php b/apps/dav/lib/CalDAV/EventReader.php index 6e845c596ae..7ff05501ea8 100644 --- a/apps/dav/lib/CalDAV/EventReader.php +++ b/apps/dav/lib/CalDAV/EventReader.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace OCA\DAV\CalDAV; use DateTime; +use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; use InvalidArgumentException; @@ -109,7 +110,7 @@ class EventReader { unset($events[$key]); } } - + // No base event was found. CalDAV does allow cases where only // overridden instances are stored. // @@ -173,15 +174,17 @@ class EventReader { // evaluate if duration exists // extract duration and calculate end date elseif (isset($this->baseEvent->DURATION)) { - $this->baseEventDuration = $this->baseEvent->DURATION->getDateInterval(); - $this->baseEventEndDate = ((clone $this->baseEventStartDate)->add($this->baseEventDuration)); + $this->baseEventEndDate = DateTimeImmutable::createFromInterface($this->baseEventStartDate) + ->add($this->baseEvent->DURATION->getDateInterval()); + $this->baseEventDuration = $this->baseEventEndDate->getTimestamp() - $this->baseEventStartDate->getTimestamp(); } // evaluate if start date is floating // set duration to 24 hours and calculate the end date // according to the rfc any event without a end date or duration is a complete day elseif ($this->baseEventStartDateFloating == true) { $this->baseEventDuration = 86400; - $this->baseEventEndDate = ((clone $this->baseEventStartDate)->add($this->baseEventDuration)); + $this->baseEventEndDate = DateTimeImmutable::createFromInterface($this->baseEventStartDate) + ->setTimestamp($this->baseEventStartDate->getTimestamp() + $this->baseEventDuration); } // otherwise, set duration to zero this should never happen else { @@ -220,7 +223,7 @@ class EventReader { foreach ($events as $vevent) { $this->recurrenceModified[$vevent->{'RECURRENCE-ID'}->getDateTime($this->baseEventStartTimeZone)->getTimeStamp()] = $vevent; } - + $this->recurrenceCurrentDate = clone $this->baseEventStartDate; } @@ -375,7 +378,7 @@ class EventReader { * @return int|null */ public function recurringConcludesAfter(): ?int { - + // construct count place holder $count = 0; // retrieve and add RRULE iterations count |