• Модуль: calendar
  • Путь к файлу: ~/bitrix/modules/calendar/classes/general/calendar_livefeed.php
  • Класс: CCalendarLiveFeed
  • Вызов: CCalendarLiveFeed::OnChangeMeetingStatusEventEntry
static function OnChangeMeetingStatusEventEntry($params): void
{
	$codesList = [];
	$unfolowersList = [];

	if (isset($params['event']))
	{
		if ($params['event']['IS_MEETING'])
		{
			if (
				isset($params['event']['MEETING_HOST'])
				&& (int)$params['event']['MEETING_HOST'] > 0
			)
			{
				$codesList[] = 'U' . (int)$params['event']['MEETING_HOST'];
			}

			if (isset($params['event']['ATTENDEE_LIST']) && is_array($params['event']['ATTENDEE_LIST']))
			{
				foreach ($params['event']['ATTENDEE_LIST'] as $attendee)
				{
					if (
						(
							(int)$attendee['id'] === (int)$params['userId']
							&& $params['status'] === 'N'
						)
						|| (
							(int)$attendee['id'] !== (int)$params['userId']
							&& $attendee['status'] === 'N'
						)
					)
					{
						$unfolowersList[] = (int)$attendee['id'];
					}
				}
			}
		}

		if (isset($params['event']['ATTENDEES_CODES']) && is_array($params['event']['ATTENDEES_CODES']))
		{
			foreach ($params['event']['ATTENDEES_CODES'] as $code)
			{
				if ($code === 'UA')
				{
					$codesList[] = 'G2';
				}
				else if (mb_strpos($code, 'U') === 0)
				{
					$attendeeId = (int)mb_substr($code, 1);
					if (!in_array($attendeeId, $unfolowersList, true))
					{
						$codesList[] = $code;
					}
				}
				else
				{
					if (mb_strpos($code, 'SG') === 0)
					{
						$codesList[] = $code . '_K';
					}
					$codesList[] = $code;
				}
			}
		}
	}

	if (
		($params['status'] === 'N' || $params['status'] === 'Y')
		&& (int)$params['userId']
	)
	{
		$dbRes = CSocNetLog::GetList(array("ID" => "DESC"), array("EVENT_ID" => "calendar", "SOURCE_ID" => $params['eventId']), false, false, array("ID"));

		while ($logEntry = $dbRes->Fetch())
		{
			CSocNetLogRights::DeleteByLogID($logEntry['ID']);
			foreach ($unfolowersList as $value)
			{
				CSocNetLogFollow::Set((int)$value, "L" . $logEntry['ID'], 'N');
			}
			CSocNetLogFollow::Set((int)$params['userId'], "L" . $logEntry['ID'], $params['status']);

			if (
				$params['status'] === 'Y'
				&& method_exists(ComponentHelper::class, 'userLogSubscribe')
			)
			{
				ComponentHelper::userLogSubscribe(array(
					'logId' => $logEntry['ID'],
					'userId' => (int)$params['userId'],
					'typeList' => [
						'COUNTER_COMMENT_PUSH',
					]
				));
			}

			if (!empty($codesList))
			{
				$codesList = array_unique($codesList);
				CSocNetLogRights::Add($logEntry['ID'], $codesList);
			}
		}
	}
}