- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar.php
- Класс: CCalendar
- Вызов: CCalendar::DeleteEvent
static function DeleteEvent($id, $doExternalSync = true, $params = [])
{
global $CACHE_MANAGER;
$id = (int)$id;
$markDeleted = $params['markDeleted'] ?? true;
$originalFrom = $params['originalFrom'] ?? null;
if (!$id)
{
return false;
}
$checkPermissions = $params['checkPermissions'] ?? true;
if (!isset(self::$userId))
{
self::$userId = self::GetCurUserId();
}
self::SetOffset();
$res = CCalendarEvent::GetList([
'arFilter' => ["ID" => $id],
'parseRecursion' => false,
'setDefaultLimit' => false,
'fetchAttendees' => true,
'checkPermissions' => $checkPermissions,
]);
if (!empty($res[0]) && $event = $res[0])
{
if (!isset(self::$type))
{
self::$type = $event['CAL_TYPE'];
}
if (!isset(self::$ownerId))
{
self::$ownerId = $event['OWNER_ID'];
}
$accessController = new EventAccessController(self::$userId);
$eventModel = CCalendarEvent::getEventModelForPermissionCheck((int)$event['ID'], $event);
if ($checkPermissions && !$accessController->check(ActionDictionary::ACTION_EVENT_EDIT, $eventModel))
{
return Loc::getMessage('EC_ACCESS_DENIED');
}
CCalendarSect::UpdateModificationLabel($event['SECT_ID']);
if ($doExternalSync !== false && $event['SECT_ID'])
{
$bGoogleApi = self::isGoogleApiEnabled() && $event['CAL_TYPE'] === 'user';
$bCalDav = self::IsCalDAVEnabled() && $event['CAL_TYPE'] === 'user';
$bExchangeEnabled = self::IsExchangeEnabled() && $event['CAL_TYPE'] === 'user';
if ($bExchangeEnabled || $bCalDav || $bGoogleApi)
{
$res = CCalendarSync::DoDeleteToDav([
'bCalDav' => $bCalDav,
'bExchangeEnabled' => $bExchangeEnabled,
'sectionId' => $event['SECT_ID'],
], $event);
if ($res !== true && self::$silentErrorMode)
{
self::ThrowError($res);
}
}
}
$sendNotification = $params['sendNotification'] ?? (($params['recursionMode'] ?? null) !== 'all');
$res = CCalendarEvent::Delete([
'id' => $id,
'Event' => $event,
'bMarkDeleted' => $markDeleted,
'originalFrom' => $originalFrom,
'userId' => self::$userId,
'sendNotification' => $sendNotification,
'requestUid' => $params['requestUid'] ?? null,
]);
if (($params['recursionMode'] ?? null) !== 'this' && !empty($event['RECURRENCE_ID']))
{
self::DeleteEvent($event['RECURRENCE_ID'], $doExternalSync, [
'sendNotification' => $sendNotification,
'originalFrom' => $originalFrom,
]);
}
if (CCalendarEvent::CheckRecurcion($event))
{
$events = CCalendarEvent::GetEventsByRecId($id);
foreach($events as $ev)
{
self::DeleteEvent($ev['ID'], $doExternalSync, [
'sendNotification' => $sendNotification,
'originalFrom' => $originalFrom,
]);
}
}
if (isset($params['recursionMode']) && $params['recursionMode'] === 'all' && !empty($event['ATTENDEE_LIST']))
{
foreach($event['ATTENDEE_LIST'] as $attendee)
{
if ($attendee['status'] !== 'N')
{
$CACHE_MANAGER->ClearByTag('calendar_user_'.$attendee["id"]);
CCalendarNotify::Send([
"mode" => 'cancel_all',
"name" => $event['NAME'],
"from" => $event['DATE_FROM'],
"guestId" => $attendee["id"],
"eventId" => $event['PARENT_ID'],
"userId" => $event['MEETING_HOST'],
"fields" => $event,
]);
}
}
}
return $res;
}
return false;
}