mirror of
https://github.com/Combodo/iTop.git
synced 2026-03-05 09:04:19 +01:00
N°3123 - Create specific block for DisplayBlock(type: Chart)
This commit is contained in:
@@ -27,6 +27,7 @@ use Combodo\iTop\Application\UI\Component\Html\Html;
|
||||
use Combodo\iTop\Application\UI\Component\Toolbar\Toolbar;
|
||||
use Combodo\iTop\Application\UI\iUIBlock;
|
||||
use Combodo\iTop\Application\UI\Layout\UIContentBlock;
|
||||
use Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockChart\BlockChart;
|
||||
use Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockList\BlockList;
|
||||
|
||||
require_once(APPROOT.'/application/utils.inc.php');
|
||||
@@ -459,37 +460,8 @@ HTML;
|
||||
break;
|
||||
|
||||
case 'chart':
|
||||
static $iChartCounter = 0;
|
||||
$iChartCounter++;
|
||||
|
||||
$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
|
||||
//$sTitle = isset($aExtraParams['chart_title']) ? '<div class="main_header"><h1> '.htmlentities(Dict::S($aExtraParams['chart_title']), ENT_QUOTES, 'UTF-8').'</h1></div>' : '';
|
||||
$sHtml = "<div style=\"height:250px;width:100%\" class=\"dashboard_chart\" id=\"my_chart_$sId{$iChartCounter}\"><div style=\"height:200px;line-height:200px;vertical-align:center;text-align:center;width:100%\"><img src=\"../images/indicator.gif\"></div></div>\n";
|
||||
$sGroupBy = isset($aExtraParams['group_by']) ? $aExtraParams['group_by'] : '';
|
||||
$sGroupByExpr = isset($aExtraParams['group_by_expr']) ? '¶ms[group_by_expr]='.$aExtraParams['group_by_expr'] : '';
|
||||
$sFilter = $this->m_oFilter->serialize(false, $aQueryParams);
|
||||
$oContext = new ApplicationContext();
|
||||
$sContextParam = $oContext->GetForLink();
|
||||
$sAggregationFunction = isset($aExtraParams['aggregation_function']) ? $aExtraParams['aggregation_function'] : '';
|
||||
$sAggregationAttr = isset($aExtraParams['aggregation_attribute']) ? $aExtraParams['aggregation_attribute'] : '';
|
||||
$sLimit = isset($aExtraParams['limit']) ? $aExtraParams['limit'] : '';
|
||||
$sOrderBy = isset($aExtraParams['order_by']) ? $aExtraParams['order_by'] : '';
|
||||
$sOrderDirection = isset($aExtraParams['order_direction']) ? $aExtraParams['order_direction'] : '';
|
||||
|
||||
if (isset($aExtraParams['group_by_label'])) {
|
||||
$sUrl = json_encode(utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$sId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam);
|
||||
} else {
|
||||
$sUrl = json_encode(utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[currentId]=$sId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam);
|
||||
}
|
||||
|
||||
$oPage->add_ready_script(
|
||||
<<<EOF
|
||||
$.post($sUrl, {}, function(data) {
|
||||
$('body').append(data);
|
||||
});
|
||||
EOF
|
||||
);
|
||||
break;
|
||||
$oBlock = $this->RenderChart($sId, $aQueryParams, $aExtraParams);
|
||||
break;
|
||||
|
||||
case 'chart_ajax':
|
||||
$sHtml = '';
|
||||
@@ -1394,6 +1366,49 @@ JS
|
||||
return $oBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $sId
|
||||
* @param array $aQueryParams
|
||||
*
|
||||
* @param array $aExtraParams
|
||||
*
|
||||
* @return \Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockChart\BlockChart
|
||||
* @throws \ArchivedObjectException
|
||||
* @throws \CoreException
|
||||
*/
|
||||
protected function RenderChart(?string $sId, array $aQueryParams, array $aExtraParams)
|
||||
{
|
||||
static $iChartCounter = 0;
|
||||
$iChartCounter++;
|
||||
|
||||
$oBlock = new BlockChart();
|
||||
|
||||
$oBlock->AddParameter('iChartCounter', $iChartCounter);
|
||||
$oBlock->AddParameter('sId', $sId);
|
||||
|
||||
$sChartType = isset($aExtraParams['chart_type']) ? $aExtraParams['chart_type'] : 'pie';
|
||||
$sGroupBy = isset($aExtraParams['group_by']) ? $aExtraParams['group_by'] : '';
|
||||
$sGroupByExpr = isset($aExtraParams['group_by_expr']) ? '¶ms[group_by_expr]='.$aExtraParams['group_by_expr'] : '';
|
||||
$sFilter = $this->m_oFilter->serialize(false, $aQueryParams);
|
||||
$oContext = new ApplicationContext();
|
||||
$sContextParam = $oContext->GetForLink();
|
||||
$sAggregationFunction = isset($aExtraParams['aggregation_function']) ? $aExtraParams['aggregation_function'] : '';
|
||||
$sAggregationAttr = isset($aExtraParams['aggregation_attribute']) ? $aExtraParams['aggregation_attribute'] : '';
|
||||
$sLimit = isset($aExtraParams['limit']) ? $aExtraParams['limit'] : '';
|
||||
$sOrderBy = isset($aExtraParams['order_by']) ? $aExtraParams['order_by'] : '';
|
||||
$sOrderDirection = isset($aExtraParams['order_direction']) ? $aExtraParams['order_direction'] : '';
|
||||
|
||||
if (isset($aExtraParams['group_by_label'])) {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[group_by_label]={$aExtraParams['group_by_label']}¶ms[chart_type]=$sChartType¶ms[currentId]=$sId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
|
||||
} else {
|
||||
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart¶ms[group_by]=$sGroupBy{$sGroupByExpr}¶ms[chart_type]=$sChartType¶ms[currentId]=$sId{$iChartCounter}¶ms[order_direction]=$sOrderDirection¶ms[order_by]=$sOrderBy¶ms[limit]=$sLimit¶ms[aggregation_function]=$sAggregationFunction¶ms[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
|
||||
}
|
||||
|
||||
$oBlock->AddParameter('sUrl', $sUrl);
|
||||
|
||||
return $oBlock;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
|
||||
@import "blocklist";
|
||||
@import "blocklist";
|
||||
@import "blockchart";
|
||||
4
css/backoffice/specific/displayblock/_blockchart.scss
Normal file
4
css/backoffice/specific/displayblock/_blockchart.scss
Normal file
@@ -0,0 +1,4 @@
|
||||
/*!
|
||||
* copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
@@ -237,8 +237,8 @@ return array(
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\TopBar\\TopBarFactory' => $baseDir . '/sources/application/UI/Layout/TopBar/TopBarFactory.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\UIContentBlock' => $baseDir . '/sources/application/UI/Layout/UIContentBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\iUIContentBlock' => $baseDir . '/sources/application/UI/Layout/iUIContentBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\BlockChart\\BlockChart' => $baseDir . '/sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\BlockList\\BlockList' => $baseDir . '/sources/application/UI/Specific/DisplayBlock/BlockList/BlockList.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\Csv\\BlockCsv' => $baseDir . '/sources/application/UI/Specific/DisplayBlock/Csv/BlockCsv.php',
|
||||
'Combodo\\iTop\\Application\\UI\\UIBlock' => $baseDir . '/sources/application/UI/UIBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\UIException' => $baseDir . '/sources/application/UI/UIException.php',
|
||||
'Combodo\\iTop\\Application\\UI\\iUIBlock' => $baseDir . '/sources/application/UI/iUIBlock.php',
|
||||
|
||||
@@ -467,8 +467,8 @@ class ComposerStaticInit0018331147de7601e7552f7da8e3bb8b
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\TopBar\\TopBarFactory' => __DIR__ . '/../..' . '/sources/application/UI/Layout/TopBar/TopBarFactory.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\UIContentBlock' => __DIR__ . '/../..' . '/sources/application/UI/Layout/UIContentBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Layout\\iUIContentBlock' => __DIR__ . '/../..' . '/sources/application/UI/Layout/iUIContentBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\BlockChart\\BlockChart' => __DIR__ . '/../..' . '/sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\BlockList\\BlockList' => __DIR__ . '/../..' . '/sources/application/UI/Specific/DisplayBlock/BlockList/BlockList.php',
|
||||
'Combodo\\iTop\\Application\\UI\\Specific\\DisplayBlock\\Csv\\BlockCsv' => __DIR__ . '/../..' . '/sources/application/UI/Specific/DisplayBlock/Csv/BlockCsv.php',
|
||||
'Combodo\\iTop\\Application\\UI\\UIBlock' => __DIR__ . '/../..' . '/sources/application/UI/UIBlock.php',
|
||||
'Combodo\\iTop\\Application\\UI\\UIException' => __DIR__ . '/../..' . '/sources/application/UI/UIException.php',
|
||||
'Combodo\\iTop\\Application\\UI\\iUIBlock' => __DIR__ . '/../..' . '/sources/application/UI/iUIBlock.php',
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (C) 2010-2020 Combodo SARL
|
||||
* @license http://opensource.org/licenses/AGPL-3.0
|
||||
*/
|
||||
|
||||
namespace Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockChart;
|
||||
|
||||
|
||||
use Combodo\iTop\Application\UI\tBlockParams;
|
||||
use Combodo\iTop\Application\UI\UIBlock;
|
||||
|
||||
/**
|
||||
* Class BlockChart
|
||||
*
|
||||
* @package Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockChart
|
||||
*/
|
||||
class BlockChart extends UIBlock
|
||||
{
|
||||
// Overloaded constants
|
||||
public const BLOCK_CODE = 'ibo-blockchart';
|
||||
public const HTML_TEMPLATE_REL_PATH = 'specific/displayblock/blockchart/layout';
|
||||
public const JS_TEMPLATE_REL_PATH = 'specific/displayblock/blockchart/layout';
|
||||
|
||||
use tBlockParams;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{# @copyright Copyright (C) 2010-2020 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
<div style="height:250px;width:100%" class="dashboard_chart" id="my_chart_{{ oUIBlock.GetParameter('sId') }}{{ oUIBlock.GetParameter('iChartCounter') }}">
|
||||
<div style="height:200px;line-height:200px;vertical-align:center;text-align:center;width:100%">
|
||||
<img src="../images/indicator.gif">
|
||||
</div>
|
||||
</div>
|
||||
{% endapply %}
|
||||
@@ -0,0 +1,7 @@
|
||||
{# @copyright Copyright (C) 2010-2020 Combodo SARL #}
|
||||
{# @license http://opensource.org/licenses/AGPL-3.0 #}
|
||||
{% apply spaceless %}
|
||||
$.post('{{ oUIBlock.GetParameter('sUrl')|escape_for_js_string|raw }}', {}, function (data) {
|
||||
$('body').append(data);
|
||||
});
|
||||
{% endapply %}
|
||||
Reference in New Issue
Block a user