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