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