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