• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/synchronization.php
  • Класс: BitrixCalendarSyncManagersSynchronization
  • Вызов: Synchronization::execActionEvent
private function execActionEvent(string $method, Event $event, Context $context): Result
{
	$mainResult = new Result();
	$data = [];
	$eventCloner = new CoreBuildersEventCloner($event);
	$pushManager = new PushManager();
	$push = null;
	
	/** @var FactoryInterface $factory */
	foreach ($this->factories as $factory)
	{
		if ($this->checkExclude($factory, $context, $method))
		{
			continue;
		}
		
		try
		{
			
			$clonedEvent = $eventCloner->build();
			$vendorSync = $this->getVendorSynchronization($factory);
			$eventContext = $this->prepareEventContext($clonedEvent, clone $context, $factory);
			
			if ($eventContext->getSectionConnection()?->getId())
			{
				$push = $pushManager->getPush(PushManager::TYPE_SECTION_CONNECTION, $eventContext->getSectionConnection()->getId());
				$pushManager->setBlockPush($push);
			}

			$vendorResult = $vendorSync->$method($clonedEvent, $eventContext);

			$data[$this->getVendorCode($factory)] = $vendorResult;
			if (!$vendorResult->isSuccess())
			{
				$mainResult->addErrors($vendorResult->getErrors());
			}
		}
		catch (RemoteAccountException $e)
		{
			$mainResult->addError(new Error($e->getMessage(), $e->getCode()));
		}
		finally
		{
			$pushManager->setUnblockPush($push);
		}
	}

	return $mainResult->setData($data);
}