From b6230ed486cd5a63186860f5333c8852a6104618 Mon Sep 17 00:00:00 2001 From: jf-cbd Date: Fri, 23 Feb 2024 10:46:22 +0100 Subject: [PATCH 1/4] =?UTF-8?q?:bug:=20N=C2=B07284=20-=20Themehandler=20en?= =?UTF-8?q?hancement=20-=20use=20of=20utils::RealPath=20instead=20of=20php?= =?UTF-8?q?'s=20method?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/themehandler.class.inc.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index 37e71f37e..b9f869767 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -536,7 +536,7 @@ CSS; if (static::HasImageExtension($sImg) && ! array_key_exists($sImg, $aImages)) { - $sFilePath = realpath($sImg); + $sFilePath = utils::RealPath($sImg, APPROOT); if ($sFilePath !== false) { $sFilePathWithSlashes = str_replace('\\', '/', $sFilePath); $aImages[$sImg] = $sFilePathWithSlashes; @@ -544,7 +544,7 @@ CSS; } $sCanonicalPath = static::CanonicalizePath($sTargetThemeFolderPath.'/'.$sImg); - $sFilePath = realpath($sCanonicalPath); + $sFilePath = utils::RealPath($sCanonicalPath, APPROOT); if ($sFilePath !== false) { $sFilePathWithSlashes = str_replace('\\', '/', $sFilePath); $aImages[$sImg] = $sFilePathWithSlashes; From 3d360e99da57bbae758d8bc35ab9d86c1d055366 Mon Sep 17 00:00:00 2001 From: vdumas Date: Tue, 27 Feb 2024 14:53:07 +0100 Subject: [PATCH 2/4] =?UTF-8?q?N=C2=B04314=20-=20Fix=20Uniqueness=20rules?= =?UTF-8?q?=20not=20working=20with=20Silo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/dbobject.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/core/dbobject.class.php b/core/dbobject.class.php index 3924228e1..52deb3868 100644 --- a/core/dbobject.class.php +++ b/core/dbobject.class.php @@ -2311,6 +2311,7 @@ abstract class DBObject implements iDisplay protected function HasObjectsInDbForUniquenessRule($sUniquenessRuleId, $aUniquenessRuleProperties) { $oUniquenessQuery = $this->GetSearchForUniquenessRule($sUniquenessRuleId, $aUniquenessRuleProperties); + $oUniquenessQuery->AllowAllData(); $oUniquenessDuplicates = new DBObjectSet($oUniquenessQuery); $bHasDuplicates = $oUniquenessDuplicates->CountExceeds(0); From 0546a7b82bf47803573f30aca932847e8ad78e1c Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:06:12 +0100 Subject: [PATCH 3/4] =?UTF-8?q?N=C2=B06808=20-=20Rank=20management=20(orde?= =?UTF-8?q?r)=20in=20iTop=20actions=20(#558)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/trigger.class.inc.php | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/core/trigger.class.inc.php b/core/trigger.class.inc.php index 705c24a33..19bb3a7c3 100644 --- a/core/trigger.class.inc.php +++ b/core/trigger.class.inc.php @@ -114,17 +114,26 @@ abstract class Trigger extends cmdbAbstractObject // Find the related actions $oLinkedActions = $this->Get('action_list'); - while ($oLink = $oLinkedActions->Fetch()) - { - /** @var \DBObject $oLink */ - $iActionId = $oLink->Get('action_id'); - /** @var \Action $oAction */ - $oAction = MetaModel::GetObject('Action', $iActionId); - if ($oAction->IsActive()) - { - $oKPI = new ExecutionKPI(); - $oAction->DoExecute($this, $aContextArgs); - $oKPI->ComputeStatsForExtension($oAction, 'DoExecute'); + + // Order actions as expected + $aActionListOrdered = []; + while ($oLink = $oLinkedActions->Fetch()) { + $aActionListOrdered[(int) $oLink->Get('order')][] = $oLink; + } + ksort($aActionListOrdered); + + // Execute actions + foreach ($aActionListOrdered as $aActionSubList) { + foreach ($aActionSubList as $oLink) /** @var \DBObject $oLink */ { + /** @var \DBObject $oLink */ + $iActionId = $oLink->Get('action_id'); + /** @var \Action $oAction */ + $oAction = MetaModel::GetObject('Action', $iActionId); + if ($oAction->IsActive()) { + $oKPI = new ExecutionKPI(); + $oAction->DoExecute($this, $aContextArgs); + $oKPI->ComputeStatsForExtension($oAction, 'DoExecute'); + } } } } From b67057c863dcb794822c210bad73a2d57e1000f0 Mon Sep 17 00:00:00 2001 From: Anne-Catherine <57360138+accognet@users.noreply.github.com> Date: Tue, 27 Feb 2024 17:34:53 +0100 Subject: [PATCH 4/4] =?UTF-8?q?N=C2=B07163=20-=20Avoid=20having=20an=20emp?= =?UTF-8?q?ty=20list=20when=20"items=20per=20page"=20is=20set=20to=200=20a?= =?UTF-8?q?s=20it=20makes=20no=20sense=20(#616)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- css/backoffice/components/datatable/_datatableconfig.scss | 3 +++ js/dataTables.settings.js | 5 +++++ sources/Controller/AjaxRenderController.php | 4 ++-- templates/base/components/datatable/config/layout.html.twig | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/css/backoffice/components/datatable/_datatableconfig.scss b/css/backoffice/components/datatable/_datatableconfig.scss index 73be36185..81cca6339 100644 --- a/css/backoffice/components/datatable/_datatableconfig.scss +++ b/css/backoffice/components/datatable/_datatableconfig.scss @@ -22,6 +22,9 @@ $ibo-datatableconfig--settings-panel--option--margin-right: $ibo-spacing-200 !de } .ibo-datatableconfig--attributes-panel--per-page--input{ margin: $ibo-datatableconfig--attributes-panel--per-page--input--margin-y $ibo-datatableconfig--attributes-panel--per-page--input--margin-x; + max-width: 4em; + @extend .ibo-input; + display: initial; } .ibo-datatableconfig--settings-panel .ibo-panel--body{ diff --git a/js/dataTables.settings.js b/js/dataTables.settings.js index 77e9cc57e..e37e872d8 100644 --- a/js/dataTables.settings.js +++ b/js/dataTables.settings.js @@ -186,6 +186,11 @@ $(function () { var sSortDirection = 'asc'; var oColumns = $('#datatable_dlg_'+this.options.sListId).find(':itop-fieldsorter').fieldsorter('get_params'); var iPageSize = parseInt($('#datatable_dlg_'+this.options.sListId+' input[name="page_size"]').val(), 10); + // Fallback to default page size in case of invalid number + if (isNaN(iPageSize) || iPageSize <= 0) { + iPageSize = this.options.oDefaultSettings.iDefaultPageSize; + $('#datatable_dlg_'+this.options.sListId+' input[name="page_size"]').val(iPageSize); + } oOptions = {oColumns: oColumns, iPageSize: iPageSize, iDefaultPageSize: iPageSize }; } diff --git a/sources/Controller/AjaxRenderController.php b/sources/Controller/AjaxRenderController.php index 0e7651dd4..4b7f4630c 100644 --- a/sources/Controller/AjaxRenderController.php +++ b/sources/Controller/AjaxRenderController.php @@ -278,7 +278,7 @@ class AjaxRenderController } $sTableId = utils::ReadParam('list_id', ''); - $iLength = utils::ReadParam('end', 10); + $iLength = utils::ReadParam('end', 10, false, utils::ENUM_SANITIZATION_FILTER_INTEGER); $aColumns = utils::ReadParam('columns', array(), false, 'raw_data'); $sSelectMode = utils::ReadParam('select_mode', ''); $aClassAliases = utils::ReadParam('class_aliases', array()); @@ -499,7 +499,7 @@ class AjaxRenderController */ public static function DatatableSaveSettings(): bool { - $iPageSize = utils::ReadParam('page_size', 10); + $iPageSize = utils::ReadParam('page_size', 10, false, utils::ENUM_SANITIZATION_FILTER_INTEGER); $sTableId = utils::ReadParam('table_id', null, false, 'raw_data'); $bSaveAsDefaults = (utils::ReadParam('defaults', 'true') == 'true'); $aClassAliases = utils::ReadParam('class_aliases', array(), false, 'raw_data'); diff --git a/templates/base/components/datatable/config/layout.html.twig b/templates/base/components/datatable/config/layout.html.twig index a40357bbc..f28b1796d 100644 --- a/templates/base/components/datatable/config/layout.html.twig +++ b/templates/base/components/datatable/config/layout.html.twig @@ -20,7 +20,7 @@ -

{{ 'UI:Display_X_ItemsPerPage_prefix'|dict_s }}{{ 'UI:Display_X_ItemsPerPage_suffix'|dict_s }}

+

{{ 'UI:Display_X_ItemsPerPage_prefix'|dict_s }}{{ 'UI:Display_X_ItemsPerPage_suffix'|dict_s }}