From 088f08b31535f6f552ca89516b6f8f92e8355303 Mon Sep 17 00:00:00 2001 From: Stephen Abello Date: Wed, 14 Aug 2019 12:27:47 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B0967=20Portal:=20Browse=20brick=20actions?= =?UTF-8?q?=20are=20now=20ordered=20following=20a=20rank=20tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../portal/src/Brick/BrowseBrick.php | 31 +++++++++++++++++++ .../itop-tickets/datamodel.itop-tickets.xml | 2 ++ 2 files changed, 33 insertions(+) diff --git a/datamodels/2.x/itop-portal-base/portal/src/Brick/BrowseBrick.php b/datamodels/2.x/itop-portal-base/portal/src/Brick/BrowseBrick.php index 97988c9c97..c10f2c6a05 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Brick/BrowseBrick.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Brick/BrowseBrick.php @@ -112,6 +112,31 @@ class BrowseBrick extends PortalBrick $this->iDefaultListLength = static::DEFAULT_LIST_LENGTH; } + /** + * Compare function to sort actions by their rank attribute + * + * @param array $aAction1 + * @param array $aAction2 + * + * @return int + */ + public static function CompareActionsByRank($aAction1, $aAction2) + { + $bIsAction1RankSet = array_key_exists('rank', $aAction1); + $bIsAction2RankSet = array_key_exists('rank', $aAction2); + + if($bIsAction1RankSet && $bIsAction2RankSet) + { + //If a1 == a2 return 0, if a1 > a2 return 1 else return -1 + return ($aAction1['rank'] === $aAction2['rank'] ? 0 : ($aAction1['rank'] > $aAction2['rank'] ? 1 : -1)); + } + else + { + //If a1 == a2 == null return 0, if a2 is null and not a1 return 1 else return -1 + return ($bIsAction1RankSet === $bIsAction2RankSet ? 0 : ($bIsAction1RankSet ? 1 : -1)); + } + } + /** * Returns the brick levels * @@ -548,6 +573,11 @@ class BrowseBrick extends PortalBrick throw new DOMFormatException('BrowseBrick : '.$sTagName.'/action/opening_target has a wrong value. "'.$aTmpAction['opening_target'].'" given, '.implode('|', static::$aOpeningTargets).' expected.', null, null, $oActionOpeningTargetNode); } + $oActionRankNode = $oActionNode->GetOptionalElement('rank'); + if ($oActionRankNode !== null) + { + $aTmpAction['rank'] = (int)$oActionRankNode->GetText(); + } // Action rules /** @var \Combodo\iTop\DesignElement $oRuleNode */ foreach ($oActionNode->GetNodes('./rules/rule') as $oRuleNode) @@ -571,6 +601,7 @@ class BrowseBrick extends PortalBrick null, null, $oActionNode); } } + uasort($aLevel[$sTagName], "static::CompareActionsByRank"); } break; diff --git a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml index cc75c82687..7038668c73 100755 --- a/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml +++ b/datamodels/2.x/itop-tickets/datamodel.itop-tickets.xml @@ -1165,6 +1165,8 @@ fc fc-new-request fc-1-6x fc-flip-horizontal + +