- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderbasket.php
- Класс: BitrixSaleHelpersAdminBlocksOrderBasket
- Вызов: OrderBasket::getOffersSkuParamsMode
static function getOffersSkuParamsMode(array $productsParams, array $visibleColumns = array(), $mode = 0)
{
if(!empty($productsParams["ITEMS"]) && is_array($productsParams["ITEMS"]))
{
if (self::$catalogIncluded === null)
self::$catalogIncluded = MainLoader::includeModule('catalog');
if (!self::$catalogIncluded)
return $productsParams;
$iblockPropsUsed = array();
$productIds = array();
$existOffers = array();
$skuFilter = array('ID' => array());
$propFilter = array('ID' => array());
$ibs = array();
foreach($productsParams["ITEMS"] as $params)
{
if($params['MODULE'] != 'catalog')
continue;
$productIds[] = $params['PRODUCT_ID'];
if ($mode == self::VIEW_MODE)
{
if ((int)$params['OFFER_ID'] > 0)
{
$skuFilter['ID'][] = $params['OFFER_ID'];
}
}
if (!isset($ibs[$params["IBLOCK_ID"]]))
{
$props = static::getSkuProps(true, $params["IBLOCK_ID"]);
if (!empty($props))
{
foreach($props as $prop)
{
$propFilter['ID'][] = $prop['ID'];
}
}
$ibs[$params["IBLOCK_ID"]] = true;
}
if($params["PRODUCT_ID"] != $params["OFFER_ID"])
$existOffers[] = $params["OFFER_ID"];
}
$skuFilter['ID'] = array_unique($skuFilter['ID']);
$productIds = array_unique($productIds);
$propFilter['ID'] = array_unique($propFilter['ID']);
$allOffers = CCatalogSKU::getOffersList(
$productIds,
0,
$skuFilter,
array('NAME', "ACTIVE", 'CATALOG_QUANTITY'),
$propFilter
);
$tmpPropsOff = array();
if(!empty($allOffers))
$tmpPropsOff = static::getPropsFromOffers2($allOffers, $existOffers);
unset($skuFilter, $propFilter, $existOffers, $productIds);
foreach($productsParams["ITEMS"] as &$params)
{
if($params['MODULE'] != 'catalog')
continue;
if (!isset(self::$productsOffersSkuParams[$params["PRODUCT_ID"]]))
{
if(isset($tmpPropsOff[$params["PRODUCT_ID"]]))
{
self::$productsOffersSkuParams[$params["PRODUCT_ID"]] = $tmpPropsOff[$params["PRODUCT_ID"]];
foreach($tmpPropsOff[$params["PRODUCT_ID"]] as $offerId => $propsList)
{
foreach($propsList as $propId => $propValue)
{
if(!isset($iblockPropsUsed[$propId]))
$iblockPropsUsed[$propId] = array();
if(is_array($propValue))
{
$iblockPropsUsed[$propId] = array_merge(
$iblockPropsUsed[$propId],
array_diff(
$propValue,
$iblockPropsUsed[$propId]
)
);
}
else
{
if(!in_array($propValue, $iblockPropsUsed[$propId]))
$iblockPropsUsed[$propId][] = $propValue;
}
}
}
}
}
}
unset($allOffers, $tmpPropsOff);
$possibleSkuParams = array();
foreach($productsParams["ITEMS"] as &$params)
{
if($params['MODULE'] != 'catalog')
continue;
$possibleSku = array();
if(intval($params["OFFERS_IBLOCK_ID"]) > 0 && !isset(self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]]))
{
self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]] = static::getPropsParams(
$params["OFFERS_IBLOCK_ID"],
array(),
$iblockPropsUsed
);
}
if (!empty(self::$productsOffersSkuParams[$params["PRODUCT_ID"]][$params["OFFER_ID"]]))
{
$params["SKU_PROPS"] = self::$productsOffersSkuParams[$params["PRODUCT_ID"]][$params["OFFER_ID"]];
}
if (
isset($params["SKU_PROPS"])
&& is_array($params["SKU_PROPS"])
)
{
foreach ($params["SKU_PROPS"] as $id => $skuProps)
{
if(is_array($skuProps))
{
unset($params["SKU_PROPS"][$id]);
continue;
}
$params["SKU_PROPS"][$id] = array(
'ID' => $skuProps,
'NAME' => self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]][$id]['NAME'],
'VALUE' => self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]][$id]['VALUES'][$skuProps],
'CODE' => self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]][$id]['CODE'],
'SORT' => self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]][$id]['SORT']
);
$possibleSku[$id] = self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]][$id]['VALUES'][$skuProps]['ID'];
}
}
if($mode == self::EDIT_MODE && $params['PRODUCT_ID'] != $params['OFFER_ID'])
{
if(is_array(self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]]))
$skuOrder = array_keys(self::$iblockPropsParams[$params["OFFERS_IBLOCK_ID"]]);
else
$skuOrder = array_keys($possibleSku);
$possibleSkuParams[$params['OFFER_ID']] = array(
'PRODUCT_ID' => $params['PRODUCT_ID'],
'OFFER_ID' => $params['OFFER_ID'],
'SKU_PROPS' => $possibleSku,
'SKU_ORDER' => $skuOrder
);
}
}
unset($params, $iblockPropsUsed);
if($mode == self::EDIT_MODE && !empty($possibleSkuParams))
{
$possibleSkuProps = SaleHelpersAdminSkuProps::getPossibleSkuPropsValues($possibleSkuParams);
if(!empty($possibleSkuProps))
{
foreach($productsParams["ITEMS"] as $key => $params)
{
if($params['MODULE'] != 'catalog')
continue;
$productsParams["ITEMS"][$key]["SKU_PROPS_POSSIBLE_VALUES"] = $possibleSkuProps[$params['OFFER_ID']] ?? [];
}
unset($possibleSkuParams);
}
}
$productsParams["IBLOCKS_SKU_PARAMS"] = self::$iblockPropsParams;
foreach(self::$iblockPropsParams as $iBlockId => $props)
self::$iblockPropsParamsOrder[$iBlockId] = array_keys($props);
}
$productsParams["IBLOCKS_SKU_PARAMS_ORDER"] = self::$iblockPropsParamsOrder;
return $productsParams;
}