• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendorsynchronization.php
  • Класс: BitrixCalendarSyncManagersVendorSynchronization
  • Вызов: VendorSynchronization::updateRecurrence
public function updateRecurrence(SyncEvent $recurrenceEvent, EventContext $context): Result
{
	$mainResult = new Result();
	$resultData = [];
	$factory = $this->factory;
	$manager = $factory->getEventManager();
	/** @var SectionConnection $sectionLink */
	$sectionLink = $context->getSectionConnection();
	if (!$sectionLink)
	{
		$mainResult->addError(new Error('Section connection not found'));

		return $mainResult;
	}
	$context->add('sync', 'vendorSectionId', $sectionLink->getVendorSectionId());

	$recurrenceEvent->getEvent()->setUid(
		$recurrenceEvent->getEventConnection()->getVendorEventId()
	);

	if (
		(int)$recurrenceEvent->getEventConnection()->getEventVersion()
		=== $recurrenceEvent->getEvent()->getVersion()
	)
	{
		$result = new Result();
		$result->setData([
			'event' => [
				'id' => $recurrenceEvent->getEventConnection()->getVendorEventId(),
				'etag' => $recurrenceEvent->getEventConnection()->getEntityTag(),
			],
		]);
		$status = Dictionary::SYNC_STATUS['success'];
	}
	else
	{
		try
		{
			$result = $manager->updateRecurrence($recurrenceEvent, $sectionLink, $context);
			if ($result->isSuccess())
			{
				$masterResult = $this->updateEventLink($recurrenceEvent);
				$instanceResult = [];
				/** @var SyncEvent $instance */
				foreach ($recurrenceEvent->getInstanceMap()->getCollection() as $instance)
				{
					if ($instance->getEventConnection() && $instance->getEventConnection()->getId())
					{
						$instanceResult[] = $this->updateEventLink($instance);
					}
					else
					{
						$instanceResult[] = $this->createEventLink(
							$instance,
							$this->factory->getConnection()->getId()
						);
					}
				}

				$status = Dictionary::SYNC_STATUS['success'];
			}
			else
			{
				$status = Dictionary::SYNC_STATUS['failed'];
			}
		}
		catch (NotFoundException $e)
		{
			$recurrenceEvent->getEvent()->setUid(null);
			return $this->createRecurrence($recurrenceEvent, $context);
		}
	}

	$resultData[$factory->getConnection()->getVendor()->getCode()] = [
		'result' => $result,
		'status' => $status,
		'linkMasterResult' => $masterResult ?? null,
		'linkInstancesResult' => $instanceResult ?? null,
	];

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