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