• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
  • Класс: CCalendar
  • Вызов: CCalendar::SyncCalendarItems
static function SyncCalendarItems($connectionType, $calendarId, $arCalendarItems): array
{
	$arResult = [];
	self::$silentErrorMode = true;

	[$sectionId, $entityType, $entityId] = $calendarId;
	$entityType = mb_strtolower($entityType);

	if ($connectionType === BitrixCalendarSyncCaldavHelper::EXCHANGE_TYPE)
	{
		$xmlIdField = 'DAV_EXCH_LABEL';
	}
	elseif ($connectionType === BitrixCalendarSyncCaldavHelper::CALDAV_TYPE)
	{
		$xmlIdField = 'CAL_DAV_LABEL';
	}
	else
	{
		return [];
	}

	$eventsList = CCalendarEvent::GetList([
		'arSelect' => [
			'ID',
			'PARENT_ID',
			'RECURRENCE_ID',
			'DATE_TO',
			'DATE_FROM',
			'TZ_FROM',
			'DATE_TO_TS_UTC',
			'DATE_FROM_TS_UTC',
			'DAV_XML_ID',
			'DAV_EXCH_LABEL',
			'CAL_DAV_LABEL'
		],
		'arFilter' => [
			'CAL_TYPE' => $entityType,
			'OWNER_ID' => $entityId,
			'SECTION' => $sectionId,
		],
		'getUserfields' => false,
		'parseRecursion' => false,
		'fetchAttendees' => false,
		'fetchMeetings' => false,
		'userId' => $entityType === 'user' ? $entityId : 0,
	]);

	foreach ($eventsList as $event)
	{
            $eventXmlId = $event['DAV_XML_ID'];
		if ($event['RECURRENCE_ID'] && $instanceChangeKey = self::FindSyncInstance($event))
		{
			$arCalendarItems[$eventXmlId] = $instanceChangeKey;
		}

		if (isset($arCalendarItems[$eventXmlId]))
		{
			if ($event[$xmlIdField] !== $arCalendarItems[$eventXmlId])
			{
				$arResult[] = [
					'XML_ID' => $eventXmlId,
					'ID' => $event['ID'],
				];
			}

			unset($arCalendarItems[$eventXmlId]);
		}
		elseif ($connectionType === BitrixCalendarSyncCaldavHelper::EXCHANGE_TYPE)
		{
			if ((int)$event['ID'] === (int)$event['PARENT_ID'])
			{
				self::DeleteCalendarEvent($event["ID"], self::$userId);
			}
		}
		else
		{
			self::DeleteCalendarEvent($event["ID"], self::$userId);
		}
	}

	foreach ($arCalendarItems as $key => $value)
	{
		$arResult[] = [
			'XML_ID' => $key,
			'ID' => 0,
		];
	}

	self::$silentErrorMode = false;

	return $arResult;
}