166 lines
3.4 KiB
PHP
166 lines
3.4 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Statistics
|
|
* @category stats
|
|
*
|
|
* @author Damien Metzger / Epitech
|
|
* @copyright Epitech / PrestaShop
|
|
* @license http://www.opensource.org/licenses/osl-3.0.php Open-source licence 3.0
|
|
* @version 1.1
|
|
*/
|
|
|
|
class GridExtJS extends ModuleGridEngine
|
|
{
|
|
private $_values;
|
|
private $_totalCount;
|
|
private $_title;
|
|
private $_width;
|
|
private $_height;
|
|
|
|
function __construct($type = null)
|
|
{
|
|
if ($type != null)
|
|
{
|
|
parent::__construct($type);
|
|
}
|
|
else
|
|
{
|
|
$this->name = 'gridextjs';
|
|
$this->tab = 'Stats Engines';
|
|
$this->version = 1.0;
|
|
|
|
Module::__construct();
|
|
|
|
$this->displayName = $this->l('ExtJS');
|
|
$this->description = $this->l('ExtJS is a library which enables buiding rich internet application using Javascript.');
|
|
}
|
|
}
|
|
|
|
function install()
|
|
{
|
|
return (parent::install() AND $this->registerHook('GridEngine'));
|
|
}
|
|
|
|
public static function hookGridEngine($params, $grider)
|
|
{
|
|
if (!isset($params['emptyMsg']))
|
|
$params['emptyMsg'] = 'Empty';
|
|
|
|
$html = '
|
|
<script type="text/javascript" src="../modules/gridextjs/extjs/ext-grid-only.js"></script>
|
|
<script type="text/javascript">
|
|
//<![CDATA[
|
|
Ext.onReady(function(){
|
|
var store = new Ext.data.Store({
|
|
proxy: new Ext.data.HttpProxy({
|
|
url:"'.$grider.'"
|
|
}),
|
|
reader: new Ext.data.JsonReader({
|
|
root:"extjsgrid",
|
|
totalProperty:"totalCount",
|
|
id:"'.$params['id'].'",
|
|
fields:[';
|
|
foreach ($params['columns'] as $index => $column)
|
|
{
|
|
if ($index > 0)
|
|
$html .= ',';
|
|
$html .= '"'.$column['dataIndex'].'"';
|
|
}
|
|
$html .= ']
|
|
}),
|
|
remoteSort: true
|
|
});
|
|
store.setDefaultSort("'.$params['defaultSortColumn'].'", "DESC");
|
|
|
|
var cm = new Ext.grid.ColumnModel([';
|
|
|
|
foreach ($params['columns'] as $index => $column)
|
|
{
|
|
if ($index > 0)
|
|
$html .= ',';
|
|
$html .= '{';
|
|
$i = 0;
|
|
foreach ($column as $key => $value)
|
|
{
|
|
if ($i++ > 0)
|
|
$html .= ',';
|
|
$html .= $key.':'.(is_int($value) ? $value : '"'.$value.'"');
|
|
}
|
|
$html .= '}';
|
|
}
|
|
$html .= ']);
|
|
|
|
cm.defaultSortable = true;
|
|
|
|
var grid = new Ext.grid.GridPanel({
|
|
el:"extjsgrid",
|
|
width:'.$params['width'].',
|
|
height:'.$params['height'].',
|
|
title:"'.$params['title'].'",
|
|
store: store,
|
|
cm: cm,
|
|
trackMouseOver:false,
|
|
sm: new Ext.grid.RowSelectionModel({selectRow:Ext.emptyFn}),
|
|
loadMask: true,
|
|
viewConfig: {
|
|
forceFit:true,
|
|
enableRowBody:true
|
|
},
|
|
bbar: new Ext.PagingToolbar({
|
|
pageSize: '.$params['limit'].',
|
|
store: store,
|
|
displayInfo: true,
|
|
displayMsg: "'.$params['pagingMessage'].'",
|
|
emptyMsg: "'.$params['emptyMsg'].'"
|
|
})
|
|
});
|
|
|
|
grid.render();
|
|
store.load({params:{start:'.$params['start'].', limit:'.$params['limit'].'}});
|
|
});';
|
|
$html .= '
|
|
//]]>
|
|
</script>
|
|
<div id="extjsgrid"></div>';
|
|
return $html;
|
|
}
|
|
|
|
public function setValues($values)
|
|
{
|
|
$this->_values = $values;
|
|
}
|
|
|
|
public function setTitle($title)
|
|
{
|
|
$this->_title = $title;
|
|
}
|
|
|
|
public function setSize($width, $height)
|
|
{
|
|
$this->_width = $width;
|
|
$this->_nlines = $height;
|
|
}
|
|
|
|
public function setColumnsInfos(&$infos)
|
|
{
|
|
}
|
|
|
|
public function setTotalCount($totalCount)
|
|
{
|
|
$this->_totalCount = $totalCount;
|
|
}
|
|
|
|
public function render()
|
|
{
|
|
$json = array
|
|
(
|
|
'totalCount' => $this->_totalCount,
|
|
'extjsgrid' => $this->_values
|
|
);
|
|
|
|
echo json_encode($json);
|
|
}
|
|
}
|
|
?>
|