]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add second dimensional sorting and use it for sorting jobstatus in sources...
authorMarcin Haba <marcin.haba@bacula.pl>
Fri, 7 Jul 2023 11:52:14 +0000 (13:52 +0200)
committerMarcin Haba <marcin.haba@bacula.pl>
Fri, 7 Jul 2023 11:52:14 +0000 (13:52 +0200)
gui/baculum/protected/API/Modules/SourceManager.php
gui/baculum/protected/Common/Modules/Miscellaneous.php

index 203ed61766b0818117652c0a03b7b0715013c628..848ac2ce5182896a8348c93e1e62027cc7188277 100644 (file)
@@ -201,7 +201,22 @@ class SourceManager extends APIModule {
                // Sort items if needed
                if (is_string($order_by)) {
                        // Sort all items
-                       $misc->sortResultsByField($sources, $order_by, $order_direction);
+                       if ($order_by == 'jobstatus') {
+                               // for jobstatus sort also by joberrors
+                               $misc::sortResultsByField(
+                                       $sources,
+                                       $order_by,
+                                       $order_direction,
+                                       'joberrors',
+                                       $misc::ORDER_DIRECTION_ASC
+                               );
+                       } else {
+                               $misc::sortResultsByField(
+                                       $sources,
+                                       $order_by,
+                                       $order_direction
+                               );
+                       }
                }
 
                if ($mode == self::SOURCE_RESULT_MODE_OVERVIEW) {
index 5adc664994b192a5efdb899cdbc32f0a694799f3..d6ad5c7638e10b63f599e46de31aa1acebff0fc5 100644 (file)
@@ -346,13 +346,26 @@ class Miscellaneous extends TModule {
                return $jobid;
        }
 
-       public function sortResultsByField(&$result, $order_by, $order_direction) {
+       public static function sortResultsByField(&$result, $order_by, $order_direction, $sec_order_by = '', $sec_order_direction = '') {
                $order_by = strtolower($order_by);
                $order_direction = strtolower($order_direction);
-               $sort_by_func = function($a, $b) use ($order_by, $order_direction) {
-                       $cmp = strnatcasecmp($a[$order_by], $b[$order_by]);
-                       if ($order_direction === self::ORDER_DIRECTION_DESC) {
-                               $cmp = -$cmp;
+               $sec_order_by = strtolower($sec_order_by);
+               $sec_order_direction = strtolower($sec_order_direction);
+               $sort_by_func = function($a, $b) use ($order_by, $order_direction, $sec_order_by, $sec_order_direction) {
+                       $cmp = 0;
+                       if ($a[$order_by] == $b[$order_by]) {
+                               if ($sec_order_by && $sec_order_direction) {
+                                       if ($sec_order_direction === self::ORDER_DIRECTION_ASC) {
+                                               $cmp = strnatcasecmp($a[$sec_order_by], $b[$sec_order_by]);
+                                       } elseif ($sec_order_direction === self::ORDER_DIRECTION_DESC) {
+                                               $cmp = strnatcasecmp($b[$sec_order_by], $a[$sec_order_by]);
+                                       }
+                               }
+                       } else {
+                               $cmp = strnatcasecmp($a[$order_by], $b[$order_by]);
+                               if ($order_direction === self::ORDER_DIRECTION_DESC) {
+                                       $cmp = -$cmp;
+                               }
                        }
                        return $cmp;
                };