- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/saveorderaction.php
- Класс: BitrixSaleControllerActionEntitySaveOrderAction
- Вызов: SaveOrderAction::setUser
private function setUser(SaleOrder $order, array $fields): SaleResult
{
$result = new SaleResult();
$isNewUser = false;
if ((int)$fields['USER_ID'] > 0)
{
$userId = (int)$fields['USER_ID'];
if ($this->isLandingShop($order) && MainLoader::includeModule('crm'))
{
CrmServiceSaleOrderBuyerService::getInstance()->attachUserToBuyers($userId);
}
}
else
{
$properties = [];
/** @var SalePropertyValue $property */
foreach ($order->getPropertyCollection() as $property)
{
$properties[$property->getPropertyId()] = $property->getValue();
}
$userProps = SaleProperty::getMeaningfulValues($order->getPersonTypeId(), $properties);
$email = $userProps['EMAIL'] ?? '';
$phone = $userProps['PHONE'] ?? '';
$userId = $this->searchExistingUser($email, $phone);
if (!$userId)
{
$registerNewUserResult = $this->registerNewUser($order, $userProps);
if ($registerNewUserResult->isSuccess())
{
$registerNewUserData = $registerNewUserResult->getData();
$userId = $registerNewUserData['userId'];
$isNewUser = true;
}
else
{
$result->addErrors($registerNewUserResult->getErrors());
return $result;
}
}
}
if (!$userId)
{
$result->addError(new MainError('User not found'));
return $result;
}
$order->setFieldNoDemand('USER_ID', $userId);
$result->setData([
'ID' => $userId,
'IS_NEW' => $isNewUser,
]);
return $result;
}