- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/synchronization.php
- Класс: BitrixCalendarSyncManagersSynchronization
- Вызов: Synchronization::reCreateRecurrence
public function reCreateRecurrence(Event $masterEvent, Context $context): Result
{
$mainResult = new Result();
$eventExceptionsMap = $this->getEventExceptionsMap($masterEvent);
$data = [];
$masterEvent->setVersion($masterEvent->getVersion() + 1);
$eventCloner = new CoreBuildersEventCloner($masterEvent);
/** @var FactoryInterface $factory */
foreach ($this->factories as $factory)
{
if ($this->checkExclude($factory, $context))
{
continue;
}
try
{
$safeEvent = $eventCloner->build();
$safeExceptionsMap = $this->cloneEventMap($eventExceptionsMap);
$vendorSyncManager = $this->getVendorSynchronization($factory);
$eventContext = $this->prepareEventContext($safeEvent, clone $context, $factory);
if ($factory->getServiceName() === SyncIcloudFactory::SERVICE_NAME)
{
$syncEvent = $this->prepareRecurrenceEvent($safeEvent, $safeExceptionsMap, $factory);
$vendorResult = $vendorSyncManager->updateRecurrence($syncEvent, $eventContext);
}
else
{
$syncEvent = $this->prepareRecurrenceEvent($safeEvent, $safeExceptionsMap);
$deleteResult = $vendorSyncManager->deleteEvent($safeEvent, clone $eventContext);
if ($deleteResult->isSuccess() && $syncEvent->getEventConnection())
{
$this->mapperFactory->getEventConnection()->delete($syncEvent->getEventConnection());
}
$syncEvent->setEventConnection(null);
$vendorResult = $vendorSyncManager->createRecurrence($syncEvent, $eventContext);
}
$data[$this->getVendorCode($factory)] = $vendorResult;
if (!$vendorResult->isSuccess())
{
$mainResult->addErrors($vendorResult->getErrors());
}
}
catch (RemoteAccountException $e)
{
$mainResult->addError(new Error($e->getMessage(), $e->getCode()));
}
}
return $mainResult->setData($data);
}