• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendordataexchangemanager.php
  • Класс: BitrixCalendarSyncManagersVendorDataExchangeManager
  • Вызов: VendorDataExchangeManager::mergeExternalEventWithLocalParams
private function mergeExternalEventWithLocalParams(SyncEntitiesSyncEvent $syncEvent): void
{
	/** @var SyncEntitiesSyncEvent $existsSyncEvent */
	if ($existsSyncEvent = $this->syncEventMap->getItem($syncEvent->getEventConnection()->getVendorEventId()))
	{
		$this->mergeSyncEvent(
			$existsSyncEvent,
			$syncEvent,
			$existsSyncEvent->getEventId(),
			$existsSyncEvent->getEventConnection()->getId()
		);

		if (
			$syncEvent->isRecurrence()
			&& $syncEvent->hasInstances()
		)
		{
			foreach ($syncEvent->getInstanceMap() as $instanceSyncEvent)
			{
				if (
					$existsSyncEvent->hasInstances()
					&& $instanceSyncEvent->getEvent()->getOriginalDateFrom()
					&& $existsInstanceSyncEvent = $existsSyncEvent->getInstanceMap()->getItem(
						SyncEntitiesInstanceMap::getKeyByDate(
							$instanceSyncEvent->getEvent()->getOriginalDateFrom()
						)
					)
				)
				{
					$this->mergeSyncEvent(
						$existsInstanceSyncEvent,
						$instanceSyncEvent,
						$existsInstanceSyncEvent->getEventId(),
						$existsInstanceSyncEvent->getEventConnection()->getId()
					);
				}
				else
				{
					$this->prepareNewSyncEvent($syncEvent);
				}
			}
		}

		return;
	}

	/** @var SyncEntitiesSyncEvent $existsMasterSyncEvent */
	if ($existsMasterSyncEvent = $this->syncEventMap->getItem($syncEvent->getEventConnection()->getRecurrenceId()))
	{
		if (
			$existsMasterSyncEvent->hasInstances()
			&& $syncEvent->getEvent()->getOriginalDateFrom()
			&& $existsInstanceSyncEvent = $existsMasterSyncEvent->getInstanceMap()->getItem(
				SyncEntitiesInstanceMap::getKeyByDate(
					$syncEvent->getEvent()->getOriginalDateFrom()
				)
			)
		)
		{
			$this->mergeSyncEvent(
				$existsInstanceSyncEvent,
				$syncEvent,
				$existsInstanceSyncEvent->getEventId(),
				$existsInstanceSyncEvent->getEventConnection()->getId()
			);

			return;
		}

		$this->mergeSyncEvent($existsMasterSyncEvent, $syncEvent);

		return;
	}

	if ($syncEvent->getAction() !== SyncDictionary::SYNC_EVENT_ACTION['delete'])
	{
		$this->prepareNewSyncEvent($syncEvent);
	}
}