• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/vendordataexchangemanager.php
  • Класс: BitrixCalendarSyncManagersVendorDataExchangeManager
  • Вызов: VendorDataExchangeManager::validateSyncEventChange
public function validateSyncEventChange(
	SyncEntitiesSyncEvent $syncEvent,
	SyncEntitiesSyncEvent $existsSyncEvent = null
): bool
{
	if (!$existsSyncEvent)
	{
		return true;
	}

	if (
		$syncEvent->getEventConnection() !== null
		&& (
			($syncEvent->getEventConnection()->getVendorVersionId() === $existsSyncEvent->getEventConnection()->getVendorVersionId())
			|| ($syncEvent->getEventConnection()->getEntityTag() === $existsSyncEvent->getEventConnection()->getEntityTag())
		)
	)
	{
		if (
			(
				$syncEvent->getEventConnection()->getConnection()->getVendor()->getCode()
				!== SyncGoogleHelper::GOOGLE_ACCOUNT_TYPE_API
			)
			|| !$this->hasDifferentEventFields($syncEvent, $existsSyncEvent))
		{
			return false;
		}
	}

	// Changing an event for an invitee
	// TODO: move it check to core.
	if ($existsSyncEvent->getEventId() !== $existsSyncEvent->getParentId())
	{
		// temporary this functionality is turned off
		// if (!$existsSyncEvent->getEvent()->isDeleted() && $this->hasDifferentEventFields($syncEvent, $existsSyncEvent))
		// {
		// 	$this->rollbackEvent(
		// 		$existsSyncEvent,
		// 		$syncEvent,
		// 		'CALENDAR_IMPORT_BLOCK_FROM_ATTENDEE'
		// 	);
		// }

		return false;
	}

	// Prevent changing events with booking
	if ($existsSyncEvent->getEvent()->getSpecialLabel() === ResourceBooking::EVENT_LABEL)
	{
		// temporary this functionality is turned off
		// if ($this->hasDifferentEventFields($syncEvent, $existsSyncEvent))
		// {
		//
			// $this->rollbackEvent(
			// 	$existsSyncEvent,
			// 	$syncEvent,
			// 	'CALENDAR_IMPORT_BLOCK_RESOURCE_BOOKING'
			// );
		// }

		return false;
	}

	// temporary this functionality is turned off

	// if ($syncEvent->getAction() !== SyncDictionary::SYNC_EVENT_ACTION['delete']
	// 	&& !$this->checkAttendeesAccessibility($existsSyncEvent->getEvent(), $syncEvent->getEvent()))
	// {
	// 	if ($this->hasDifferentEventFields($syncEvent, $existsSyncEvent))
	// 	{
	// 		$this->rollbackEvent(
	// 			$existsSyncEvent,
	// 			$syncEvent,
	// 			'CALENDAR_IMPORT_BLOCK_ATTENDEE_ACCESSIBILITY'
	// 		);
	// 	}
	//
	// 	return false;
	// }

	if ($syncEvent->isSingle() && $syncEvent->getEntityTag() !== $existsSyncEvent->getEntityTag())
	{
		return true;
	}

	if ($syncEvent->isRecurrence())
	{
		if ($syncEvent->getEntityTag() !== $existsSyncEvent->getEntityTag())
		{
			return true;
		}

		if ($syncEvent->hasInstances())
		{
			/** @var SyncEntitiesSyncEvent $instance */
			foreach ($syncEvent->getInstanceMap() as $key => $instance)
			{
				$existsInstanceMap = $existsSyncEvent->getInstanceMap();

				if (!$existsInstanceMap)
				{
					return true;
				}

				/** @var SyncEntitiesSyncEvent $existsInstance */
				$existsInstance = $existsInstanceMap->getItem($key);

				if (!$existsInstance)
				{
					return true;
				}

				if ($existsInstance->getEntityTag() !== $instance->getEntityTag())
				{
					return true;
				}
			}
		}
	}

	if ($syncEvent->isInstance())
	{
		return true;
	}

	return false;
}