Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/sale/lib/helpers/order/builder/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/sale/lib/helpers/order/builder/basketbuilderexist.php

<?
namespace Bitrix\Sale\Helpers\Order\Builder;

use Bitrix\Sale\BasketItem;

class BasketBuilderExist implements IBasketBuilderDelegate
{
	/** @var BasketBuilder */
	protected  $builder = null;

	public function __construct(BasketBuilder $builder)
	{
		$this->builder = $builder;
	}

	/**
	 * Get item from current basket
	 * 
	 * Search only by $basketCode !!!
	 * 
	 * If the product is not found, the basket code is set and is not equal to BasketBuilder::BASKET_CODE_NEW,
	 * then this product will be deleted.
	 *
	 * @param string|int $basketCode
	 * @param array $productData not used
	 * @return BasketItem|null
	 * @throws BuildingException
	 */
	public function getItemFromBasket($basketCode, $productData)
	{
		$item = $this->builder->getBasket()->getItemByBasketCode($basketCode);

		//sku was changed
		if($item == null && $basketCode != BasketBuilder::BASKET_CODE_NEW)
		{
			if($item = $this->builder->getBasket()->getItemByBasketCode($basketCode))
			{
				$res = $item->delete();

				if(!$res->isSuccess())
				{
					$this->builder->getErrorsContainer()->addErrors($res->getErrors());
					throw new BuildingException();
				}

				$item = null;
			}
		}

		return $item;
	}

	/**
	 * @param $basketCode
	 * @param BasketItem $item
	 * @param array $productData
	 */
	public function setItemData($basketCode, &$productData, &$item)
	{
		if ($basketCode != $productData["BASKET_CODE"])
			$productData["BASKET_CODE"] = $item->getBasketCode();

		if(isset($productData["OFFER_ID"]) && intval($productData["OFFER_ID"]) > 0)
			$productData["PRODUCT_ID"] = $productData["OFFER_ID"];

		$itemFields = array_intersect_key($productData, array_flip($item::getAvailableFields()));

		if(isset($itemFields["MEASURE_CODE"]) && $itemFields["MEASURE_CODE"] <> '')
		{
			$measures = $this->builder->getCatalogMeasures();

			if(isset($measures[$itemFields["MEASURE_CODE"]]) && $measures[$itemFields["MEASURE_CODE"]] <> '')
				$itemFields["MEASURE_NAME"] = $measures[$itemFields["MEASURE_CODE"]];
		}

		$providerData = [];

		if(!empty($productData["PROVIDER_DATA"]) && !$this->builder->isNeedUpdateNewProductPrice() && CheckSerializedData($productData["PROVIDER_DATA"]))
		{
			$providerData = unserialize($productData["PROVIDER_DATA"], ['allowed_classes' => false]);
		}

		if (is_array($providerData) && !empty($providerData))
		{
			$this->builder->sendProductCachedDataToProvider($item, $this->builder->getOrder(), $providerData);
		}

		if(!empty($productData["SET_ITEMS_DATA"]) && CheckSerializedData($productData["SET_ITEMS_DATA"]))
			$productData["SET_ITEMS"] = unserialize($productData["SET_ITEMS_DATA"], ['allowed_classes' => false]);

		$this->builder->setBasketItemFields($item, $itemFields);
	}

	public function finalActions()
	{
		if($this->builder->isProductAdded())
		{
			$res = $this->builder->getBasket()->refreshData(array('PRICE', 'COUPONS'));

			if (!$res->isSuccess())
			{
				$this->builder->getErrorsContainer()->addErrors($res->getErrors());
			}
		}
	}
}