%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/handler/ |
| Current File : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/handler/basewidget.php |
<?php
namespace Bitrix\Report\VisualConstructor\Handler;
use Bitrix\Report\VisualConstructor\Entity\Widget;
use Bitrix\Report\VisualConstructor\Fields\Base as BaseFormField;
use Bitrix\Report\VisualConstructor\Fields\Container;
use Bitrix\Report\VisualConstructor\Fields\Valuable\BaseValuable;
use Bitrix\Report\VisualConstructor\Handler\Base as BaseHandler;
use Bitrix\Report\VisualConstructor\RuntimeProvider\ViewProvider;
/**
* Class BaseWidget class for extending to create preset widget classes
* @package Bitrix\Report\VisualConstructor\Handler
*/
class BaseWidget extends BaseHandler
{
private $widget;
private $reportHandlerList = array();
/**
* @return string
*/
public static function getClassName()
{
return get_called_class();
}
/**
* BaseWidgetHandler constructor.
*/
public function __construct()
{
$widget = new Widget();
$widget->setWidgetClass(static::getClassName());
$this->setWidget($widget);
}
/**
* @return \Bitrix\Report\VisualConstructor\Fields\Base[]
*/
public function getCollectedFormElements()
{
parent::getCollectedFormElements();
$this->getView()->collectWidgetHandlerFormElements($this);
return $this->getFormElements();
}
/**
* Collecting form elements for configuration form.
*
* @return void
*/
protected function collectFormElements()
{
}
/**
* @return Widget
*/
public function getWidget()
{
return $this->widget;
}
/**
* @param Widget $widget Widget entity.
* @return void
*/
public function setWidget($widget)
{
$this->widget = $widget;
}
/**
* @return BaseFormField[]
*/
public function getFormElements()
{
$result = array();
foreach ($this->formElementsList as $key => $element)
{
$viewModesWhereFieldAvailable = $element->getCompatibleViewTypes();
if ($viewModesWhereFieldAvailable != null)
{
$viewKey = $this->getWidget()->getViewKey();;
$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 instanceof Container))
{
$element->setName($this->getNameForFormElement($element));
}
}
return $result;
}
/**
* Construct and return form element name.
*
* @param BaseValuable $element Form element.
* @return string
*/
protected function getNameForFormElement(BaseValuable $element)
{
$name = '';
if ($this->getWidget())
{
$name = 'widget[' . $this->getWidget()->getGId() . ']';
}
$name .= parent::getNameForFormElement($element);
return $name;
}
/**
* @return BaseReport[]
*/
public function getReportHandlers()
{
return $this->reportHandlerList;
}
/**
* Attach report handler to widget handler.
*
* @param BaseReport $reportHandler Report handler.
* @return $this
*/
public function addReportHandler(BaseReport $reportHandler)
{
$reportHandler->setWidgetHandler($this);
$this->getWidget()->addReportHandler($reportHandler);
$this->reportHandlerList[] = $reportHandler;
return $this;
}
/**
* Fill Widget handler entity with parameters from Widget entity.
*
* @param Widget $widget Widget handler.
* @return void
*/
public function fillWidget(Widget $widget)
{
$viewHandler = ViewProvider::getViewByViewKey($widget->getViewKey());
if ($viewHandler)
{
$this->setView($viewHandler);
}
$this->setWidget($widget);
$this->setConfigurations($widget->getConfigurations());
$this->getCollectedFormElements();
$this->fillFormElementValues();
if ($widget->getReports())
{
foreach ($widget->getReports() as $report)
{
$this->reportHandlerList[] = $report->getReportHandler();
}
}
}
private function fillFormElementValues()
{
$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());
}
}
}
}
}