- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/saveorderaction.php
- Класс: BitrixSaleControllerActionEntitySaveOrderAction
- Вызов: SaveOrderAction::registerNewUser
private function registerNewUser(SaleOrder $order, array $userProps): SaleResult
{
$result = new SaleResult();
$siteId = $order->getSiteId();
$userData = $this->generateUserData($userProps);
$fields = [
'LOGIN' => $userData['NEW_LOGIN'],
'NAME' => $userData['NEW_NAME'],
'LAST_NAME' => $userData['NEW_LAST_NAME'],
'PASSWORD' => $userData['NEW_PASSWORD'],
'CONFIRM_PASSWORD' => $userData['NEW_PASSWORD_CONFIRM'],
'EMAIL' => $userData['NEW_EMAIL'],
'GROUP_ID' => $userData['GROUP_ID'],
'ACTIVE' => 'Y',
'LID' => $siteId,
'PERSONAL_PHONE' => isset($userProps['PHONE']) ? NormalizePhone($userProps['PHONE']) : '',
'PERSONAL_ZIP' => $userProps['ZIP'] ?? '',
'PERSONAL_STREET' => $userProps['ADDRESS'] ?? '',
];
$userPhoneAuth = MainConfigOption::get('main', 'new_user_phone_auth', 'N', $siteId) === 'Y';
if ($userPhoneAuth)
{
$normalizedPhoneForRegistration = '';
if (!empty($userProps['PHONE']))
{
$normalizedPhoneForRegistration = MainUserPhoneAuthTable::normalizePhoneNumber($userProps['PHONE']);
}
$fields['PHONE_NUMBER'] = $normalizedPhoneForRegistration;
}
if ($this->isLandingShop($order) && MainLoader::includeModule('crm'))
{
$fields['GROUP_ID'] = CrmOrderBuyerGroup::getDefaultGroups();
$fields['EXTERNAL_AUTH_ID'] = 'shop';
$fields['UF_DEPARTMENT'] = [];
if (!empty($userData['NEW_EMAIL']))
{
$fields['LOGIN'] = $userData['NEW_EMAIL'];
}
}
$user = new CUser();
$addResult = $user->Add($fields);
if ((int)$addResult <= 0)
{
$errors = explode('
', $user->LAST_ERROR);
TrimArr($errors, true);
foreach ($errors as $error)
{
$result->addError(new MainError($error));
}
}
else
{
$result->setData(['userId' => $addResult]);
}
return $result;
}