• Модуль: im
  • Путь к файлу: ~/bitrix/modules/im/lib/V2/Chat/ChatFactory.php
  • Класс: BitrixImV2ChatChatFactory
  • Вызов: ChatFactory::findChat
public function findChat(array $params): Result
{
	$result = new Result;

	if (isset($params['TYPE']))
	{
		$params['MESSAGE_TYPE'] = $params['TYPE'];
	}

	if (empty($params['CHAT_ID']) && !empty($params['DIALOG_ID']))
	{
		if (BitrixImCommon::isChatId($params['DIALOG_ID']))
		{
			$params['CHAT_ID'] = BitrixImDialog::getChatId($params['DIALOG_ID']);
			if (!isset($params['MESSAGE_TYPE']))
			{
				$params['MESSAGE_TYPE'] = Chat::IM_TYPE_CHAT;
			}
		}
		else
		{
			$params['TO_USER_ID'] = (int)$params['DIALOG_ID'];
			$params['MESSAGE_TYPE'] = Chat::IM_TYPE_PRIVATE;
		}
	}

	if (!empty($params['CHAT_ID']) && (int)$params['CHAT_ID'] > 0)
	{
		$chatId = (int)$params['CHAT_ID'];
		$cache = $this->getCache($chatId);
		$cachedChat = $cache->getVars();

		if ($cachedChat !== false)
		{
			return $result->setResult($cachedChat);
		}

		$chat = BitrixImModelChatTable::getByPrimary((int)$params['CHAT_ID'])->fetch();

		if ($chat)
		{
			$cache->startDataCache();
			$cache->endDataCache($chat);
		}
		else
		{
			$chat = null;
		}

		return $result->setResult($chat);
	}

	switch ($params['MESSAGE_TYPE'] ?? '')
	{
		case Chat::IM_TYPE_SYSTEM:
			$result = NotifyChat::find($params, $this->context);
			break;

		case Chat::IM_TYPE_PRIVATE:
			if (
				isset($params['TO_USER_ID'], $params['FROM_USER_ID'])
				&& $params['TO_USER_ID'] == $params['FROM_USER_ID']
			)
			{
				$result = FavoriteChat::find($params, $this->context);
			}
			else
			{
				$result = PrivateChat::find($params, $this->context);
			}
			break;

		case Chat::IM_TYPE_CHAT:
		case Chat::IM_TYPE_OPEN:
			if (
				isset($params['ENTITY_TYPE'])
				&& $params['ENTITY_TYPE'] == Chat::ENTITY_TYPE_GENERAL
			)
			{
				$result = GeneralChat::find($params);
				break;
			}
		case Chat::IM_TYPE_OPEN_LINE:
			$result = Chat::find($params, $this->context);
			break;

		default:
			return $result->addError(new ChatError(ChatError::WRONG_TYPE));
	}

	return $result;
}