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