- Модуль: im
- Путь к файлу: ~/bitrix/modules/im/lib/call/user.php
- Класс: BitrixImCallUser
- Вызов: User::register
static function register($userFields = [])
{
self::clearError();
if (isset($userFields['USER_HASH']) &&
trim($userFields['USER_HASH']) &&
preg_match("/^[a-fA-F0-9]{32}$/i", $userFields['USER_HASH']))
{
$userCode = $userFields['USER_HASH'];
$userData = BitrixMainUserTable::getList(
[
'select' => ['ID', 'EXTERNAL_AUTH_ID'],
'filter' => ['=XML_ID' => 'call|'.$userCode]
]
)->fetch();
if ($userData && $userData['EXTERNAL_AUTH_ID'] == self::EXTERNAL_AUTH_ID)
{
return [
'ID' => $userData['ID'],
'HASH' => $userCode,
'CREATED' => false
];
}
}
else
{
$userCode = self::getUserCode();
}
$fields = [];
$fields['NAME'] = isset($userFields['NAME']) && trim($userFields['NAME']) ? $userFields['NAME'] : Loc::getMessage('IM_CALL_USER_DEFAULT_NAME');
$fields['LAST_NAME'] = isset($userFields['LAST_NAME']) ? trim($userFields['LAST_NAME']) : '';
if (isset($userFields['AVATAR']) && trim($userFields['AVATAR']))
{
$userFields['AVATAR'] = self::getPersonalPhoto($userFields['AVATAR']);
if ($userFields['AVATAR'])
{
$fields['PERSONAL_PHOTO'] = $userFields['AVATAR'];
}
}
if (isset($userFields['EMAIL']) && trim($userFields['EMAIL']))
{
$fields['EMAIL'] = trim($userFields['EMAIL']);
}
if (isset($userFields['PERSONAL_WWW']) && trim($userFields['PERSONAL_WWW']))
{
$fields['PERSONAL_WWW'] = trim($userFields['PERSONAL_WWW']);
}
if (isset($userFields['PERSONAL_GENDER']) && trim($userFields['PERSONAL_GENDER']))
{
$fields['PERSONAL_GENDER'] = $userFields['PERSONAL_GENDER'] == 'F' ? 'F' : 'M';
}
if (isset($userFields['WORK_POSITION']) && trim($userFields['WORK_POSITION']))
{
$fields['WORK_POSITION'] = trim($userFields['WORK_POSITION']);
}
$fields['LOGIN'] = self::MODULE_ID.'_call_'.rand(1000, 9999).randString(5);
$fields['PASSWORD'] = md5($fields['LOGIN'].'|'.rand(1000, 9999).'|'.time());
$fields['CONFIRM_PASSWORD'] = $fields['PASSWORD'];
$fields['EXTERNAL_AUTH_ID'] = self::EXTERNAL_AUTH_ID;
$fields['XML_ID'] = 'call|'.$userCode;
$fields['ACTIVE'] = 'Y';
$userManager = new CUser;
$userId = $userManager->Add($fields);
if (!$userId)
{
$errorCode = '';
$errorMessage = '';
global $APPLICATION;
if ($exception = $APPLICATION->GetException())
{
$errorCode = $exception->GetID();
$errorMessage = $exception->GetString();
}
self::setError(
__METHOD__,
'USER_REGISTER_ERROR',
Loc::getMessage('IM_CALL_USER_ERROR_CREATE'),
['CODE' => $errorCode, 'MSG' => $errorMessage]
);
return false;
}
return [
'ID' => $userId,
'HASH' => $userCode,
'CREATED' => true
];
}