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