• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/widget/dialog.php
  • Класс: BitrixImopenlinesWidgetDialog
  • Вызов: Dialog::register
static function register($userId, $configId)
{
	global $USER, $APPLICATION;

	self::clearError();

	if (!BitrixMainLoader::includeModule('im'))
	{
		self::setError(__METHOD__, 'IM_NOT_FOUND', Loc::getMessage('IMOL_WIDGET_CONFIG_IM_NOT_FOUND'));
		return false;
	}

	$chat = BitrixImModelChatTable::getList([
		'select' => ['ID', 'ENTITY_DATA_1', 'ENTITY_DATA_2', 'ENTITY_DATA_3'],
		'filter' => [
			'=ENTITY_TYPE' => 'LIVECHAT',
			'=ENTITY_ID' => $configId.'|'.$userId
		],
		'limit' => 1
	])->fetch();
	if ($chat)
	{
		return [
			'CHAT_ID' => $chat['ID']
		];
	}

	if ($userId == $USER->GetID())
	{
		$avatarId = $USER->GetParam('PERSONAL_PHOTO');
	}
	else
	{
		$user = BitrixMainUserTable::getById($userId)->fetch();
		if ($user)
		{
			$avatarId = $user['PERSONAL_PHOTO'];
		}
		else
		{
			self::setError(__METHOD__, 'USER_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_USER_NOT_FOUND'));
			return false;
		}
	}

	$config = BitrixImopenlinesModelConfigTable::getById($configId)->fetch();
	if (!$config)
	{
		self::setError(__METHOD__, 'CONFIG_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_CONFIG_NOT_FOUND'));
		return false;
	}

	$userName = BitrixImUser::getInstance($userId)->getFullName(false);
	$chatColorCode = BitrixImColor::getCodeByNumber($userId);
	if (BitrixImUser::getInstance($userId)->getGender() == 'M')
	{
		$replaceColor = BitrixImColor::getReplaceColors();
		if (isset($replaceColor[$chatColorCode]))
		{
			$chatColorCode = $replaceColor[$chatColorCode];
		}
	}

	$addChat['TITLE'] = Loc::getMessage('IMOL_WIDGET_CHAT_NAME', Array(
		"#USER_NAME#" => $userName,
		"#LINE_NAME#" => $config['LINE_NAME']
	));

	$addChat['TYPE'] = IM_MESSAGE_CHAT;
	$addChat['COLOR'] = $chatColorCode;
	$addChat['AVATAR_ID'] = $avatarId;
	$addChat['ENTITY_TYPE'] = 'LIVECHAT';
	$addChat['ENTITY_ID'] = $configId.'|'.$userId;
	$addChat['SKIP_ADD_MESSAGE'] = 'Y';
	$addChat['AUTHOR_ID'] = $userId;
	$addChat['USERS'] =[$userId];

	$chat = new CIMChat(0);
	$id = $chat->Add($addChat);
	if (!$id)
	{
		$errorCode = '';
		$errorMessage = '';

		if ($exception = $APPLICATION->GetException())
		{
			$errorCode = $exception->GetID();
			$errorMessage = $exception->GetString();
		}

		self::setError(__METHOD__, 'CHAT_ERROR', Loc::getMessage('IMOL_WIDGET_CHAT_ERROR_CREATE'), ['CODE' => $errorCode, 'MSG' => $errorMessage]);
		return false;
	}

	return [
		'CHAT_ID' => $id
	];
}