/** * Add recurrence items * * @param array $times * @param Configuration $configuration * @param array $baseEntry */ protected function addRecurrenceItems(array &$times, Configuration $configuration, array $baseEntry) { if ($configuration->getRecurrence() === Configuration::RECURRENCE_NONE || $configuration->getDay() === Configuration::DAY_NONE) { return; } $recurrenceService = GeneralUtility::makeInstance('HDNET\\Calendarize\\Service\\RecurrenceService'); $amountCounter = $configuration->getCounterAmount(); $tillDate = $configuration->getTillDate(); $maxLimit = $this->getFrequencyLimitPerItem(); $lastLoop = $baseEntry; for ($i = 0; $i < $maxLimit && ($amountCounter === 0 || $i < $amountCounter); $i++) { $loopEntry = $lastLoop; $dateTime = false; if ($configuration->getFrequency() === Configuration::FREQUENCY_MONTHLY) { $dateTime = $recurrenceService->getRecurrenceForNextMonth($loopEntry['start_date'], $configuration->getRecurrence(), $configuration->getDay()); } elseif ($configuration->getFrequency() === Configuration::FREQUENCY_YEARLY) { $dateTime = $recurrenceService->getRecurrenceForNextYear($loopEntry['start_date'], $configuration->getRecurrence(), $configuration->getDay()); } if ($dateTime === false) { break; } /** @var \DateInterval $interval */ $interval = $loopEntry['start_date']->diff($dateTime); $frequencyIncrement = $interval->format('%R%a days'); $loopEntry = $this->createNextLoopEntry($loopEntry, $frequencyIncrement); if ($tillDate instanceof \DateTime && $loopEntry['start_date'] > $tillDate) { break; } $lastLoop = $loopEntry; $times[] = $loopEntry; } }