mirror of
https://github.com/nextcloud/server.git
synced 2026-02-13 15:54:59 -05:00
fix(caldav): duration handling in the event reader class
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
This commit is contained in:
parent
94e1241c58
commit
cbcc8fc1a9
1 changed files with 9 additions and 6 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue