%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/catalog/lib/product/ |
| Current File : /home/bitrix/www/bitrix/modules/catalog/lib/product/catalogprovidercompatibility.php |
<?php
namespace Bitrix\Catalog\Product;
use Bitrix\Currency;
use Bitrix\Sale;
/**
* Class CatalogProviderCompatibility
*
* @package Bitrix\Catalog\Product
*/
class CatalogProviderCompatibility
{
/**
* @param array $basketItemData
*
* @return array|bool
*/
public static function getProductData(array $basketItemData)
{
$context = array();
if (!empty($basketItemData['SITE_ID']))
{
$context['SITE_ID'] = $basketItemData['SITE_ID'];
}
if (!empty($basketItemData['USER_ID']))
{
$context['USER_ID'] = $basketItemData['USER_ID'];
}
$providerClass = static::getProviderClass($context);
if (!$providerClass)
{
return false;
}
$productId = $basketItemData['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, $context);
$products = array(
$productId => array(
'ITEM_CODE' => $productId,
'QUANTITY_LIST' => array(
$basketItemData['BASKET_ID'] => $basketItemData['QUANTITY'])
,
));
if (!empty($basketItemData['BASKET_ID']))
{
$products[$productId]['BASKET_ID'] = $basketItemData['BASKET_ID'];
}
$r = $transfer->getProductData($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['PRODUCT_DATA_LIST']))
{
$productDataList = $data['PRODUCT_DATA_LIST'];
if (isset($productDataList[$productId]))
{
$productData = $productDataList[$productId];
if (!empty($productData['PRICE_LIST']))
{
$basketItemCode = $basketItemData['BASKET_ID'];
if (!empty($productData['PRICE_LIST'][$basketItemCode]))
{
$priceData = $productData['PRICE_LIST'][$basketItemCode];
if (!isset($priceData['QUANTITY']) && isset($priceData['AVAILABLE_QUANTITY']))
{
$priceData['QUANTITY'] = $priceData['AVAILABLE_QUANTITY'];
}
$productData = $priceData + $productData;
}
}
return $productData;
}
}
}
return false;
}
/**
* @param array $basketItemData
*
* @return array|bool
*/
public static function orderProduct(array $basketItemData)
{
return static::getProductData($basketItemData);
}
/**
* @param $productId
*
* @return array|bool
*/
public static function getSetItems($productId)
{
$resultList = array();
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return false;
}
$transfer = Sale\Internals\TransferProvider::create($providerClass, static::getContext());
$products = array($productId => array());
$r = $transfer->getBundleItems($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['BUNDLE_LIST']))
{
$resultList = $data['BUNDLE_LIST'];
}
}
return $resultList;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function reserveProduct(array $values)
{
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return false;
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, static::getContext());
$products = array(
$productId => array(
'ITEM_CODE' => $productId,
'QUANTITY' => $values['QUANTITY'] * ($values['UNDO_RESERVATION'] == 'Y'? -1 : 1),
));
$r = $transfer->reserve($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data))
{
$result = new Sale\Result();
$result->setData(array(
'RESERVED_PRODUCTS_LIST' => array(
$productId => $data
)
));
$r = $transfer->setItemsResultAfterReserve($products, $result);
}
}
return false;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function deductProduct(array $values)
{
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return false;
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, static::getContext());
$products = array(
$productId => array(
'ITEM_CODE' => $productId,
'PRODUCT_ID' => $productId,
'QUANTITY' => $values['QUANTITY'] * ($values['UNDO_DEDUCTION'] == 'Y'? -1 : 1),
));
$r = $transfer->ship($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data))
{
$result = new Sale\Result();
$result->setData(array(
'SHIPPED_PRODUCTS_LIST' => array(
$productId => $data
)
));
$r = $transfer->setItemsResultAfterShip($products, $result);
}
}
return false;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function viewProduct(array $values)
{
$result = false;
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return $result;
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, static::getContext());
if (empty($values['SITE_ID']))
{
$values['SITE_ID'] = SITE_ID;
}
$products = array(
$productId => array(
"PRODUCT_ID" => $productId,
"USER_ID" => $values["USER_ID"],
"SITE_ID" => $values["SITE_ID"]
));
$r = $transfer->viewProduct($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['VIEW_PRODUCTS_LIST']) && array_key_exists($productId, $data['VIEW_PRODUCTS_LIST']))
{
return $data['VIEW_PRODUCTS_LIST'][$productId];
}
}
return $result;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function getProductStores(array $values)
{
$result = false;
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return $result;
}
$context = static::getContext();
if (!empty($values['SITE_ID']))
{
$context['SITE_ID'] = $values['SITE_ID'];
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, $context);
$products = array(
$productId => array(
"PRODUCT_ID" => $productId,
"BASKET_ID" => $values["BASKET_ID"],
"SITE_ID" => $values["SITE_ID"]
));
$r = $transfer->getProductListStores($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['PRODUCT_STORES_LIST']) && array_key_exists($productId, $data['PRODUCT_STORES_LIST']))
{
return $data['PRODUCT_STORES_LIST'][$productId];
}
}
return $result;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function recurringOrderProduct(array $values)
{
$result = false;
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return $result;
}
$context = static::getContext();
if (!empty($values['SITE_ID']))
{
$context['SITE_ID'] = $values['SITE_ID'];
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, $context);
$products = array(
$productId => array(
"PRODUCT_ID" => $productId,
"USER_ID" => $values["USER_ID"],
));
$r = $transfer->recurring($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['RECURRING_PRODUCTS_LIST']) && array_key_exists($productId, $data['RECURRING_PRODUCTS_LIST']))
{
return $data['RECURRING_PRODUCTS_LIST'][$productId];
}
}
return $result;
}
/**
* @param array $values
*
* @return array|bool
*/
public static function getStoresCount(array $values)
{
$result = false;
$context = static::getContext();
if (isset($values['SITE_ID']))
{
$context['SITE_ID'] = $values['SITE_ID'];
}
$providerClass = static::getProviderClass($context);
if (!$providerClass)
{
return $result;
}
$transfer = Sale\Internals\TransferProvider::create($providerClass, $context);
$r = $transfer->getStoresCount();
if ($r->isSuccess())
{
$data = $r->getData();
if (isset($data['STORES_COUNT']))
{
return $data['STORES_COUNT'];
}
}
return $result;
}
public static function DeliverProduct(array $values)
{
$result = false;
$providerClass = static::getProviderClass();
if (!$providerClass)
{
return $result;
}
$productId = $values['PRODUCT_ID'];
$transfer = Sale\Internals\TransferProvider::create($providerClass, static::getContext());
if (empty($values['SITE_ID']))
{
$values['SITE_ID'] = SITE_ID;
}
$products = array(
$productId => array(
"PRODUCT_ID" => $productId,
"USER_ID" => $values["USER_ID"],
"ORDER_ID" => $values["ORDER_ID"],
"PAID" => $values["PAID"],
"BASKET_ID" => $values["BASKET_ID"],
));
$r = $transfer->deliver($products);
if ($r->isSuccess())
{
$data = $r->getData();
if (!empty($data['DELIVER_PRODUCTS_LIST']) && array_key_exists($productId, $data['DELIVER_PRODUCTS_LIST']))
{
return $data['DELIVER_PRODUCTS_LIST'][$productId];
}
}
return $result;
}
/**
* @param array $context
*
* @return null|Sale\SaleProviderBase
*/
private static function getProviderClass($context = array())
{
$providerName = static::getProviderName();
$providerClass = null;
$setContext = static::getContext();
if (!empty($context))
{
$setContext = $context + $setContext;
}
if (class_exists($providerName))
{
$providerClass = new $providerName($setContext);
}
return $providerClass;
}
/**
* @return array
*/
private static function getContext()
{
global $USER;
return array(
'SITE_ID' => SITE_ID,
'USER_ID' => isset($USER) && $USER instanceof \CUser ? (int)$USER->GetID() : 0,
'CURRENCY' => Currency\CurrencyManager::getBaseCurrency(),
);
}
/**
* @return string
*/
private static function getProviderName()
{
return "\Bitrix\Catalog\Product\CatalogProvider";
}
}