%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/basket/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/basket/refreshstrategy.php |
<?php namespace Bitrix\Sale\Basket; use Bitrix\Sale\BasketItem; use Bitrix\Sale\BasketItemBase; use Bitrix\Sale\BundleCollection; use Bitrix\Sale\Registry; use Bitrix\Sale\Result; abstract class RefreshStrategy extends BaseRefreshStrategy { /** * @param BasketItemBase $item * @param $fields * * @return Result */ protected function applyRefreshResult(BasketItemBase $item, $fields) { $bundleItemList = array(); if (isset($fields['ITEMS'])) { $bundleItemList = $fields['ITEMS']; unset($fields['ITEMS']); } $result = parent::applyRefreshResult($item, $fields); if ($result->isSuccess()) { if ($bundleItemList) { $r = $this->applyBundleRefreshResult($item, $bundleItemList); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } } } return $result; } /** * @param BasketItemBase $item * @param $bundleItemList * * @return Result */ 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; } }