- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/incomingmanager.php
- Класс: BitrixCalendarSyncManagersIncomingManager
- Вызов: IncomingManager::importSectionEvents
public function importSectionEvents(SectionConnection $sectionLink): Result
{
$mainResult = new Result();
$resultData = [
'events' => [
'deleted' => [],
'imported' => [],
'updated' => [],
'stripped' => [],
'error' => [],
],
];
$pushResult = static function(array $result) use (&$resultData)
{
if (empty($result['entityType']))
{
return;
}
if ($result['entityType'] === 'link')
{
$resultData['events'][$result['action']] = $result['entity']->getEvent()->getId();
}
elseif ($result['entityType'] === 'eventId')
{
$resultData['events'][$result['action']] = $result['entity'];
}
};
$vendorManager = $this->getFactory()->getEventManager();
foreach ($vendorManager->fetchSectionEvents($sectionLink) as $eventPack)
{
$masterId = null;
foreach ($eventPack as $eventData)
{
/** @var Event $event */
if ($event = $eventData['event'])
{
$event->setSection($sectionLink->getSection());
}
if ($eventData['type'] === 'deleted')
{
$result = $this->deleteInstance($eventData['id']);
if ($result->isSuccess())
{
$resultData['events']['deleted'][] = $result->getData()['eventId'];
$resultData[$eventData['id']] = 'delete success';
}
else
{
$resultData['events']['error'][] = $result->getData()['eventId'];
$resultData[$eventData['id']] = 'delete fail';
}
}
elseif ($eventData['type'] === 'single')
{
$result = $this->importEvent(
$eventData['event'],
$eventData['id'],
$eventData['version'],
[
'data' => $eventData['data'] ?? null,
]
);
if ($result->isSuccess())
{
$pushResult($result->getData());
$resultData[$eventData['id']] = 'create success';
}
else
{
$resultData[$eventData['id']] = 'create fail';
}
}
elseif ($eventData['type'] === 'master')
{
$result = $this->importEvent(
$eventData['event'],
$eventData['id'],
$eventData['version'],
[
'recursionEditMode' => 'all',
'data' => $eventData['data'] ?? null,
]);
if ($result->isSuccess())
{
$masterId = $result->getData()['id'];
$resultData[$eventData['id']] = 'create success';
}
else
{
$resultData[$eventData['id']] = 'create fail';
}
}
elseif ($eventData['type'] === 'exception')
{
if ($masterId === null)
{
$resultData[$eventData['id']] = 'create fail: master event not found';
continue;
}
$eventData['event']->setRecurrenceId($masterId);
$result = $this->importEvent(
$eventData['event'],
$eventData['id'],
$eventData['version'],
[
'data' => $eventData['data'] ?? null,
]
);
if ($result->isSuccess())
{
$masterId = $result->getData()['id'];
$resultData[$eventData['id']] = 'create success';
}
else
{
$resultData[$eventData['id']] = 'create fail';
}
}
}
}
return $mainResult->setData($resultData);
}