• Модуль: imopenlines
  • Путь к файлу: ~/bitrix/modules/imopenlines/lib/widget/user.php
  • Класс: BitrixImopenlinesWidgetUser
  • Вызов: User::register
static function register($userFields = [])
{
	self::clearError();

	$fields = [];

	$fields['NAME'] = isset($userFields['NAME']) && trim($userFields['NAME'])? $userFields['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']);
	}
	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' => 'livechat|'.$userCode]
		])->fetch();
		if ($userData && $userData['EXTERNAL_AUTH_ID'] == self::EXTERNAL_AUTH_ID)
		{
			return [
				'ID' => $userData['ID'],
				'HASH' => $userCode,
			];
		}
	}
	else
	{
		$userCode = self::getUserCode();
	}

	$fields['LOGIN'] = self::MODULE_ID . '_wgt_' . 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'] =  'livechat|'.$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('IMOL_WIDGET_USER_ERROR_CREATE'), ['CODE' => $errorCode, 'MSG' => $errorMessage]);
		return false;
	}

	return [
		'ID' => $userId,
		'HASH' => $userCode,
	];
}