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