From 87e04547bda433f26a107b707ac535b2abfbbb93 Mon Sep 17 00:00:00 2001 From: Molkobain Date: Wed, 21 Jun 2023 15:57:35 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B06448=20-=20Restore=20sort=20order=20for?= =?UTF-8?q?=20\AttributeClass=20and=20\AttributeSetEnumPadded=20(eg.=20"Ta?= =?UTF-8?q?rget=20class"=20and=20"Context"=20in=20DataSynchronisation=20an?= =?UTF-8?q?d=20Trigger=20classes)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/trigger.class.inc.php | 2 +- core/valuesetdef.class.inc.php | 29 +++++++++++++++++------------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/core/trigger.class.inc.php b/core/trigger.class.inc.php index f3264146c..aefbc6050 100644 --- a/core/trigger.class.inc.php +++ b/core/trigger.class.inc.php @@ -50,7 +50,7 @@ abstract class Trigger extends cmdbAbstractObject MetaModel::Init_AddAttribute(new AttributeLinkedSetIndirect("action_list", array("linked_class" => "lnkTriggerAction", "ext_key_to_me" => "trigger_id", "ext_key_to_remote" => "action_id", "allowed_values" => null, "count_min" => 1, "count_max" => 0, "depends_on" => array()))); $aTags = ContextTag::GetTags(); - MetaModel::Init_AddAttribute(new AttributeEnumSet("context", array("allowed_values" => null, "possible_values" => new ValueSetEnumPadded($aTags), "sql" => "context", "depends_on" => array(), "is_null_allowed" => true, "max_items" => 12))); + MetaModel::Init_AddAttribute(new AttributeEnumSet("context", array("allowed_values" => null, "possible_values" => new ValueSetEnumPadded($aTags, true), "sql" => "context", "depends_on" => array(), "is_null_allowed" => true, "max_items" => 12))); // "complement" is a computed field, fed by Trigger sub-classes, in general in ComputeValues method, for eg. the TriggerOnObject fed it with target_class info MetaModel::Init_AddAttribute(new AttributeString("complement", array("allowed_values" => null, "sql" => "complement", "default_value" => null, "is_null_allowed" => true, "depends_on" => array()))); diff --git a/core/valuesetdef.class.inc.php b/core/valuesetdef.class.inc.php index ef9ba674d..c32766b0f 100644 --- a/core/valuesetdef.class.inc.php +++ b/core/valuesetdef.class.inc.php @@ -97,7 +97,7 @@ abstract class ValueSetDefinition public function SortValues(array &$aValues): void { // Sort alphabetically on values - asort($aValues); + natcasesort($aValues); } abstract protected function LoadValues($aArgs); @@ -465,11 +465,11 @@ class ValueSetEnum extends ValueSetDefinition { protected $m_values; /** - * @var bool $bSortByValue If true, values will be sorted at runtime, otherwise it is sorted at compile time in a predefined order. + * @var bool $bSortByValues If true, values will be sorted at runtime (on their values, not their keys), otherwise it is sorted at compile time in a predefined order. * {@see \MFCompiler::CompileAttributeEnumValues()} for complete reasons. * @since 3.1.0 N°1646 */ - protected bool $bSortByValue; + protected bool $bSortByValues; /** * @param array|string $Values @@ -477,20 +477,20 @@ class ValueSetEnum extends ValueSetDefinition * * @since 3.1.0 N°1646 Add $bLocalizedSort parameter */ - public function __construct($Values, bool $bSortByValue = false) + public function __construct($Values, bool $bSortByValues = false) { $this->m_values = $Values; - $this->bSortByValue = $bSortByValue; + $this->bSortByValues = $bSortByValues; } /** - * @see \ValueSetEnum::$bSortByValue + * @see \ValueSetEnum::$bSortByValues * @return bool * @since 3.1.0 N°1646 */ public function IsSortedByValues(): bool { - return $this->bSortByValue; + return $this->bSortByValues; } // Helper to export the data model @@ -507,8 +507,8 @@ class ValueSetEnum extends ValueSetDefinition public function SortValues(array &$aValues): void { // Force sort by values only if necessary - if ($this->bSortByValue) { - asort($aValues); + if ($this->bSortByValues) { + natcasesort($aValues); return; } @@ -548,9 +548,13 @@ class ValueSetEnum extends ValueSetDefinition class ValueSetEnumPadded extends ValueSetEnum { - public function __construct($Values) + /** + * @inheritDoc + * @since 3.1.0 N°6448 Add $bSortByValues parameter + */ + public function __construct($Values, bool $bSortByValues = false) { - parent::__construct($Values); + parent::__construct($Values, $bSortByValues); if (is_string($Values)) { $this->LoadValues(null); @@ -562,6 +566,7 @@ class ValueSetEnumPadded extends ValueSetEnum $aPaddedValues = array(); foreach ($this->m_aValues as $sKey => $sVal) { + // Pad keys to the min. length required by the \AttributeSet $sKey = str_pad($sKey, 3, '_', STR_PAD_LEFT); $aPaddedValues[$sKey] = $sVal; } @@ -610,7 +615,7 @@ class ValueSetEnumClasses extends ValueSetEnum public function __construct($sCategories = '', $sAdditionalValues = '') { $this->m_sCategories = $sCategories; - parent::__construct($sAdditionalValues); + parent::__construct($sAdditionalValues, true /* Classes are always sorted alphabetically */); } protected function LoadValues($aArgs)