- Модуль: catalog
- Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
- Класс: BitrixCatalogDiscountDiscountManager
- Вызов: DiscountManager::extendOrderData
static function extendOrderData(MainEvent $event): MainEventResult
{
$process = true;
$resultData = [];
$orderData = $event->getParameter('ORDER');
$entityList = $event->getParameter('ENTITY');
$cacheKeyForEntityList = self::getCacheKeyForEntityList($entityList);
if (empty($orderData) || !is_array($orderData))
{
$process = false;
}
else
{
if (!isset($orderData['BASKET_ITEMS']) || !is_array($orderData['BASKET_ITEMS']))
$process = false;
}
$entityData = false;
$iblockData = false;
if (
$process
&& !empty($orderData['BASKET_ITEMS'])
)
{
$entityData = self::prepareEntity($entityList);
if (empty($entityData))
$process = false;
}
if ($process)
{
$productMap = [];
$productList = [];
$productData = [];
$priceList = [];
$basket = array_filter($orderData['BASKET_ITEMS'], 'BitrixCatalogDiscountDiscountManager::basketFilter');
if (!empty($basket))
{
foreach ($basket as $basketCode => $basketItem)
{
$basketItem['PRODUCT_ID'] = (int)$basketItem['PRODUCT_ID'];
$productList[] = $basketItem['PRODUCT_ID'];
if (!isset($productMap[$basketItem['PRODUCT_ID']]))
{
$productMap[$basketItem['PRODUCT_ID']] = [];
}
$productMap[$basketItem['PRODUCT_ID']][] = &$basket[$basketCode];
if (isset($basketItem['PRODUCT_PRICE_ID']))
{
$priceList[] = $basketItem['PRODUCT_PRICE_ID'];
}
}
unset($basketItem, $basketCode);
if(isset(self::$preloadedProductsData[$cacheKeyForEntityList]))
{
$preloadedProductIds = array_keys(self::$preloadedProductsData[$cacheKeyForEntityList]);
$loadedProductIds = array_intersect($productList, $preloadedProductIds);
$productList = array_diff($productList, $preloadedProductIds);
}
$productData = array_fill_keys($productList, []);
if($productData)
{
$iblockData = self::getProductIblocks($productList);
self::fillProductPropertyList($entityData, $iblockData);
self::fillProductPriceList($entityData, $priceList);
}
}
if (!empty($iblockData['iblockElement']))
{
self::getProductData($productData, $entityData, $iblockData);
}
if(!empty($loadedProductIds))
{
foreach($loadedProductIds as $loadedProductId)
{
$productData[$loadedProductId] = self::$preloadedProductsData[$cacheKeyForEntityList][$loadedProductId];
}
if(!empty($entityData['priceFields']))
{
self::fillByPreloadedPrices($productData, $priceList);
}
}
if($productData)
{
foreach ($productData as $product => $data)
{
if (empty($productMap[$product]))
continue;
foreach ($productMap[$product] as &$basketItem)
$basketItem['CATALOG'] = $data;
unset($basketItem);
}
unset($product, $data);
$resultData['BASKET_ITEMS'] = $basket;
}
unset($basket, $productData, $productMap, $productList);
}
if ($process)
$result = new MainEventResult(MainEventResult::SUCCESS, $resultData, 'catalog');
else
$result = new MainEventResult(MainEventResult::ERROR, null, 'catalog');
unset($process, $resultData);
return $result;
}