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
+
+