• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::getSetItems
static function getSetItems(BasketItemBase $basketItem)
{
	$bundleChildList = array();
	$provider = $basketItem->getProvider();
	if ($provider)
	{
		if (array_key_exists("IBXSaleProductProvider", class_implements($provider)))
		{
			$bundleChildList = $provider::GetSetItems($basketItem->getProductId(), BasketItem::TYPE_SET, array('BASKET_ID' => $basketItem->getId()));
		}
		elseif (class_exists($provider))
		{
			/** @var BasketItemCollection $collection */
			$collection = $basketItem->getCollection();

			/** @var Basket $basket */
			$basket = $collection->getBasket();
			if (!$basket)
			{
				throw new ObjectNotFoundException('Entity "Basket" not found');
			}

			$order = $basket->getOrder();

			if ($order)
			{
				$context = array(
					'SITE_ID' => $order->getSiteId(),
					'USER_ID' => $order->getUserId(),
					'CURRENCY' => $order->getCurrency(),
				);
			}
			else
			{
				global $USER;
				$context = array(
					'SITE_ID' => SITE_ID,
					'USER_ID' => $USER && $USER->GetID() > 0 ? $USER->GetID() : 0,
					'CURRENCY' => CurrencyCurrencyManager::getBaseCurrency(),
				);
			}
			$creator = InternalsProviderCreator::create($context);

			$creator->addBasketItem($basketItem);

			$r = $creator->getBundleItems();
			if ($r->isSuccess())
			{
				$resultProductListData = $r->getData();
				if (!empty($resultProductListData['BUNDLE_LIST']))
				{
					$bundleChildList = $resultProductListData['BUNDLE_LIST'];
				}
			}

			$order = $basket->getOrder();

			if ($order)
			{
				$context = array(
					'SITE_ID' => $order->getSiteId(),
					'USER_ID' => $order->getUserId(),
					'CURRENCY' => $order->getCurrency(),
				);
			}
			else
			{
				global $USER;
				$context = array(
					'SITE_ID' => SITE_ID,
					'USER_ID' => $USER && $USER->GetID() > 0 ? $USER->GetID() : 0,
					'CURRENCY' => CurrencyCurrencyManager::getBaseCurrency(),
				);
			}
			$creator = InternalsProviderCreator::create($context);

			$creator->addBasketItem($basketItem);

			$r = $creator->getBundleItems();
			if ($r->isSuccess())
			{
				$resultProductListData = $r->getData();
				if (!empty($resultProductListData['BUNDLE_LIST']))
				{
					$bundleChildList = $resultProductListData['BUNDLE_LIST'];
				}
			}
		}
		else
		{
			$bundleChildList = CSaleBasket::executeCallbackFunction(
				$basketItem->getField('CALLBACK_FUNC'),
				$basketItem->getField('MODULE'),
				$basketItem->getField('PRODUCT_ID'),
				$basketItem->getField('QUANTITY')
			);
		}

		return $bundleChildList;
	}

	return false;
}