• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/rest.php
  • Класс: BitrixImOpenLinesRest
  • Вызов: Rest::crmChatUserAdd
static function crmChatUserAdd($arParams, $n, CRestServer $server)
{
	if (empty($arParams['CRM_ENTITY_TYPE']) || empty($arParams['CRM_ENTITY']))
	{
		throw new RestException('Empty CRM data', 'CRM_CHAT_EMPTY_CRM_DATA', CRestServer::STATUS_WRONG_REQUEST);
	}

	if (!Loader::includeModule('im'))
	{
		throw new RestException('Messenger is not installed.', 'IM_NOT_INSTALLED', CRestServer::STATUS_WRONG_REQUEST);
	}

	$chatId = CrmCommon::getLastChatIdByCrmEntity($arParams['CRM_ENTITY_TYPE'], $arParams['CRM_ENTITY']);

	if ($chatId > 0)
	{
		$chat = ImModelChatTable::getByPrimary($chatId, ['select' => ['ENTITY_ID']])->fetch();
		$parsedUserCode = SessionCommon::parseUserCode($chat['ENTITY_ID']);
		$lineId = $parsedUserCode['CONFIG_ID'];

		if (!Config::canJoin($lineId, $arParams['CRM_ENTITY_TYPE'], $arParams['CRM_ENTITY']))
		{
			throw new RestException('You don't have access to join user to chat', 'CHAT_JOIN_PERMISSION_DENIED', CRestServer::STATUS_FORBIDDEN);
		}

		$arParams['USER_ID'] = (int)$arParams['USER_ID'];
		if ($arParams['USER_ID'] <= 0)
		{
			throw new RestException('Empty User ID', 'CRM_CHAT_EMPTY_USER', CRestServer::STATUS_WRONG_REQUEST);
		}

		$user = ImUser::getInstance($arParams['USER_ID']);

		if (!$user->isExists() || !$user->isActive())
		{
			throw new RestException('User not active', 'CRM_CHAT_USER_NOT_ACTIVE', CRestServer::STATUS_WRONG_REQUEST);
		}

		$CIMChat = new CIMChat(0);
		$result = $CIMChat->AddUser($chatId, $arParams['USER_ID']);

		if (!$result)
		{
			throw new RestException('You don't have access or user already member in chat', 'WRONG_REQUEST', CRestServer::STATUS_WRONG_REQUEST);
		}
	}

	return $chatId;
}