- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/addbasketitemaction.php
- Класс: BitrixSaleControllerActionEntityAddBasketItemAction
- Вызов: AddBasketItemAction::addBasketItem
public function addBasketItem(array $fields): SaleResult
{
$result = new SaleResult();
$checkParamsResult = $this->checkParams($fields);
if (!$checkParamsResult->isSuccess())
{
$result->addErrors($checkParamsResult->getErrors());
return $result;
}
$fuserId = $fields['FUSER_ID'];
$siteId = $fields['SITE_ID'];
$product = $fields['PRODUCT'];
$options = [
'USE_MERGE' => !isset($fields['USE_MERGE']) || $fields['USE_MERGE'] !== 'N' ? 'Y' : 'N',
];
$basket = $this->getBasketByFuserId($fuserId, $siteId);
$product = $this->prepareBasketFields($product);
$addProductToBasketResult = CatalogProductBasket::addProductToBasket($basket, $product, ['SITE_ID' => $siteId], $options);
if ($addProductToBasketResult->isSuccess())
{
$saveBasketResult = $basket->save();
if ($saveBasketResult->isSuccess())
{
$addProductToBasketData = $addProductToBasketResult->getData();
if ($basketItem = $addProductToBasketData['BASKET_ITEM'])
{
$result->setData([
'basket' => $basket,
'basketItem' => $basketItem,
]);
}
}
else
{
/** @var MainError $error */
foreach ($saveBasketResult->getErrors() as $error)
{
// save basket error
$result->addError(
new MainError(
$error->getMessage(),
SaleControllerErrorEnumeration::ADD_BASKET_ITEM_SAVE_BASKET
)
);
}
}
}
else
{
/** @var MainError $error */
foreach ($addProductToBasketResult->getErrors() as $error)
{
$result->addError(
new MainError(
$error->getMessage(),
SaleControllerErrorEnumeration::ADD_BASKET_ITEM_ADD_PRODUCT_TO_BASKET
)
);
}
}
return $result;
}