• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::getProductStores
static function getProductStores(BasketItem $basketItem)
{
	$result = new Result();

	$basketItemProviderMap = static::createProviderBasketItemMap($basketItem, array('SITE_ID'));

	if (!empty($basketItemProviderMap))
	{
		$provider = $basketItemProviderMap['PROVIDER'];

		if (array_key_exists("IBXSaleProductProvider", class_implements($provider)))
		{
			$productId = $basketItemProviderMap["PRODUCT_ID"];
			$data = array(
				"PRODUCT_ID" => $productId,
				"SITE_ID" => $basketItemProviderMap["SITE_ID"],
				'BASKET_ID' => $basketItemProviderMap['BASKET_ID']
			);

			$r = static::getStores($provider, $data);
			if ($r->isSuccess())
			{
				$resultProductData = $r->getData();
				if (array_key_exists($productId, $resultProductData))
				{
					$result->setData($resultProductData);
				}
			}

		}
		elseif (class_exists($provider))
		{
			/** @var Basket $basket */
			$basket = $basketItem->getCollection();
			if (!$basket)
			{
				throw new ObjectNotFoundException('Entity "Basket" not found');
			}

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

			$context = array(
				'SITE_ID' => $order->getSiteId(),
				'CURRENCY' => $order->getCurrency(),
			);

			if ($order->getUserId() > 0)
			{
				$context['USER_ID'] = $order->getUserId();
			}
			else
			{
				global $USER;
				$context['USER_ID'] = $USER->getId();
			}

			/** @var SaleProviderBase $providerClass */
			$providerClass = new $provider($context);
			if ($providerClass && $providerClass instanceof SaleProviderBase)
			{

				$creator = InternalsProviderCreator::create($context);
				$creator->addBasketItem($basketItem);

				$r = $creator->getProductStores();
				if ($r->isSuccess())
				{
					$result->setData($r->getData());
				}
				else
				{
					$result->addErrors($r->getErrors());
				}

			}
		}
	}

	return $result;
}