- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_event.php
- Класс: CCalendarEvent
- Вызов: CCalendarEvent::SetMeetingStatusEx
static function SetMeetingStatusEx($params)
{
$reccurentMode = isset($params['reccurentMode'])
&& in_array($params['reccurentMode'], ['this', 'next', 'all'])
? $params['reccurentMode']
: false;
$currentDateFrom = CCalendar::Date(CCalendar::Timestamp($params['currentDateFrom']), false);
if ($reccurentMode && $currentDateFrom)
{
$event = self::GetById($params['parentId'], false);
$recurrenceId = $event['RECURRENCE_ID'] ?? $event['ID'];
if ($reccurentMode !== 'all')
{
$res = CCalendar::SaveEventEx([
'arFields' => [
"ID" => $params['parentId']
],
'silentErrorMode' => false,
'recursionEditMode' => $reccurentMode,
'userId' => $event['MEETING_HOST'],
'checkPermission' => false,
'currentEventDateFrom' => $currentDateFrom,
'sendEditNotification' => false,
'editMeetingStatus' => $params,
]);
if (
$res
&& isset($res['recEventId'])
&& $res['recEventId']
)
{
self::SetMeetingStatus([
'userId' => $params['attendeeId'],
'eventId' => $res['recEventId'],
'status' => $params['status'],
'personalNotification' => true
]);
}
}
if ($reccurentMode === 'all' || $reccurentMode === 'next')
{
$recRelatedEvents = self::GetEventsByRecId($recurrenceId, false);
if ($reccurentMode === 'next')
{
$untilTimestamp = CCalendar::Timestamp($currentDateFrom);
}
else
{
$untilTimestamp = false;
self::SetMeetingStatus([
'userId' => $params['attendeeId'],
'eventId' => $params['eventId'],
'status' => $params['status'],
'personalNotification' => true
]);
}
foreach($recRelatedEvents as $ev)
{
if ($ev['ID'] == ($params['eventId'] ?? null))
{
continue;
}
if ($reccurentMode === 'all'
|| (
$untilTimestamp
&& CCalendar::Timestamp($ev['DATE_FROM']) > $untilTimestamp
)
)
{
self::SetMeetingStatus([
'userId' => $params['attendeeId'],
'eventId' => $ev['ID'],
'status' => $params['status']
]);
}
}
}
}
else
{
self::SetMeetingStatus([
'userId' => $params['attendeeId'] ?? null,
'eventId' => $params['eventId'] ?? null,
'status' => $params['status'] ?? null,
]);
}
}