- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
- Класс: BitrixSaleProviderBase
- Вызов: ProviderBase::getCatalogData
static function getCatalogData(array $basketProviderList, array $context, array $select = array())
{
$needPrice = in_array('PRICE', $select);
$needBasePrice = in_array('BASE_PRICE', $select);
$needCoupons = in_array('COUPONS', $select);
$result = array();
// $orderId = null;
$userId = null;
$siteId = null;
$currency = null;
if (!empty($context['USER_ID']) && intval($context['USER_ID']) > 0)
{
$userId = $context['USER_ID'];
}
if (array_key_exists('SITE_ID', $context))
{
$siteId = $context['SITE_ID'];
}
if (array_key_exists('CURRENCY', $context))
{
$currency = $context['CURRENCY'];
}
$data = array(
'USER_ID' => $userId,
'SITE_ID' => $siteId,
'CURRENCY' => $currency,
'CHECK_QUANTITY' => (in_array('QUANTITY', $select) ? 'Y' : 'N'),
'AVAILABLE_QUANTITY' => (in_array('AVAILABLE_QUANTITY', $select) ? 'Y' : 'N'),
'CHECK_PRICE' => ($needPrice ? 'Y' : 'N'),
'CHECK_COUPONS' => ($needCoupons ? 'Y' : 'N'),
'RENEWAL' => (in_array('RENEWAL', $select) ? 'Y' : 'N')
);
if ($needBasePrice)
$data['CHECK_DISCOUNT'] = 'N';
$useOrderProduct = false;
if ($needPrice)
$useOrderProduct = true;
if ($needCoupons)
$useOrderProduct = false;
unset($needCoupons, $needPrice);
foreach ($basketProviderList as $provider => $providerBasketItemList)
{
if ($provider && array_key_exists("IBXSaleProductProvider", class_implements($provider)))
{
foreach ($providerBasketItemList as $providerBasketItem)
{
$currentUseOrderProduct = $useOrderProduct;
if (!isset($providerBasketItem['BASKET_ID']) || (int)$providerBasketItem['BASKET_ID'] <= 0)
$currentUseOrderProduct = false;
$providerFields = $data;
if ($providerBasketItem['BASKET_ITEM']->isBundleChild())
{
$providerFields['CHECK_DISCOUNT'] = 'N';
}
if ($providerBasketItem['BASKET_ITEM']->getField("CAN_BUY") == "N"
|| $providerBasketItem['BASKET_ITEM']->getField("DELAY") == "Y"
|| $providerBasketItem['BASKET_ITEM']->getField("SUBSCRIBE") == "Y"
)
{
$providerFields['CHECK_COUPONS'] = 'N';
}
else
{
$providerFields['CHECK_COUPONS'] = 'Y';
}
$providerFields['PRODUCT_ID'] = $providerBasketItem['PRODUCT_ID'];
$providerFields['QUANTITY'] = $providerBasketItem['QUANTITY'];
if (intval($providerBasketItem['BASKET_ID']) > 0)
{
$providerFields['BASKET_ID'] = $providerBasketItem['BASKET_ID'];
}
$hasTrustData = false;
$trustData = static::getTrustData($siteId, $providerBasketItem['MODULE'], $providerBasketItem['PRODUCT_ID']);
if (static::isReadTrustData() === true
&& !empty($trustData) && is_array($trustData))
{
$hasTrustData = true;
$resultProductData = $trustData;
foreach (static::getProductDataRequiredFields() as $requiredField)
{
if (!array_key_exists($requiredField, $resultProductData))
{
$hasTrustData = false;
break;
}
}
if ($hasTrustData && in_array('PRICE', $select))
{
foreach (static::getProductDataRequiredPriceFields() as $requiredField)
{
if (!array_key_exists($requiredField, $resultProductData))
{
$hasTrustData = false;
break;
}
}
}
}
if(!$hasTrustData)
{
$resultProductData = ($currentUseOrderProduct ? $provider::OrderProduct($providerFields) : $provider::GetProductData($providerFields));
}
else
{
if (!in_array('AVAILABLE_QUANTITY', $select) && array_key_exists("AVAILABLE_QUANTITY", $resultProductData))
{
unset($resultProductData['AVAILABLE_QUANTITY']);
}
}
$basketCode = $providerBasketItem['BASKET_ITEM']->getBasketCode();
$result[$basketCode] = $resultProductData;
if ($providerBasketItem['BASKET_ITEM']->isBundleParent())
{
$result[$basketCode]["BUNDLE_ITEMS"] = array();
/** @var array $bundleChildList */
$bundleChildDataList = static::getSetItems($providerBasketItem['BASKET_ITEM']);
if (!empty($bundleChildDataList) && is_array($bundleChildDataList))
{
$bundleChildList = reset($bundleChildDataList);
foreach ($bundleChildList["ITEMS"] as &$itemData)
{
$itemData['QUANTITY'] = $itemData['QUANTITY'] * $providerBasketItem['BASKET_ITEM']->getQuantity();
}
unset($itemData);
$result[$basketCode]["BUNDLE_ITEMS"] = $bundleChildList["ITEMS"];
}
}
}
}
else
{
foreach ($providerBasketItemList as $providerBasketItem)
{
$resultProductData = CSaleBasket::executeCallbackFunction(
$providerBasketItem['CALLBACK_FUNC'],
$providerBasketItem['MODULE'],
$providerBasketItem['PRODUCT_ID'],
$providerBasketItem['QUANTITY']
);
$basketCode = $providerBasketItem['BASKET_ITEM']->getBasketCode();
$result[$basketCode] = $resultProductData;
}
}
}
return $result;
}