• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basket/refreshstrategy.php
  • Класс: BitrixSaleBasketRefreshStrategy
  • Вызов: RefreshStrategy::applyBundleRefreshResult
protected function applyBundleRefreshResult(BasketItemBase $item, $bundleItemList)
{
	/** @var BasketItem $item */
	$result = new Result();

	$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
	/** @var BasketItem $basketItemClassName */
	$basketItemClassName = $registry->getBasketItemClassName();

	/** @var BundleCollection $bundleCollection */
	$bundleCollection = $item->getBundleCollection();
	$bundleIndexList = array();
	/** @var BasketItem $bundleItem */
	foreach ($bundleCollection as $bundleItem)
	{
		$bundleIndexList[$bundleItem->getBasketCode()] = $bundleItem;
	}

	/** @var array $bundleBasketItemData */
	foreach ($bundleItemList as $bundleBasketItemData)
	{
		if (empty($bundleBasketItemData['MODULE']) || empty($bundleBasketItemData['PRODUCT_ID']))
			return null;

		$props = array();
		if (!empty($bundleBasketItemData['PROPS']) && is_array($bundleBasketItemData['PROPS']))
		{
			$props = $bundleBasketItemData['PROPS'];
		}

		/** @var BasketItem $bundleBasketItem */
		$bundleItem = $bundleCollection->getExistsItem($bundleBasketItemData['MODULE'], $bundleBasketItemData['PRODUCT_ID'], $props);
		if (!$bundleItem)
		{
			$bundleItem = $basketItemClassName::create($bundleCollection, $bundleBasketItemData['MODULE'], $bundleBasketItemData['PRODUCT_ID']);
		}

		$fields = array_intersect_key($bundleBasketItemData, $basketItemClassName::getSettableFieldsMap());
		$r = $this->applyRefreshResult($item, $fields);
		if (!$r->isSuccess())
		{
			$result->addErrors($r->getErrors());
		}

		unset($bundleIndexList[$bundleItem->getBasketCode()]);
	}

	if ($bundleIndexList)
	{
		/** @var BasketItemBase $bundleItem */
		foreach ($bundleIndexList as $bundleItem)
		{
			$bundleItem->delete();
		}
	}

	return $result;
}