• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/saveorderaction.php
  • Класс: BitrixSaleControllerActionEntitySaveOrderAction
  • Вызов: SaveOrderAction::generateUserData
private function generateUserData(array $userProps = []): array
{
	$userEmail = isset($userProps['EMAIL']) ? trim((string)$userProps['EMAIL']) : '';
	$newLogin = $userEmail;

	if (empty($userEmail))
	{
		$newEmail = false;

		$normalizedPhone = NormalizePhone($userProps['PHONE']);
		if (!empty($normalizedPhone))
		{
			$newLogin = $normalizedPhone;
		}
	}
	else
	{
		$newEmail = $userEmail;
	}

	if (empty($newLogin))
	{
		$newLogin = MainSecurityRandom::getString(5).random_int(0, 99999);
	}

	$pos = mb_strpos($newLogin, '@');
	if ($pos !== false)
	{
		$newLogin = mb_substr($newLogin, 0, $pos);
	}

	if (mb_strlen($newLogin) > 47)
	{
		$newLogin = mb_substr($newLogin, 0, 47);
	}

	$newLogin = str_pad($newLogin, 3, '_');

	$dbUserLogin = CUser::GetByLogin($newLogin);
	if ($userLoginResult = $dbUserLogin->Fetch())
	{
		do
		{
			$newLoginTmp = $newLogin.random_int(0, 99999);
			$dbUserLogin = CUser::GetByLogin($newLoginTmp);
		}
		while ($userLoginResult = $dbUserLogin->Fetch());

		$newLogin = $newLoginTmp;
	}

	$newName = '';
	$newLastName = '';

	$payerName = isset($userProps['PAYER']) ? trim((string)$userProps['PAYER']) : '';
	if (!empty($payerName))
	{
		$payerName = preg_replace('/s{2,}/', ' ', $payerName);
		$nameParts = explode(' ', $payerName);
		if (isset($nameParts[1]))
		{
			$newName = $nameParts[1];
			$newLastName = $nameParts[0];
		}
		else
		{
			$newName = $nameParts[0];
		}
	}

	$groupIds = [];

	$defaultGroups = MainConfigOption::get('main', 'new_user_registration_def_group', '');
	if (!empty($defaultGroups))
	{
		$groupIds = explode(',', $defaultGroups);
	}

	$newPassword = CUser::GeneratePasswordByPolicy($groupIds);

	return [
		'NEW_EMAIL' => $newEmail,
		'NEW_LOGIN' => $newLogin,
		'NEW_NAME' => $newName,
		'NEW_LAST_NAME' => $newLastName,
		'NEW_PASSWORD' => $newPassword,
		'NEW_PASSWORD_CONFIRM' => $newPassword,
		'GROUP_ID' => $groupIds,
	];
}