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