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