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