• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/icloud/apiservice.php
  • Класс: BitrixCalendarSyncIcloudApiService
  • Вызов: ApiService::prepareRecurrenceData
private function prepareRecurrenceData(SyncEvent $recurrenceEvent, string $path, $xmlId): array
{
	$instanceDates = [];
	$exDates = $recurrenceEvent->getEvent()->getExcludedDateCollection();

	/** @var SyncEvent $instance */
	foreach ($recurrenceEvent->getInstanceMap()->getCollection() as $instance)
	{
		$instanceDates[] = $instance->getEvent()->getOriginalDateFrom()
			? $instance->getEvent()->getOriginalDateFrom()->format('Ymd')
			: $instance->getEvent()->getStart()->format('Ymd')
		;
	}

	if ($exDates)
	{
		/**
		 * @var int $key
		 * @var Date $date
		 */
		foreach ($exDates->getCollection() as $key => $date)
		{
			if (in_array($date->format('Ymd'), $instanceDates, true))
			{
				$exDates->remove($key);
			}
		}

		$recurrenceEvent->getEvent()->setExcludedDateCollection($exDates);
	}

	$eventPath = $this->davClient->GetRequestEventPath($path, $xmlId);
	$eventPath = $this->getPath($eventPath, $xmlId);
	$calendarData[] = EventBuilder::getInstance()->getContent($recurrenceEvent->getEvent());

	foreach ($recurrenceEvent->getInstanceMap()->getCollection() as $instance)
	{
		$instance->getEvent()->setUid($xmlId);
		$calendarData[] = EventBuilder::getInstance()->getContent($instance->getEvent());
	}

	if ($calendarData)
	{
		$calendarData = (new RecurrenceEventBuilder($calendarData))->Render();
	}

	return [$eventPath, $calendarData];
}