diff --git a/Classes/Ical/DissectEventAdapter.php b/Classes/Ical/DissectEventAdapter.php index a19c4a4f..9fd37a1f 100644 --- a/Classes/Ical/DissectEventAdapter.php +++ b/Classes/Ical/DissectEventAdapter.php @@ -187,4 +187,12 @@ public function getState(): string return ConfigurationInterface::STATE_DEFAULT; } + + /** + * {@inheritdoc} + */ + public function getRRule(): array + { + return $this->event->getRRule() ?? []; + } } diff --git a/Classes/Ical/EventConfigurationInterface.php b/Classes/Ical/EventConfigurationInterface.php new file mode 100644 index 00000000..c463f9fc --- /dev/null +++ b/Classes/Ical/EventConfigurationInterface.php @@ -0,0 +1,89 @@ +event->RRULE)) { + return []; + } + $rrule = $this->event->RRULE->getValue(); + if (\is_string($rrule)) { + $rrule = \Sabre\VObject\Property\ICalendar\Recur::stringToArray($rrule); + } + + return $rrule; + } } diff --git a/Tests/Unit/Ical/ICalEventTest.php b/Tests/Unit/Ical/ICalEventTest.php index 20b29c91..24493f45 100644 --- a/Tests/Unit/Ical/ICalEventTest.php +++ b/Tests/Unit/Ical/ICalEventTest.php @@ -373,4 +373,30 @@ public function testDuration() self::assertEquals(69240, $event->getEndTime()); self::assertFalse($event->isAllDay()); } + + public function testRRule() + { + $input = 'BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//CalendarizeTest +BEGIN:VEVENT +UID:64843636-21d6-44e3-8f8f-6174845e2342@example.com +DTSTAMP:20050404T112124Z +DTSTART:20050404T195534Z +RRULE:FREQ=DAILY;INTERVAL=1;COUNT=45 +END:VEVENT +END:VCALENDAR +'; + $event = $this->getEvent($input); + $rrule = $event->getRRule(); + + self::assertArrayHasKey('FREQ', $rrule); + self::assertEqualsIgnoringCase('DAILY', $rrule['FREQ']); + + self::assertArrayHasKey('INTERVAL', $rrule); + self::assertEqualsIgnoringCase('1', $rrule['INTERVAL']); + + self::assertArrayHasKey('COUNT', $rrule); + self::assertEqualsIgnoringCase('45', $rrule['COUNT']); + } }