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/cvetdv.ru/bitrix/modules/catalog/lib/component/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/modules/catalog/lib/component/reportstorelist.php
<?php

namespace Bitrix\Catalog\Component;

use Bitrix\Catalog\Access\AccessController;
use Bitrix\Catalog\Access\ActionDictionary;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;

abstract class ReportStoreList extends \CBitrixComponent
{
	abstract protected function getGridColumns(): array;

	abstract protected function getReportProductGridComponentName(): string;

	abstract protected function getTotalFields(): array;

	abstract protected function getGridId(): string;

	public function executeComponent()
	{
		if (!Loader::includeModule('catalog') || !self::checkDocumentReadRights())
		{
			$this->arResult['ERROR_MESSAGES'][] = Loc::getMessage('CATALOG_REPORT_STORE_LIST_NO_READ_RIGHTS_ERROR');
			$this->includeComponentTemplate();

			return;
		}

		$this->arResult['GRID'] = $this->getGridData();
		$this->arResult['GRID_FILTER'] = $this->getGridFilter();
		$this->arResult['PRODUCT_LIST_SLIDER_URL'] = $this->getProductListComponentUrl();

		$this->includeComponentTemplate();
	}

	private function getGridData(): array
	{
		$result = [
			'GRID_ID' => $this->getGridId(),
			'COLUMNS' => $this->getGridColumns(),
			'ROWS' => [],
		];

		if (
			isset($this->arParams['RESULT']['data']['stub'])
			&& is_array($this->arParams['RESULT']['data']['stub'])
		)
		{
			$result['STUB'] = $this->arParams['RESULT']['data']['stub'];

			return $result;
		}

		$providerData = $this->arParams['RESULT']['data']['items'];
		$overallData = $this->arParams['RESULT']['data']['overall'];

		if (!empty($providerData))
		{
			foreach($providerData as $storeId => $item)
			{
				$result['ROWS'][] = [
					'id' => $storeId,
					'data' => $item,
					'columns' => $this->prepareItemColumn($item),
				];
			}

			$result['ROWS'][] = $this->prepareOverallTotalRow($overallData);
		}

		$result['SHOW_PAGINATION'] = false;
		$result['SHOW_NAVIGATION_PANEL'] = false;
		$result['SHOW_PAGESIZE'] = false;
		$result['SHOW_ROW_CHECKBOXES'] = false;
		$result['SHOW_CHECK_ALL_CHECKBOXES'] = false;
		$result['SHOW_ACTION_PANEL'] = false;
		$result['HANDLE_RESPONSE_ERRORS'] = true;
		$result['SHOW_GRID_SETTINGS_MENU'] = false;
		$result['ALLOW_STICKED_COLUMNS'] = true;

		return $result;
	}

	private function prepareItemColumn(array $item): array
	{
		$column = $item;

		$column['TITLE'] = $this->prepareTitleViewForColumn($column);
		if (isset($column['STORE_ID']))
		{
			$column['STORE_ID'] = (int)$column['STORE_ID'];
		}

		foreach ($this->getTotalFields() as $totalField)
		{
			$column[$totalField] = $this->prepareTotalField($column['TOTALS'], $totalField);
		}

		unset($column['TOTALS']);

		return $column;
	}

	private function prepareOverallTotalRow(array $overallData): array
	{
		$overallColumns = [];
		$overallColumns['TITLE'] = Loc::getMessage('CATALOG_REPORT_STORE_LIST_OVERALL_TOTAL');

		foreach ($this->getTotalFields() as $totalField)
		{
			$overallColumns[$totalField] = $this->prepareTotalField($overallData, $totalField);
		}

		return [
			'id' => 'overallTotal',
			'data' => $overallData,
			'columns' => $overallColumns,
		];
	}

	private function prepareTotalField(array $totals, string $field): string
	{
		if (empty($totals))
		{
			return 0;
		}

		$result = '';
		foreach ($totals as $measureId => $total)
		{
			$result .= $this->formatNumberWithMeasure($total[$field], (int)$measureId);
			$result .= '<br>';
		}

		return $result;
	}

	private function formatNumberWithMeasure($number, int $measureId)
	{
		return Loc::getMessage(
			'CATALOG_REPORT_STORE_LIST_MEASURE_TEMPLATE',
			[
				'#NUMBER#' => $number,
				'#MEASURE_SYMBOL#' => $this->getMeasureSymbol($measureId),
			]
		);
	}

	private function prepareTitleViewForColumn(array $column): string
	{
		if (!isset($column['TITLE'], $column['STORE_ID']))
		{
			return '';
		}

		if ($column['TITLE'])
		{
			$title = htmlspecialcharsbx($column['TITLE']);
		}
		else
		{
			$title = Loc::getMessage('CATALOG_REPORT_STORE_LIST_EMPTY_STORE_NAME');
		}

		return $title;
	}

	private function getMeasureSymbol(int $measureId): string
	{
		$measure = $this->getMeasures()[$measureId] ?? null;

		return $measure !== null ? htmlspecialcharsbx($measure['SYMBOL']) : '';
	}

	private function getMeasures(): array
	{
		static $measures = [];

		if (empty($measures))
		{
			$measuresResult = \CCatalogMeasure::getList();
			while ($measure = $measuresResult->Fetch())
			{
				$measures[$measure['ID']] = $measure;
			}
		}

		return $measures;
	}

	private function getGridFilter(): array
	{
		return $this->arParams['RESULT']['data']['filter'];
	}

	protected function getProductListComponentUrl(): string
	{
		$productGridPath = \CComponentEngine::makeComponentPath($this->getReportProductGridComponentName());

		return getLocalPath('components' . $productGridPath . '/slider.php');
	}

	private static function checkDocumentReadRights(): bool
	{
		return AccessController::getCurrent()->check(ActionDictionary::ACTION_CATALOG_READ);
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit