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