Example #1
0
 /**
  * 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;
     }
 }