%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/entity/ |
| Current File : /home/bitrix/www/bitrix/modules/report/lib/visualconstructor/entity/report.php |
<?php
namespace Bitrix\Report\VisualConstructor\Entity;
use Bitrix\Report\VisualConstructor\Config\Common;
use Bitrix\Report\VisualConstructor\Handler\BaseReport;
use Bitrix\Report\VisualConstructor\Internal\Error\Error;
use Bitrix\Report\VisualConstructor\Internal\ReportConfigurationTable;
use Bitrix\Report\VisualConstructor\Internal\ReportTable;
use Bitrix\Report\VisualConstructor\RuntimeProvider\ReportProvider;
/**
* Class Report
* @package Bitrix\Report\VisualConstructor\Entity
*/
class Report extends ConfigurableModel
{
protected $gId;
protected $widgetId;
protected $reportClassName;
/** @var BaseReport $reportHandler */
protected $reportHandler;
protected $weight = 0;
/**
* @var Widget $widget
*/
protected $widget;
/**
* @return string
*/
public static function getTableClassName()
{
return ReportTable::getClassName();
}
/**
* Returns the list of pair for mapping data and object properties.
* Key is field in DataManager, value is object property.
*
* @return array
*/
public static function getMapAttributes()
{
$attributes = parent::getMapAttributes();
$attributes['GID'] = 'gId';
$attributes['REPORT_CLASS'] = 'reportClassName';
$attributes['WIDGET_ID'] = 'widgetId';
$attributes['WEIGHT'] = 'weight';
return $attributes;
}
/**
* @return array
*/
public static function getMapReferenceAttributes()
{
return array(
'configurations' => array(
'type' => Common::MANY_TO_MANY,
'targetEntity' => Configuration::getClassName(),
'join' => array(
'tableClassName' => ReportConfigurationTable::getClassName(),
'column' => array('REPORT' => array('id', 'REPORT_ID')),
'inverseColumn' => array('CONFIGURATION_SETTING' => array('id', 'CONFIGURATION_ID'))
),
),
'widget' => array(
'type' => Common::MANY_TO_ONE,
'targetEntity' => Widget::getClassName(),
'inversedBy' => 'reports',
'join' => array(
'field' => array('widgetId', 'id')
)
),
);
}
/**
* Get copy of report entity with nested relations,
*
* @return Report
*/
public function getCopy()
{
$coreReport = clone $this;
$copyReport = new Report();
$copyReport->setId(null);
$copyReport->setGId($coreReport->getGId());
$copyReport->setWeight($coreReport->getWeight());
$copyReport->setWidgetId($coreReport->getWidgetId());
$copyReport->setReportClassName($coreReport->getReportClassName());
$configurations = $coreReport->getConfigurations();
if (is_array($configurations))
{
foreach ($configurations as $configuration)
{
$configuration->setId(null);
$copyReport->addConfigurations($configuration);
}
}
return $copyReport;
}
/**
* @return mixed
*/
public function getWidgetId()
{
return $this->widgetId;
}
/**
* Connection report to widget.
*
* @param mixed $widgetId Widget id.
* @return void
*/
public function setWidgetId($widgetId)
{
$this->widgetId = $widgetId;
}
/**
* @return string
*/
public function getReportClassName()
{
return $this->reportClassName;
}
/**
* Setter for report class name.
*
* @see BaseReport::getClassName()
* @param string $reportClassName Report class name.
* @return void
*/
public function setReportClassName($reportClassName)
{
$this->reportClassName = $reportClassName;
}
/**
* Find report handler by report class name,in report provider.
* Return it if exist or return null.
*
* @return BaseReport|null
*/
public function getReportHandler()
{
if (!$this->reportHandler)
{
$reportHandlerFromEvent = ReportProvider::getReportHandlerByClassName($this->reportClassName);
if ($reportHandlerFromEvent)
{
$this->reportHandler = new $reportHandlerFromEvent;
$this->reportHandler->setView($this->getWidget()->getWidgetHandler()->getView());
$this->loadAttribute('configurations');
$this->reportHandler->fillReport($this);
}
else
{
$this->errors[] = new Error('No such report handler with this class');
return null;
}
}
return $this->reportHandler;
}
/**
* Setter for report handler.
*
* @param BaseReport $handler Report handler.
* @return void
*/
public function setReportHandler(BaseReport $handler)
{
$this->setReportClassName($handler::getClassName());
$this->reportHandler = $handler;
}
/**
* @return mixed
*/
public function getWeight()
{
return $this->weight;
}
/**
* Setter of Weight in report list of widget. (for sorting).
*
* @param mixed $weight Weight of report.
* @return void
*/
public function setWeight($weight)
{
$this->weight = $weight;
}
/**
* Get Widget, if not exist try to load it from db.
*
* @return Widget
*/
public function getWidget()
{
/**
* @HACK
*/
if (!$this->widget && $this->widgetId)
{
$this->widget = Widget::loadById($this->widgetId);
}
return $this->widget;
}
/**
* Attach report to widget.
* @param Widget $widget Widget entity.
* @return void
*/
public function setWidget($widget)
{
$this->widget = $widget;
}
/**
* @return mixed
*/
public function getGId()
{
return $this->gId;
}
/**
* Setter for gId.
*
* @param mixed $gId Value og gId.
* @return void
*/
public function setGId($gId)
{
$this->gId = $gId;
}
}