class GiftService
{
private static $collections = null;
protected static function getInstance()
{
if (self::$collections === null) {
\Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();
$basketStorage = \Bitrix\Sale\Basket\Storage::getInstance(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());
$basket = $basketStorage->getBasket();
$giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance();
if ($userId = \Bitrix\Main\Engine\CurrentUser::get()->getId())
$giftManager->setUserId($userId);
self::$collections = $giftManager->getCollectionsByBasket($basket);
\Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();
}
return self::$collections;
}
/**
* @return array
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ObjectPropertyException
* @throws \Bitrix\Main\SystemException
* Получить все примененные подарки к текущей корзине
*/
public static function getGifts(): array
{
$arItems = [];
self::getInstance();
foreach (self::$collections as $collection) {
foreach ($collection as $gift) {
if (!$product = \Bitrix\Catalog\ProductTable::getById($gift->getProductId())->fetch())
continue;
switch ($product['TYPE']) {
case \Bitrix\Catalog\ProductTable::TYPE_PRODUCT:
$arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_SKU:
echo 'TYPE_SKU';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_OFFER:
echo 'TYPE_OFFER';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_SET:
echo 'TYPE_SET';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_EMPTY_SKU:
echo 'TYPE_EMPTY_SKU';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_FREE_OFFER:
echo 'TYPE_FREE_OFFER';
// $arItems[] = $product;
break;
}
}
}
if (!empty($arItems)) return $arItems;
return [];
}
/**
* @return mixed|void
* @throws ReflectionException
* Получить защищенное свойство type
* one - любой из
* all - все
*/
public static function typeRuleGift()
{
self::getInstance();
foreach (self::$collections as $collection) {
$ref = new \ReflectionClass($collection);
$prop = $ref->getProperty('type');
$prop->setAccessible(true);
return $prop->getValue($collection);
}
}
}
{
private static $collections = null;
protected static function getInstance()
{
if (self::$collections === null) {
\Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible();
$basketStorage = \Bitrix\Sale\Basket\Storage::getInstance(\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());
$basket = $basketStorage->getBasket();
$giftManager = \Bitrix\Sale\Discount\Gift\Manager::getInstance();
if ($userId = \Bitrix\Main\Engine\CurrentUser::get()->getId())
$giftManager->setUserId($userId);
self::$collections = $giftManager->getCollectionsByBasket($basket);
\Bitrix\Sale\Compatible\DiscountCompatibility::revertUsageCompatible();
}
return self::$collections;
}
/**
* @return array
* @throws \Bitrix\Main\ArgumentException
* @throws \Bitrix\Main\ObjectPropertyException
* @throws \Bitrix\Main\SystemException
* Получить все примененные подарки к текущей корзине
*/
public static function getGifts(): array
{
$arItems = [];
self::getInstance();
foreach (self::$collections as $collection) {
foreach ($collection as $gift) {
if (!$product = \Bitrix\Catalog\ProductTable::getById($gift->getProductId())->fetch())
continue;
switch ($product['TYPE']) {
case \Bitrix\Catalog\ProductTable::TYPE_PRODUCT:
$arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_SKU:
echo 'TYPE_SKU';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_OFFER:
echo 'TYPE_OFFER';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_SET:
echo 'TYPE_SET';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_EMPTY_SKU:
echo 'TYPE_EMPTY_SKU';
// $arItems[] = $product;
break;
case \Bitrix\Catalog\ProductTable::TYPE_FREE_OFFER:
echo 'TYPE_FREE_OFFER';
// $arItems[] = $product;
break;
}
}
}
if (!empty($arItems)) return $arItems;
return [];
}
/**
* @return mixed|void
* @throws ReflectionException
* Получить защищенное свойство type
* one - любой из
* all - все
*/
public static function typeRuleGift()
{
self::getInstance();
foreach (self::$collections as $collection) {
$ref = new \ReflectionClass($collection);
$prop = $ref->getProperty('type');
$prop->setAccessible(true);
return $prop->getValue($collection);
}
}
}