- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/PrivateChat.php
- Класс: BitrixImV2ChatPrivateChat
- Вызов: PrivateChat::find
static function find(array $params, ?Context $context = null): Result
{
$result = new Result;
if (isset($params['CHAT_ID']))
{
$chatId = (int)$params['CHAT_ID'];
$relations = CIMChat::getRelationById($chatId, false, true, false);
$params['TO_USER_ID'] = (int)$params['FROM_USER_ID'];//check for self-personal chat
foreach ($relations as $rel)
{
if (
$params['TO_USER_ID']
&& $rel['USER_ID'] == $params['FROM_USER_ID']
)
{
continue;
}
$params['TO_USER_ID'] = (int)$rel['USER_ID'];
}
}
if (empty($params['FROM_USER_ID']))
{
$context = $context ?? Locator::getContext();
$params['FROM_USER_ID'] = $context->getUserId();
}
$params['FROM_USER_ID'] = (int)$params['FROM_USER_ID'];
$params['TO_USER_ID'] = (int)$params['TO_USER_ID'];
if ($params['FROM_USER_ID'] <= 0)
{
return $result->addError(new ChatError(ChatError::WRONG_SENDER));
}
if ($params['TO_USER_ID'] <= 0)
{
return $result->addError(new ChatError(ChatError::WRONG_RECIPIENT));
}
$connection = BitrixMainApplication::getConnection();
$res = $connection->query("
SELECT
C.*
FROM
b_im_chat C,
b_im_relation RF,
b_im_relation RT
WHERE
C.ID = RT.CHAT_ID
AND RF.CHAT_ID = RT.CHAT_ID
AND C.TYPE = '" . self::IM_TYPE_PRIVATE . "'
AND RF.USER_ID = " . $params['FROM_USER_ID'] . "
AND RT.USER_ID = " . $params['TO_USER_ID'] . "
AND RF.MESSAGE_TYPE = '" . self::IM_TYPE_PRIVATE . "'
AND RT.MESSAGE_TYPE = '" . self::IM_TYPE_PRIVATE . "'
");
if ($row = $res->fetch())
{
$result->setResult([
'ID' => (int)$row['ID'],
'TYPE' => $row['TYPE'],
'ENTITY_TYPE' => $row['ENTITY_TYPE'],
'ENTITY_ID' => $row['ENTITY_ID'],
]);
}
return $result;
}