• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
  • Класс: CCalendarEvent
  • Вызов: CCalendarEvent::ExcludeInstance
static function ExcludeInstance($eventId, $excludeDate)
{
	global $CACHE_MANAGER;
	$eventId = (int)$eventId;
	$excludeDateTs = CCalendar::Timestamp($excludeDate);
	$excludeDate = CCalendar::Date($excludeDateTs, false);

	$event = self::GetList(
		array(
			'arFilter' => array(
				"ID" => $eventId,
				"DELETED" => "N"
			),
			'parseRecursion' => false,
			'fetchAttendees' => true,
			'setDefaultLimit' => false
		)
	);
	if ($event && is_array($event[0]))
	{
		$event = $event[0];
	}

	if ($event && self::CheckRecurcion($event) && $excludeDate)
	{
		$excludeDates = self::GetExDate($event['EXDATE']);
		$excludeDates[] = $excludeDate;

		$id = CCalendar::SaveEvent(array(
			'arFields' => array(
				'ID' => $event['ID'],
				'DATE_FROM' => $event['DATE_FROM'],
				'DATE_TO' => $event['DATE_TO'],
				'EXDATE' => self::SetExDate($excludeDates)
			),
			'silentErrorMode' => false,
			'recursionEditMode' => 'skip',
			'editParentEvents' => true,
		));

		if (!empty($event['ATTENDEE_LIST']) && is_array($event['ATTENDEE_LIST']))
		{
			foreach($event['ATTENDEE_LIST'] as $attendee)
			{
				if ($attendee['status'] === 'Y')
				{
					if ($event['DT_SKIP_TIME'] !== 'Y')
					{
						$excludeDate = CCalendar::Date(CCalendar::DateWithNewTime(CCalendar::Timestamp($event['DATE_FROM']), $excludeDateTs));
					}

					$CACHE_MANAGER->ClearByTag('calendar_user_'.$attendee["id"]);
					CCalendarNotify::Send(array(
						"mode" => 'cancel_this',
						"name" => $event['NAME'],
						"from" => $excludeDate,
						"guestId" => $attendee["id"],
						"eventId" => $event['PARENT_ID'],
						"userId" => $event['MEETING']['MEETING_CREATOR'] ?? $event['MEETING_HOST'],
						"fields" => $event
					));
				}
			}
		}
	}
}