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

	$params['ENTITY_TYPE'] = $params['ENTITY_TYPE'] ?? '';

	$params['TYPE'] = $params['TYPE'] ?? Chat::IM_TYPE_CHAT;

	// Temporary workaround for Open chat type
	if ($params['SEARCHABLE'] === 'Y' && $params['TYPE'] === Chat::IM_TYPE_CHAT)
	{
		$params['TYPE'] = Chat::IM_TYPE_OPEN;
	}
	else
	{
		$params['SEARCHABLE'] = 'N';
	}

	switch ($params['ENTITY_TYPE'])
	{
		case Chat::ENTITY_TYPE_FAVORITE:
			$addResult = (new FavoriteChat)->add($params);
			break;
		case Chat::ENTITY_TYPE_VIDEOCONF:
			$addResult = (new VideoConfChat)->add($params);
			break;
		case Chat::ENTITY_TYPE_GENERAL:
			$addResult = (new GeneralChat())->add($params);
			break;
		case Chat::ENTITY_TYPE_LIVECHAT:
			$addResult = (new OpenLineLiveChat())->add($params);
			break;
		default:
			switch ($params['TYPE'])
			{
				case Chat::IM_TYPE_CHAT:
					if ($params['ENTITY_TYPE'])
					{
						$addResult = (new EntityChat())->add($params);
						break;
					}
					$addResult = (new GroupChat())->add($params);
					break;
				case Chat::IM_TYPE_OPEN:
					$addResult = (new OpenChat())->add($params);
					break;
				case Chat::IM_TYPE_CHANNEL:
					$addResult = (new ChannelChat())->add($params);
					break;
				case Chat::IM_TYPE_PRIVATE:
					$addResult = (new PrivateChat)->add($params);
					break;
				case Chat::IM_TYPE_SYSTEM:
					$addResult = (new NotifyChat)->add($params);
					break;
				case Chat::IM_TYPE_COMMENT:
					$addResult = (new CommentChat())->add($params);
					break;
				case Chat::IM_TYPE_OPEN_LINE:
					$addResult = (new OpenLineChat())->add($params);
					break;
				default:
					$addResult->addError(new ChatError(ChatError::CREATION_ERROR));
			}
	}

	return $addResult;
}