From e8d20958169526d0753165253ebdf39d2c6f0ff2 Mon Sep 17 00:00:00 2001 From: ldestailleur Date: Mon, 15 Sep 2025 19:28:38 +0200 Subject: [PATCH] NEW dol_sort_array can be used with 2 sorting criteria. --- htdocs/asset/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/bom/tpl/linkedobjectblock.tpl.php | 2 +- .../comm/propal/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/commande/tpl/linkedobjectblock.tpl.php | 2 +- .../facture/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/core/lib/functions.lib.php | 22 ++++++++++++++----- htdocs/delivery/tpl/linkedobjectblock.tpl.php | 2 +- .../fichinter/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/mrp/tpl/linkedobjectblock.tpl.php | 2 +- .../tasks/tpl/linkedobjectblock.tpl.php | 2 +- .../reception/tpl/linkedobjectblock.tpl.php | 2 +- htdocs/theme/eldy/info-box.inc.php | 4 ++-- htdocs/ticket/tpl/linkedobjectblock.tpl.php | 2 +- 13 files changed, 30 insertions(+), 18 deletions(-) diff --git a/htdocs/asset/tpl/linkedobjectblock.tpl.php b/htdocs/asset/tpl/linkedobjectblock.tpl.php index f0cb520e8eb..d8a556b4069 100644 --- a/htdocs/asset/tpl/linkedobjectblock.tpl.php +++ b/htdocs/asset/tpl/linkedobjectblock.tpl.php @@ -50,7 +50,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("assets"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Asset[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Asset[] $linkedObjectBlock */ diff --git a/htdocs/bom/tpl/linkedobjectblock.tpl.php b/htdocs/bom/tpl/linkedobjectblock.tpl.php index 1f6b14a46cb..7189ce53ac5 100644 --- a/htdocs/bom/tpl/linkedobjectblock.tpl.php +++ b/htdocs/bom/tpl/linkedobjectblock.tpl.php @@ -45,7 +45,7 @@ $langs->load("bom"); '@phan-var-force BOM[] $linkedObjectBlock'; // Type before use /** @var BOM[] $linkedObjectBlock */ -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force BOM[] $linkedObjectBlock'; // Type after dol_sort_array which looses typing /** @var BOM[] $linkedObjectBlock */ diff --git a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php index 014501169ed..11accaf3601 100644 --- a/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php +++ b/htdocs/comm/propal/tpl/linkedobjectblock.tpl.php @@ -47,7 +47,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("propal"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Propal[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Propal[] $linkedObjectBlock */ diff --git a/htdocs/commande/tpl/linkedobjectblock.tpl.php b/htdocs/commande/tpl/linkedobjectblock.tpl.php index 769096e93cc..01f5d10fbba 100644 --- a/htdocs/commande/tpl/linkedobjectblock.tpl.php +++ b/htdocs/commande/tpl/linkedobjectblock.tpl.php @@ -42,7 +42,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("orders"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Commande[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Commande[] $linkedObjectBlock */ diff --git a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php index 543b668a7df..9f614b95f16 100644 --- a/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php +++ b/htdocs/compta/facture/tpl/linkedobjectblock.tpl.php @@ -39,7 +39,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("bills"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Facture[] $linkedObjectBlock'; /** @var Facture[] $linkedObjectBlock */ diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index b8eabd33ded..db37543166e 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -11317,7 +11317,7 @@ function dol_htmloutput_errors($mesgstring = '', $mesgarray = array(), $keepembe * @param array $array Array to sort (array of array('key1'=>val1,'key2'=>val2,'key3'...) or array of objects) * @phpstan-param T $array * @phan-param T $array - * @param string $index Key in array to use for sorting criteria + * @param string $index Key in array to use for sorting criteria. We can have several keys separated by a comma but we can have only 1 sorting order. * @param string $order Sort order ('asc' or 'desc') * @param int<-1,1> $natsort If values are strings (I said value not type): 0=Use alphabetical order, 1=use "natural" sort (natsort), -1=Force alpha order * If values are numeric (I said value not type): 0=Use numeric order (even if type is string) so use a "natural" sort, 1=use "natural" sort too (same than 0), -1=Force alphabetical order @@ -11336,19 +11336,31 @@ function dol_sort_array(&$array, $index, $order = 'asc', $natsort = 0, $case_sen if (is_array($array)) { $sizearray = count($array); if ($sizearray > 0) { + // Build a temp array with sorting key as value $temp = array(); foreach (array_keys($array) as $key) { + $tmpmultikey = explode(',', $index); + $newindex = $tmpmultikey[0]; if (is_object($array[$key])) { - $temp[$key] = empty($array[$key]->$index) ? 0 : $array[$key]->$index; + $temp[$key] = empty($array[$key]->$newindex) ? 0 : $array[$key]->$newindex; + // Add other keys + if (!empty($tmpmultikey[1])) { + $newindex = $tmpmultikey[1]; + $temp[$key] .= '__'.(empty($array[$key]->$newindex) ? 0 : $array[$key]->$newindex); + } } else { // @phan-suppress-next-line PhanTypeArraySuspiciousNullable,PhanTypeArraySuspicious,PhanTypeMismatchDimFetch - $temp[$key] = empty($array[$key][$index]) ? 0 : $array[$key][$index]; + $temp[$key] = empty($array[$key][$newindex]) ? 0 : $array[$key][$newindex]; + // Add other keys + if (!empty($tmpmultikey[1])) { + $newindex = $tmpmultikey[1]; + $temp[$key] .= '__'.(empty($array[$key][$newindex]) ? 0 : $array[$key][$newindex]); + } } if ($natsort == -1) { - $temp[$key] = '___' . $temp[$key]; // We add a string at begin of value to force an alpha order when using asort. + $temp[$key] = '___'.$temp[$key]; // We add a string at begin of value to force an alpha order when using asort. } } - if (empty($natsort) || $natsort == -1) { if ($order == 'asc') { asort($temp); diff --git a/htdocs/delivery/tpl/linkedobjectblock.tpl.php b/htdocs/delivery/tpl/linkedobjectblock.tpl.php index 9537197e476..6ae82e78a8e 100644 --- a/htdocs/delivery/tpl/linkedobjectblock.tpl.php +++ b/htdocs/delivery/tpl/linkedobjectblock.tpl.php @@ -42,7 +42,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load('sendings'); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force CommonObject[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Delivery[] $linkedObjectBlock */ diff --git a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php index 8a06051278a..f2c08825031 100644 --- a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php +++ b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php @@ -41,7 +41,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; $langs->load("interventions"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Fichinter[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Fichinter[] $linkedObjectBlock */ diff --git a/htdocs/mrp/tpl/linkedobjectblock.tpl.php b/htdocs/mrp/tpl/linkedobjectblock.tpl.php index ad83dfb32d5..ddf277d6fe0 100644 --- a/htdocs/mrp/tpl/linkedobjectblock.tpl.php +++ b/htdocs/mrp/tpl/linkedobjectblock.tpl.php @@ -97,7 +97,7 @@ if ($object->element == 'mo') { } } } else { - $linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); + $linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force array $linkedObjectBlock'; $total = 0; $ilink = 0; diff --git a/htdocs/projet/tasks/tpl/linkedobjectblock.tpl.php b/htdocs/projet/tasks/tpl/linkedobjectblock.tpl.php index 929d54a7759..1c28eccda55 100644 --- a/htdocs/projet/tasks/tpl/linkedobjectblock.tpl.php +++ b/htdocs/projet/tasks/tpl/linkedobjectblock.tpl.php @@ -47,7 +47,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("tasks"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force CommonObject[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Task[] $linkedObjectBlock */ diff --git a/htdocs/reception/tpl/linkedobjectblock.tpl.php b/htdocs/reception/tpl/linkedobjectblock.tpl.php index fd54ae21845..e6e8f5f2f9b 100644 --- a/htdocs/reception/tpl/linkedobjectblock.tpl.php +++ b/htdocs/reception/tpl/linkedobjectblock.tpl.php @@ -47,7 +47,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load("receptions"); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'date,ref', 'desc', 0, 0, 1); '@phan-var-force Reception[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Reception[] $linkedObjectBlock */ diff --git a/htdocs/theme/eldy/info-box.inc.php b/htdocs/theme/eldy/info-box.inc.php index 1870d4e868a..4b5d7baf845 100644 --- a/htdocs/theme/eldy/info-box.inc.php +++ b/htdocs/theme/eldy/info-box.inc.php @@ -39,8 +39,8 @@ if (!defined('ISLOADEDBYSTEELSHEET')) { width: 100%; box-shadow: 1px 1px 20px rgba(192, 192, 192, 0.2); border-radius: 2px; - /* border: 1px solid #e9e9e9; */ - border: 1px solid var(--colorbacktitle1); + border: 1px solid #e9e9e9; + /* border: 1px solid var(--colorbacktitle1); */ margin-bottom: 15px; } .info-box.info-box-sm { diff --git a/htdocs/ticket/tpl/linkedobjectblock.tpl.php b/htdocs/ticket/tpl/linkedobjectblock.tpl.php index c86c7bec5aa..c05549bd095 100644 --- a/htdocs/ticket/tpl/linkedobjectblock.tpl.php +++ b/htdocs/ticket/tpl/linkedobjectblock.tpl.php @@ -42,7 +42,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock']; // Load translation files required by the page $langs->load('ticket'); -$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'datec', 'desc', 0, 0, 1); +$linkedObjectBlock = dol_sort_array($linkedObjectBlock, 'datec,ref', 'desc', 0, 0, 1); '@phan-var-force Ticket[] $linkedObjectBlock'; // Repeat because type lost after dol_sort_array) /** @var Ticket[] $linkedObjectBlock */