- Модуль: 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;
}