- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/classes/general/im_chat.php
- Класс: CIMChat
- Вызов: CIMChat::GetRelationById
static function GetRelationById($ID, $userId = false, $timezone = true, $withCounter = true)
{
global $DB;
$ID = intval($ID);
$userId = intval($userId);
$arResult = Array();
if (!$timezone)
{
CTimeZone::Disable();
}
$strSql = "
SELECT
R.*,
U.EXTERNAL_AUTH_ID
FROM b_im_relation R
LEFT JOIN b_user U ON U.ID = R.USER_ID
WHERE R.CHAT_ID = ".$ID." ".($userId>0? "AND R.USER_ID = ".$userId: "");
if (!$timezone)
{
CTimeZone::Enable();
}
$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."
Line: ".__LINE__);
while ($arRes = $dbRes->Fetch())
$arResult[$arRes['USER_ID']] = $arRes;
if ($userId > 0)
$arResult = isset($arResult[$userId])? $arResult[$userId]: false;
if ($arResult === false)
{
return $arResult;
}
// region New counter
if ($withCounter)
{
$readService = new IMV2MessageReadService($userId);
if ($userId > 0)
{
$arResult['COUNTER'] = $readService->getCounterService()->getByChat($ID);
$lastRead = $readService->getViewedService()->getDateViewedByMessageId($arResult['LAST_ID']);
$arResult['LAST_READ'] = isset($lastRead) ? $lastRead->getTimestamp() : null;
}
else
{
$userIds = array_keys($arResult);
$counters = $readService->getCounterService()->getByChatForEachUsers($ID, $userIds);
$lastIdInChat = $readService->getViewedService()->getLastMessageIdInChat($ID) ?? 0;
$lastReads = $readService->getViewedService()->getDateViewedByMessageIdForEachUser($lastIdInChat, $userIds);
foreach ($arResult as $id => $user)
{
$arResult[$id]['COUNTER'] = $counters[$id] ?? 0;
$arResult[$id]['LAST_READ'] = isset($lastReads[$id]) ? $lastReads[$id]->getTimestamp() : null;
}
}
}
// endregion
return $arResult;
}