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