- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/office365/incomingmanager.php
- Класс: Bitrix\Calendar\Sync\Office365\IncomingManager
- Вызов: IncomingManager::getEvents
public function getEvents(SyncSection $syncSection): Result
{
$syncEventMap = new SyncEventMap();
$result = (new Result())->setData([
'externalSyncEventMap' => $syncEventMap,
]);
$service = $this->context->getVendorSyncService();
$this->lastSectionConnection = $syncSection->getSectionConnection();
foreach ($service->getCalendarDelta($syncSection->getSectionConnection()) as $eventId => $eventPack)
{
/** @var EventDto $dto */
if ($dto = ($eventPack[Helper::EVENT_TYPES['deleted']] ?? null))
{
$this->pushIntoSyncEventMap(
$syncEventMap,
$eventId,
$this->prepareDeletedSyncEvent($dto, $syncSection),
'delete' // change to dictionary constant
);
}
elseif ($dto = ($eventPack[Helper::EVENT_TYPES['single']] ?? null))
{
$this->pushIntoSyncEventMap($syncEventMap, $eventId, $this->prepareSyncEvent($dto, $syncSection));
}
elseif ($dto = ($eventPack[Helper::EVENT_TYPES['series']] ?? null))
{
$master = $this->prepareSyncEvent($dto, $syncSection);
$this->pushIntoSyncEventMap($syncEventMap, $eventId, $master);
if ($master->getEvent()->getRecurringRule())
{
$master->getEvent()
->setExcludedDateCollection(new Core\Event\Properties\ExcludedDatesCollection([]));
if ($exceptions = ($eventPack[Helper::EVENT_TYPES['exception']] ?? null))
{
foreach ($exceptions as $exceptionDto)
{
$exception = $this->prepareSyncEvent($exceptionDto, $syncSection)
->setAction(Dictionary::SYNC_EVENT_ACTION['create'])
;
$master->addInstance($exception);
}
}
/** @var DateTimeDto[] $instances */
$instances = array_map(function (DateTimeDto $val) use ($master) {
$result = (new DateTime(
$val->dateTime,
new DateTimeZone($val->timeZone)
))->setTimezone($master->getEvent()->getStartTimeZone()->getTimeZone());
return $result->format('d.m.Y');
}, ($eventPack[Helper::EVENT_TYPES['occurrence']] ?? []));
$deltaPeriod = $this->context->getHelper()->getDeltaInterval();
$computedInstances = (new Core\Event\Tools\Recurrence())->getEventOccurenceDates(
$master->getEvent(),
[
'limitDateFrom' => $deltaPeriod['from'],
'limitDateTo' => $deltaPeriod['to'],
]
);
foreach ($computedInstances as $date => $dateTime)
{
if (!in_array($date, $instances))
{
$master->getEvent()->getExcludedDateCollection()->add(
Core\Base\Date::createDateFromFormat($date, 'd.m.Y')
->resetTime()
->setDateTimeFormat('d.m.Y')
);
}
}
}
}
}
return $result;
}