- Модуль: 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];
}