• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/lib/sync/managers/datasyncmanager.php
  • Класс: BitrixCalendarSyncManagersDataSyncManager
  • Вызов: DataSyncManager::getEventsToSync
private function getEventsToSync(
	Connection $connection,
	CDavGroupdavClientCalendar $client,
	array $calendar,
	?RequestLogger $logger = null
): array
{
	$calendarEvents = [];
	$syncToken = !$calendar['IS_NEW'] ? $calendar['SYNC_TOKEN'] : null;

	$calendarItems = $client->GetCalendarItemsBySyncToken($calendar['XML_ID'], $syncToken, $logger);

	if (!$calendarItems || !is_array($calendarItems))
	{
		return $calendarEvents;
	}

	foreach ($calendarItems as $item)
	{
		if (
			(int)$item['status'] === 404
			|| mb_strpos($item['getcontenttype'], 'text/calendar') !== false
		)
		{
			$calendarEvents[] = [
				'XML_ID' => $client::getBasenameWithoutExtension($item['href']),
				'SYNC_TOKEN' => $item['getetag'] ?? null,
				'STATUS' => $item['status'],
			];
		}
	}

	$calendarEvents = $this->syncCalendarEvents(
		$connection,
		$calendar['SECTION_ID'],
		$calendarEvents
	);

	$eventsToUpdate = [];
	$eventsMap = [];
	foreach ($calendarEvents as $event)
	{
		$link = $client->GetRequestEventPath($calendar['XML_ID'], $event['XML_ID']);
		$eventsToUpdate[] = $link;
		$eventsMap[$link] = $event;
	}

	$calendarItems = [];
	if ($eventsToUpdate)
	{
		$calendarItems = $client->GetCalendarItemsList(
			$calendar['XML_ID'],
			$eventsToUpdate,
			true,
			1,
			[],
			$logger
		);
	}

	if (!$syncToken && $calendarItems)
	{
		$calendarItems = $this->applyTimeLimitForEvents($calendarItems);
	}

	return [$calendarItems, $eventsMap];
}