Files
iTop/sources/Application/UI/Base/Component/DataTable/StaticTable/StaticTable.php
2021-12-31 15:44:59 +01:00

186 lines
3.9 KiB
PHP

<?php
namespace Combodo\iTop\Application\UI\Base\Component\DataTable\StaticTable;
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock;
use Combodo\iTop\Application\UI\Base\tJSRefreshCallback;
use utils;
/**
* @copyright Copyright (C) 2010-2021 Combodo SARL
* @license http://opensource.org/licenses/AGPL-3.0
*/
/**
* Tables with static data
* Class StaticTable
*/
class StaticTable extends UIContentBlock
{
use tJSRefreshCallback;
// Overloaded constants
public const BLOCK_CODE = 'ibo-datatable';
public const DEFAULT_HTML_TEMPLATE_REL_PATH = 'base/components/datatable/static/layout';
public const DEFAULT_JS_ON_READY_TEMPLATE_REL_PATH = 'base/components/datatable/static/layout';
public const DEFAULT_JS_FILES_REL_PATH = [
'node_modules/datatables.net/js/jquery.dataTables.min.js',
'node_modules/datatables.net-fixedheader/js/dataTables.fixedHeader.min.js',
'node_modules/datatables.net-responsive/js/dataTables.responsive.min.js',
'node_modules/datatables.net-scroller/js/dataTables.scroller.min.js',
'node_modules/datatables.net-select/js/dataTables.select.min.js',
'js/field_sorter.js',
'js/table-selectable-lines.js',
'js/dataTables.main.js',
'js/dataTables.settings.js',
'js/dataTables.pipeline.js',
];
/**
* @var array of 'entry name' => [
* 'description' => tooltip,
* 'label' => label to display,
* 'class' => cell CSS class,
* 'metadata' => [key => value] transformed into data-key="value"
* ]
*/
private $aColumns;
/**
* @var array of [
* '@class' => css class of the row,
* 'entry name' => [
* 'value_html' => value to display in the cell,
* 'value_raw' => real value put into data-value-raw
* ], ...
* ]
*/
private $aData;
private $aExtraParams;
/*@var string $sUrlForRefresh*/
private $sFilter;
/** @var array $aOptions
* List of specific options for display datatable
*/
private $aOptions;
public function __construct(string $sId = null, array $aContainerCSSClasses = [], array $aExtraParams = [])
{
parent::__construct($sId, $aContainerCSSClasses);
$this->aColumns = [];
$this->aData = [];
$this->aExtraParams = $aExtraParams;
$this->aOptions = [];
}
/**
* @return array
*/
public function GetColumns(): array
{
return $this->aColumns;
}
/**
* @param array $aColumns
*
* @return $this
*/
public function SetColumns(array $aColumns)
{
$this->aColumns = $aColumns;
return $this;
}
/**
* @return array
*/
public function GetData(): array
{
return $this->aData;
}
/**
* @param array $aData
*
* @return $this
*/
public function SetData(array $aData)
{
$this->aData = $aData;
return $this;
}
/**
* @param string $sFilter
*
* @return $this
*/
public function SetFilter($sFilter)
{
$this->sFilter = $sFilter;
return $this;
}
public function GetJSRefresh(): string
{
//$('#".$this->sId."').DataTable().clear().rows.add(data).draw()
$aParams = [
'style' => 'list',
'filter' => $this->sFilter,
'extra_params' => $this->aExtraParams,
];
return "$.post('".utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=refreshDashletList', ".json_encode($aParams).",
function (data) {
$('#".$this->sId."').DataTable().clear();
$('#".$this->sId."').dataTable().fnAddData(data);
});";
}
/**
* @return mixed
*/
public function GetOption(string $sOption)
{
if (isset($this->aOptions[$sOption])) {
return $this->aOptions[$sOption];
}
return null;
}
/**
* @return array
*/
public function GetOptions(): array
{
return $this->aOptions;
}
/**
* @param array $aOptions
*
* @return $this
*/
public function SetOptions($aOptions)
{
$this->aOptions = $aOptions;
return $this;
}
/**
* @param array $aOptions
*
* @return $this
*/
public function AddOption($sName, $sValue)
{
$this->aOptions[$sName] = $sValue;
return $this;
}
}