• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/factories/synceventfactory.php
  • Класс: BitrixCalendarSyncFactoriesSyncEventFactory
  • Вызов: SyncEventFactory::getSyncEventCollectionByVendorIdList
public function getSyncEventCollectionByVendorIdList(
	array $vendorEventIdList,
	int $connectionId
): SyncEntitiesSyncEventMap
{
	$syncEventMap = new SyncEntitiesSyncEventMap();
	if (!$vendorEventIdList)
	{
		return $syncEventMap;
	}

	$filter = [
		[
			'logic' => 'or',
			['VENDOR_EVENT_ID', 'in', $vendorEventIdList],
			['RECURRENCE_ID', 'in', $vendorEventIdList],
		],
		['CONNECTION_ID', '=', $connectionId],
	];
	$query = ConditionTree::createFromArray($filter);
	// $params = ['filter' => $query];
	$eventConnectionMap = $this->eventConnectionMapper->getMap($query);

	$impatientExportSyncEventList = [];

	/** @var SyncConnectionEventConnection $eventConnection */
	foreach ($eventConnectionMap as $eventConnection)
	{
		$syncEvent = new SyncEvent();
		$syncEvent
			->setEventConnection($eventConnection)
			->setEvent($eventConnection->getEvent())
			->setAction($eventConnection->getLastSyncStatus())
		;

		if ($syncEvent->isInstance())
		{
			/** @var SyncEvent $masterSyncEvent */
			if ($masterSyncEvent = $syncEventMap->getItem($syncEvent->getVendorRecurrenceId()))
			{
				$masterSyncEvent->addInstance($syncEvent);
				continue;
			}

			$impatientExportSyncEventList[$syncEvent->getVendorRecurrenceId()][$eventConnection->getVendorEventId()] = $syncEvent;
			continue;
		}

		if (
			$syncEvent->isRecurrence()
			&& $instanceList = ($impatientExportSyncEventList[$syncEvent->getVendorEventId()] ?? null)
		)
		{
			$syncEvent->addInstanceList($instanceList);
		}

		$syncEventMap->add(
			$syncEvent,
			$eventConnection->getVendorEventId()
		);
	}

	if ($impatientExportSyncEventList)
	{
		foreach ($impatientExportSyncEventList as $syncEventList)
		{
			$syncEventMap->addItems($syncEventList);
		}
	}

	return $syncEventMap;
}