From efbd249e7f4bf6eb430551ebe8dcfb6a057bd742 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 26 Nov 2020 17:41:25 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B03123=20-=20Create=20specific=20block=20f?= =?UTF-8?q?or=20DisplayBlock(type:=20Chart)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/displayblock.class.inc.php | 77 +++++++++++-------- .../specific/displayblock/_all.scss | 3 +- .../specific/displayblock/_blockchart.scss | 4 + lib/composer/autoload_classmap.php | 2 +- lib/composer/autoload_static.php | 2 +- .../DisplayBlock/BlockChart/BlockChart.php | 26 +++++++ .../displayblock/blockchart/layout.html.twig | 9 +++ .../displayblock/blockchart/layout.js.twig | 7 ++ 8 files changed, 96 insertions(+), 34 deletions(-) create mode 100644 css/backoffice/specific/displayblock/_blockchart.scss create mode 100644 sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php create mode 100644 templates/specific/displayblock/blockchart/layout.html.twig create mode 100644 templates/specific/displayblock/blockchart/layout.js.twig diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index aed0053ca..f36b7d100 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -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']) ? '

 '.htmlentities(Dict::S($aExtraParams['chart_title']), ENT_QUOTES, 'UTF-8').'

' : ''; - $sHtml = "
\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( -<<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; + } + } /** diff --git a/css/backoffice/specific/displayblock/_all.scss b/css/backoffice/specific/displayblock/_all.scss index a86cb3a4f..f36fe4755 100644 --- a/css/backoffice/specific/displayblock/_all.scss +++ b/css/backoffice/specific/displayblock/_all.scss @@ -1,2 +1,3 @@ -@import "blocklist"; \ No newline at end of file +@import "blocklist"; +@import "blockchart"; \ No newline at end of file diff --git a/css/backoffice/specific/displayblock/_blockchart.scss b/css/backoffice/specific/displayblock/_blockchart.scss new file mode 100644 index 000000000..2b1c120e8 --- /dev/null +++ b/css/backoffice/specific/displayblock/_blockchart.scss @@ -0,0 +1,4 @@ +/*! + * copyright Copyright (C) 2010-2020 Combodo SARL + * license http://opensource.org/licenses/AGPL-3.0 + */ diff --git a/lib/composer/autoload_classmap.php b/lib/composer/autoload_classmap.php index 3620b3697..a4cf0436a 100644 --- a/lib/composer/autoload_classmap.php +++ b/lib/composer/autoload_classmap.php @@ -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', diff --git a/lib/composer/autoload_static.php b/lib/composer/autoload_static.php index ba7b0c059..c13f32b91 100644 --- a/lib/composer/autoload_static.php +++ b/lib/composer/autoload_static.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', diff --git a/sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php b/sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php new file mode 100644 index 000000000..9dd37d041 --- /dev/null +++ b/sources/application/UI/Specific/DisplayBlock/BlockChart/BlockChart.php @@ -0,0 +1,26 @@ + +
+ +
+ +{% endapply %} \ No newline at end of file diff --git a/templates/specific/displayblock/blockchart/layout.js.twig b/templates/specific/displayblock/blockchart/layout.js.twig new file mode 100644 index 000000000..1947c7dcd --- /dev/null +++ b/templates/specific/displayblock/blockchart/layout.js.twig @@ -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 %} \ No newline at end of file