- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_sync.php
- Класс: CCalendarSync
- Вызов: CCalendarSync::syncCalendarSections
static function syncCalendarSections($connectionType, $arCalendars, $entityType, $entityId, $connectionId = null): array
{
//Array(
// [0] => Array(
// [XML_ID] => calendar
// [NAME] => calendar
// )
// [1] => Array(
// [XML_ID] => AQATAGFud...
// [NAME] => geewgvwe 1
// [DESCRIPTION] => gewgvewgvw
// [COLOR] => #FF0000
// [MODIFICATION_LABEL] => af720e7c7b6a
// )
//)
$result = [];
if (
$connectionType === BitrixCalendarSyncCaldavHelper::EXCHANGE_TYPE
|| $connectionType === BitrixCalendarSyncCaldavHelper::CALDAV_TYPE
)
{
CCalendar::SetSilentErrorMode();
$entityType = mb_strtolower($entityType);
$entityId = (int)$entityId;
$tempUser = CCalendar::TempUser(false, true);
$calendarNames = [];
foreach ($arCalendars as $value)
{
$calendarNames[$value["XML_ID"]] = $value;
}
if ($connectionType === BitrixCalendarSyncCaldavHelper::CALDAV_TYPE)
{
$arFilter = [
'CAL_TYPE' => $entityType,
'OWNER_ID' => $entityId,
'!CAL_DAV_CAL' => false,
'CAL_DAV_CON' => $connectionId
];
$xmlIdField = "CAL_DAV_CAL";
$xmlIdModLabel = "CAL_DAV_MOD";
}
else // Exchange
{
$arFilter = [
'CAL_TYPE' => $entityType,
'OWNER_ID' => $entityId,
'!DAV_EXCH_CAL' => false,
'IS_EXCHANGE' => 1
];
$xmlIdField = "DAV_EXCH_CAL";
$xmlIdModLabel = "DAV_EXCH_MOD";
}
$res = CCalendarSect::GetList([
'arFilter' => $arFilter,
'checkPermissions' => false,
'getPermissions' => false
]);
foreach($res as $section)
{
$xmlId = $section[$xmlIdField];
$modificationLabel = $section[$xmlIdModLabel];
if (
empty($xmlId)
|| ($connectionType === BitrixCalendarSyncCaldavHelper::CALDAV_TYPE && $section['DAV_EXCH_CAL'])
)
{
continue;
}
if (!array_key_exists($xmlId, $calendarNames))
{
CCalendarSect::Delete($section["ID"]);
}
else
{
if ($modificationLabel !== $calendarNames[$xmlId]["MODIFICATION_LABEL"])
{
CCalendarSect::Edit([
'arFields' => [
"ID" => $section["ID"],
"NAME" => $calendarNames[$xmlId]["NAME"],
"OWNER_ID" => $entityType === 'user' ? $entityId : 0,
"CREATED_BY" => $entityType === 'user' ? $entityId : 0,
"DESCRIPTION" => $calendarNames[$xmlId]["DESCRIPTION"],
"COLOR" => $calendarNames[$xmlId]["COLOR"],
$xmlIdModLabel => $calendarNames[$xmlId]["MODIFICATION_LABEL"],
]
]);
}
if (empty($modificationLabel) || ($modificationLabel !== $calendarNames[$xmlId]["MODIFICATION_LABEL"]))
{
$result[] = [
"XML_ID" => $xmlId,
"CALENDAR_ID" => [$section["ID"], $entityType, $entityId]
];
}
unset($calendarNames[$xmlId]);
}
}
foreach($calendarNames as $key => $value)
{
$arFields = [
'CAL_TYPE' => $entityType,
'OWNER_ID' => $entityId,
'NAME' => $value["NAME"],
'DESCRIPTION' => $value["DESCRIPTION"] ?? null,
'COLOR' => $value["COLOR"] ?? null,
'EXPORT' => ['ALLOW' => false],
'CREATED_BY' => $entityType === 'user' ? $entityId : 0,
'ACCESS' => [],
'EXTERNAL_TYPE' => $connectionType,
$xmlIdField => $key,
$xmlIdModLabel => $value["MODIFICATION_LABEL"] ?? null
];
if ($connectionType === BitrixCalendarSyncCaldavHelper::CALDAV_TYPE)
{
$arFields["CAL_DAV_CON"] = $connectionId;
}
if ($entityType === 'user')
{
$arFields["CREATED_BY"] = $entityId;
}
if ($connectionType === BitrixCalendarSyncCaldavHelper::EXCHANGE_TYPE)
{
$arFields["IS_EXCHANGE"] = 1;
}
$id = (int)CCalendar::SaveSection(['arFields' => $arFields, 'bAffectToDav' => false]);
if ($id)
{
$result[] =
[
"XML_ID" => $key,
"CALENDAR_ID" => [
$id,
$entityType,
$entityId
]
];
}
}
CCalendar::TempUser($tempUser, false);
CCalendar::SetSilentErrorMode(false);
}
return $result;
}