• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat.php
  • Класс: BitrixImV2Chat
  • Вызов: Chat::getLastMessageViewsByGroups
public function getLastMessageViewsByGroups(): array
{
	$readService = $this->getReadService();

	$lastMessageInChat = $readService->getLastMessageIdInChat($this->chatId);

	if ($lastMessageInChat === 0)
	{
		return [];
	}

	$usersInChat = $this->getRelations()->getUserIds();
	$messageViewers = $readService->getViewedService()->getMessageViewersIds($lastMessageInChat);
	$unviewedMessageUsers = array_diff($usersInChat, $messageViewers);
	$countOfView = count($messageViewers);

	$firstViewers = [];

	foreach ($messageViewers as $messageViewer)
	{
		if (count($firstViewers) >= 2)
		{
			break;
		}

		$firstViewers[$messageViewer] = $messageViewer;
	}

	$datesOfViews = $readService->getViewedService()->getDateViewedByMessageIdForEachUser($lastMessageInChat, $firstViewers);

	$firstViewersWithDate = [];

	foreach ($firstViewers as $viewer)
	{
		$firstViewersWithDate[] = [
			'USER_ID' => $viewer,
			'USER_NAME' => ImV2EntityUserUser::getInstance($viewer)->getName(),
			'DATE' => $datesOfViews[$viewer] ?? null
		];
	}

	$viewsInfoByGroups = [];
	$countWithoutSelf = $countOfView - 1;

	if (!empty($messageViewers))
	{
		$viewsInfoByGroups[$countWithoutSelf] = [
			'USERS' => $messageViewers,
			'VIEW_INFO' => [
				'MESSAGE_ID' => $lastMessageInChat,
				'FIRST_VIEWERS' => $firstViewersWithDate,
				'COUNT_OF_VIEWERS' => $countOfView - 1,
			],
		];
	}
	if (!empty($unviewedMessageUsers))
	{
		$viewsInfoByGroups[$countOfView] = [
			'USERS' => $unviewedMessageUsers,
			'VIEW_INFO' => [
				'MESSAGE_ID' => $lastMessageInChat,
				'FIRST_VIEWERS' => $firstViewersWithDate,
				'COUNT_OF_VIEWERS' => $countOfView,
			],
		];
	}

	return $viewsInfoByGroups;
}