- Модуль: calendar
- Путь к файлу: ~/bitrix/modules/calendar/lib/core/queue/processor/eventattendeesupdate.php
- Класс: BitrixCalendarCoreQueueProcessorEventAttendeesUpdate
- Вызов: EventAttendeesUpdate::process
public function process(InterfacesMessage $message): string
{
$data = $message->getBody();
if (empty($data['eventId']))
{
return self::REJECT;
}
$eventId = (int)$data['eventId'];
$eventArray = EventTable::getList([
'select' => ['*'],
'filter' => BitrixMainORMQueryQuery::filter()
->where('DELETED', 'N')
->where('ID', $eventId)
,
])->fetch();
if (!$eventArray)
{
return self::REJECT;
}
$event = (new EventBuilderFromArray($eventArray))->build();
$fields = [
'ID' => $event->getId(),
'ATTENDEES' => CCalendar::GetDestinationUsers($event->getAttendeesCollection()->getAttendeesCodes()),
'REMIND' => unserialize($eventArray['REMIND'], ['allowed_classes' => false]),
];
if (
$event->getCalendarType() === CoreEventToolsDictionary::CALENDAR_TYPE['group']
&& Loader::includeModule('socialnetwork')
)
{
$fields = $this->prepareGroupEventData($event, $fields);
}
if ($event->getRecurringRule())
{
$previousAttendees = $this->getEventPreviousAttendees($eventId);
$result = $this->saveRecurrentEvent($event, $fields, $eventArray);
}
else
{
$result = $this->saveNotRecurrentEvent($event, $fields);
}
if ($result && $this->wasEventOwnerUpdated($fields))
{
$newHostEventData = $this->getNewHostEventData($fields, $result);
}
if (
$result
&& Loader::includeModule('im')
&& $event->getMeetingDescription()
&& !empty($event->getMeetingDescription()->getFields()['CHAT_ID'])
)
{
$currentAttendees = $fields['ATTENDEES'];
$this->updateEventChat(
$event->getMeetingDescription()->getFields()['CHAT_ID'],
$fields['MEETING_HOST'] ?? null,
array_diff($previousAttendees ?? [], $currentAttendees),
);
}
if (!empty($newHostEventData))
{
$this->updateNewMeetingHostStatus($newHostEventData);
$this->updateCreatedByFieldInGroupEvent($result, $fields['MEETING_HOST']);
CCalendar::ClearCache();
}
return self::ACK;
}