• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/providerbase.php
  • Класс: BitrixSaleProviderBase
  • Вызов: ProviderBase::recurringOrderProduct
static function recurringOrderProduct(BasketItem $basketItem)
{
	$result = new Result();
	$basketProviderData = static::createProviderBasketItemMap($basketItem, array('SITE_ID', 'USER_ID'));
	$provider = $basketProviderData['PROVIDER'];
	if (!empty($provider))
	{
		if (array_key_exists("IBXSaleProductProvider", class_implements($provider)))
		{
			$data = array(
				'PRODUCT_ID' => $basketProviderData['PRODUCT_ID'],
				'USER_ID' => $basketProviderData['USER_ID'],
			);

			$r = static::recurringProduct($provider, $data);
			if ($r->isSuccess())
			{
				$resultProductData = $r->getData();
				if (array_key_exists($basketProviderData['PRODUCT_ID'], $resultProductData))
				{
					$result->setData($resultProductData);
				}

			}

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

			$order = $basket->getOrder();

			if ($order)
			{
				$context = array(
					'USER_ID' => $order->getUserId(),
					'SITE_ID' => $order->getSiteId(),
					'CURRENCY' => $order->getCurrency(),
				);
			}
			else
			{
				global $USER;
				$context = array(
					'USER_ID' => $USER->getId(),
					'SITE_ID' => SITE_ID,
					'CURRENCY' => CurrencyCurrencyManager::getBaseCurrency(),
				);
			}

			$creator = InternalsProviderCreator::create($context);

			$providerClass = $basketItem->getProviderEntity();
			if ($providerClass instanceof SaleProviderBase)
			{
				$creator->addBasketItem($basketItem);
			}

			$r = $creator->recurring();
			if ($r->isSuccess())
			{
				$data = $r->getData();
				if (array_key_exists('RECURRING_PRODUCTS_LIST', $data))
				{
					$resultList = $data['RECURRING_PRODUCTS_LIST'];

					if (!empty($resultList))
					{
						$productId = $basketItem->getProductId();
						$result = reset($resultList);

						$result->setData(
							array(
								$productId => reset($resultList)
							)
						);
					}
				}
			}
		}
	}

	return $result;
}