403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/rospirotorg.ru/bitrix/components/bitrix/catalog.discsave.info/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/bitrix/components/bitrix/catalog.discsave.info/component.php
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
{
	die();
}

/** @var array $arParams */
/** @var array $arResult */

use Bitrix\Main\Config\Option;
use Bitrix\Main\Loader;
use Bitrix\Catalog;
use Bitrix\Sale;

global $APPLICATION;
global $USER;

$arParams['SITE_ID'] = (string)($arParams['SITE_ID'] ?? '');
if ($arParams['SITE_ID'] === '')
{
	$arParams['SITE_ID'] = SITE_ID;
}

$arParams['USER_ID'] = (int)($arParams['USER_ID'] ?? 0);
if ($arParams['USER_ID'] <= 0)
{
	$arParams['USER_ID'] = (int)$USER->GetID();
}

if ($arParams['USER_ID'] <= 0)
{
	return;
}

$arParams['SHOW_NEXT_LEVEL'] = ($arParams['SHOW_NEXT_LEVEL'] ?? 'Y') === 'Y' ? 'Y' : 'N';

if (!Loader::includeModule('catalog'))
{
	return;
}

if (!Catalog\Config\Feature::isCumulativeDiscountsEnabled())
{
	CCatalogDiscountSave::Disable();
	ShowError(GetMessage('CAT_FEATURE_NOT_ALLOW'));
	return;
}
$arFields = [
	'USER_ID' => $arParams['USER_ID'],
	'SITE_ID' => $arParams['SITE_ID'],
];

$onlySaleDiscount = Loader::includeModule('sale') && Option::get('sale', 'use_sale_discount_only') === 'Y';
if ($onlySaleDiscount)
{
	$manager = Sale\Discount\Preset\Manager::getInstance();
	$manager->registerAutoLoader();
	$cumulativePreset = $manager->getPresetById('Sale\Handlers\DiscountPreset\Cumulative');

	if ($cumulativePreset)
	{
		$userGroups = CUser::getUserGroup($arFields['USER_ID']);
		\Bitrix\Main\Type\Collection::normalizeArrayValuesByInt($userGroups);

		$cumulativeDiscounts = Sale\Internals\DiscountTable::getList([
			'filter' => [
				'=ACTIVE' => 'Y',
				'=PRESET_ID' => \Sale\Handlers\DiscountPreset\Cumulative::className(),
				'=\Bitrix\Sale\Internals\DiscountGroupTable:DISCOUNT.ACTIVE' => 'Y',
				'@\Bitrix\Sale\Internals\DiscountGroupTable:DISCOUNT.GROUP_ID' => $userGroups,
			],
			'data_doubling' => false,
		]);

		$currency = Sale\Internals\SiteCurrencyTable::getSiteCurrency($arParams['SITE_ID']);
		$cumulativeCalculator = new Sale\Discount\CumulativeCalculator(
			$arFields['USER_ID'],
			$arFields['SITE_ID']
		);
		$arResult = [];
		foreach ($cumulativeDiscounts as $cumulativeDiscount)
		{
			$state = $cumulativePreset->generateState($cumulativeDiscount);
			$cumulativeCalculator->setSumConfiguration([
				'type_sum_period' => $state['discount_type_sum_period'],
				'sum_period_data' => [
					'order_start' => $state->get(
						'discount_sum_order_start',
						function ($value)
						{
							return $value ? makeTimeStamp($value) : null;
						}
					),
					'order_end' => $state->get(
						'discount_sum_order_end',
						function ($value)
						{
							return $value ? makeTimeStamp($value) : null;
						}
					),
					'period_value' => $state['discount_sum_period_value'],
					'period_type' => $state['discount_sum_period_type'],
				],
			]);
			$cumulativeOrderUserValue = $cumulativeCalculator->calculate();

			$rangeToApply = null;
			$indexRangeToApply = null;
			$nextRangeToApply = null;
			$ranges = $state->get('discount_ranges', []);
			if (empty($ranges))
			{
				continue;
			}
			foreach ($ranges as $index => $range)
			{
				if ($cumulativeOrderUserValue >= $range['sum'])
				{
					$rangeToApply = $range;
					$indexRangeToApply = $index;
				}
			}
			if ($indexRangeToApply === null)
			{
				$rangeToApply = [
					'type' => Catalog\DiscountTable::VALUE_TYPE_PERCENT,
					'value' => 0,
				];
				$indexNextRangeToApply = 0;
			}
			else
			{
				$indexNextRangeToApply = $indexRangeToApply + 1;
			}
			if (isset($ranges[$indexNextRangeToApply]))
			{
				$nextRangeToApply = $ranges[$indexNextRangeToApply];
			}

			$arResult[] = [
				'~NAME' => $cumulativeDiscount['NAME'],
				'NAME' => htmlspecialcharsbx($cumulativeDiscount['NAME']),
				'VALUE_TYPE' => $rangeToApply['type'],
				'VALUE' => $rangeToApply['value'],
				'CURRENCY' => $currency,
				'NEXT_LEVEL' =>
					$nextRangeToApply
						? [
						'VALUE_TYPE' => $nextRangeToApply['type'],
						'VALUE' => $nextRangeToApply['value'],
						'RANGE_FROM' => $nextRangeToApply['sum'],
					]
						: null
				,
				'RANGE_SUMM' => $cumulativeOrderUserValue,
			];
		}
	}
}
else
{
	$arResult = CCatalogDiscountSave::GetDiscount($arFields);
	if (!empty($arResult))
	{
		foreach ($arResult as $key => $arDiscountSave)
		{
			if ($arParams['SHOW_NEXT_LEVEL'] === 'Y')
			{
				$rsRanges = CCatalogDiscountSave::GetRangeByDiscount(
					[
						'RANGE_FROM' => 'ASC',
					],
					[
						'DISCOUNT_ID' => $arDiscountSave['ID'],
						'>RANGE_FROM' => $arDiscountSave['RANGE_FROM'],
					],
					false,
					[
						'nTopCount' => 1,
					]
				);
				$arRange = $rsRanges->Fetch();
				unset($rsRange);
				if ($arRange)
				{
					$arDiscountSave['NEXT_LEVEL'] = [
						'RANGE_FROM' => $arRange['RANGE_FROM'],
						'VALUE' => $arRange['VALUE'],
						'VALUE_TYPE' => $arRange['TYPE'],
					];
				}
				unset($arRange);
			}
			$arDiscountSave['~NAME'] = $arDiscountSave['NAME'];
			$arDiscountSave['NAME'] = htmlspecialcharsbx($arDiscountSave['NAME']);
			$arResult[$key] = $arDiscountSave;
		}
	}
}

$this->IncludeComponentTemplate();

Youez - 2016 - github.com/yon3zu
LinuXploit