N°3123 - Create specific block for DisplayBlock(type: Chart)

This commit is contained in:
Eric
2020-11-26 17:41:25 +01:00
parent cf4e8c65d2
commit efbd249e7f
8 changed files with 96 additions and 34 deletions

View File

@@ -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>&#160;'.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']) ? '&params[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&params[group_by]=$sGroupBy{$sGroupByExpr}&params[group_by_label]={$aExtraParams['group_by_label']}&params[chart_type]=$sChartType&params[currentId]=$sId{$iChartCounter}&params[order_direction]=$sOrderDirection&params[order_by]=$sOrderBy&params[limit]=$sLimit&params[aggregation_function]=$sAggregationFunction&params[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam);
} else {
$sUrl = json_encode(utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart&params[group_by]=$sGroupBy{$sGroupByExpr}&params[chart_type]=$sChartType&params[currentId]=$sId{$iChartCounter}&params[order_direction]=$sOrderDirection&params[order_by]=$sOrderBy&params[limit]=$sLimit&params[aggregation_function]=$sAggregationFunction&params[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']) ? '&params[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&params[group_by]=$sGroupBy{$sGroupByExpr}&params[group_by_label]={$aExtraParams['group_by_label']}&params[chart_type]=$sChartType&params[currentId]=$sId{$iChartCounter}&params[order_direction]=$sOrderDirection&params[order_by]=$sOrderBy&params[limit]=$sLimit&params[aggregation_function]=$sAggregationFunction&params[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
} else {
$sUrl = utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php?operation=chart&params[group_by]=$sGroupBy{$sGroupByExpr}&params[chart_type]=$sChartType&params[currentId]=$sId{$iChartCounter}&params[order_direction]=$sOrderDirection&params[order_by]=$sOrderBy&params[limit]=$sLimit&params[aggregation_function]=$sAggregationFunction&params[aggregation_attribute]=$sAggregationAttr&id=$sId{$iChartCounter}&filter=".rawurlencode($sFilter).'&'.$sContextParam;
}
$oBlock->AddParameter('sUrl', $sUrl);
return $oBlock;
}
}
/**

View File

@@ -1,2 +1,3 @@
@import "blocklist";
@import "blocklist";
@import "blockchart";

View File

@@ -0,0 +1,4 @@
/*!
* copyright Copyright (C) 2010-2020 Combodo SARL
* license http://opensource.org/licenses/AGPL-3.0
*/

View File

@@ -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',

View File

@@ -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',

View File

@@ -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;
}

View File

@@ -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 %}

View File

@@ -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 %}