• Модуль: 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;
}