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