%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/views/component/ |
Current File : //home/bitrix/www/bitrix/modules/report/lib/visualconstructor/views/component/base.php |
<?php namespace Bitrix\Report\VisualConstructor\Views\Component; use Bitrix\Report\VisualConstructor\Config\Common; use Bitrix\Report\VisualConstructor\Entity\Widget; use Bitrix\Report\VisualConstructor\Helper\Widget as WidgetHelper; use Bitrix\Report\VisualConstructor\View; /** * Base class for component content type for widgets in report dashboard. * * @package Bitrix\Report\VisualConstructor\Views\Component */ abstract class Base extends View { private $componentName; private $componentParameters; /** * Base component type view constructor. */ public function __construct() { $this->setJsClassName('BX.Report.Dashboard.Content.Html'); } /** * @return mixed */ public function getComponentName() { return $this->componentName; } /** * Setter for component name. * * @param string $componentName Component name. * @return void */ public function setComponentName($componentName) { $this->componentName = $componentName; } /** * @return string */ public function getComponentParameters() { return $this->componentParameters; } /** * Component parameters setter. * * @param array $componentParameters Parameters which pass to component. * @return void */ public function setComponentParameters($componentParameters) { $this->componentParameters = $componentParameters; } /** * Handle all data prepared for this view. * * @param array $calculatedPerformedData Performed data from report handler. * @return array */ public function handlerFinallyBeforePassToView($calculatedPerformedData) { $result['data'] = $calculatedPerformedData; return $result; } /** * Method to modify Content which pass to widget view, in absolute end. * * @param Widget $widget Widget entity. * @param bool $withCalculatedData Marker for calculate or no data in widget. * @return array */ public function prepareWidgetContent(Widget $widget, $withCalculatedData = false) { $resultWidget = parent::prepareWidgetContent($widget, $withCalculatedData); if ($withCalculatedData) { $resultWidget['content']['params']['color'] = $widget->getWidgetHandler()->getFormElement('color')->getValue(); } $result = $this->getCalculatedPerformedData($widget, $withCalculatedData); if (!empty($result['data']) && static::MAX_RENDER_REPORT_COUNT > 1) { foreach ($result['data'] as $num => &$reportResult) { $reportResult['config']['color'] = $widget->getWidgetHandler()->getReportHandlers()[$num]->getFormElement('color')->getValue(); $reportResult['title'] = $widget->getWidgetHandler()->getReportHandlers()[$num]->getFormElement('label')->getValue(); } } elseif (!empty($result['data'])) { $reportResult['config']['color'] = $widget->getWidgetHandler()->getReportHandlers()[0]->getFormElement('color')->getValue(); $reportResult['title'] = $widget->getWidgetHandler()->getReportHandlers()[0]->getFormElement('label')->getValue(); } $componentResult = $this->includeComponent($this->getComponentName(), array( 'WIDGET' => $widget, 'RESULT' => $result, )); $resultWidget['content']['params']['html'] = $componentResult['html']; $resultWidget['content']['params']['css'] = $componentResult['css']; $resultWidget['content']['params']['js'] = $componentResult['js']; return $resultWidget; } /** * Get calculated and format data. * * @param Widget $widget Widget Entity. * @param bool $withCalculatedData Marker for calculate or no data in widget. * @return array|null */ protected function getCalculatedPerformedData(Widget $widget, $withCalculatedData) { static $data; if (!$data) { $data = $withCalculatedData ? WidgetHelper::getCalculatedPerformedData($this, $widget) : array(); $data = $this->handlerFinallyBeforePassToView($data); } return $data; } /** * @param $componentName * @param array $params * @return mixed */ private function includeComponent($componentName, $params = array()) { global $APPLICATION; ob_start(); $APPLICATION->IncludeComponent( $componentName, '', $params ); $componentContent = ob_get_clean(); $result['html'] = $componentContent; $result['js'] = $APPLICATION->arHeadScripts; $result['css'] = $APPLICATION->sPath2css; return $result; } }