• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/synchronization.php
  • Класс: BitrixCalendarSyncManagersSynchronization
  • Вызов: Synchronization::createRecurrence
public function createRecurrence(Event $event, Context $context): Result
{
	// if (empty($event->getRecurringRule()))
	// {
	// 	return $this->createEvent($event, $context);
	// }

	$eventExceptionsMap = $this->getEventExceptionsMap($event);
	$mainResult = new Result();
	$data = [];
	$eventCloner = new CoreBuildersEventCloner($event);
	/** @var FactoryInterface $factory */
	foreach ($this->factories as $factory)
	{
		if ($this->checkExclude($factory, $context))
		{
			continue;
		}
		try
		{
			$safeEvent = $eventCloner->build();
			$vendorSyncManager = $this->getVendorSynchronization($factory);
			$eventContext = $this->prepareEventContext($safeEvent, $context, $factory);
			$syncEvent = $this->prepareRecurrenceEvent($safeEvent, $eventExceptionsMap);

			$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);
}