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