From c95fec8ab44da9151962474127711f3363981f7e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come@opensides.be>
Date: Tue, 17 Sep 2019 12:08:50 +0200
Subject: [PATCH] :sparkles: feat(ACL) Sort classes correctly in ACL role
 edition dialog

issue #6028
---
 include/class_acl.inc                         | 24 -------------------
 include/class_pluglist.inc                    |  4 ++++
 .../admin/aclrole/class_aclEditionDialog.inc  |  2 --
 3 files changed, 4 insertions(+), 26 deletions(-)

diff --git a/include/class_acl.inc b/include/class_acl.inc
index 1fc26706d..67fb4925c 100644
--- a/include/class_acl.inc
+++ b/include/class_acl.inc
@@ -46,30 +46,6 @@ class acl
     ];
   }
 
-  /*!
-   *  \brief Function sort an array by elements priority
-   *
-   *  \param Array $list Array to be sorted
-   */
-  static function sort_by_priority ($list)
-  {
-    uksort($list,
-      function ($a, $b)
-      {
-        $infos_a = pluglist::pluginInfos(preg_replace('|^[^/]*/|', '', $a));
-        $infos_b = pluglist::pluginInfos(preg_replace('|^[^/]*/|', '', $b));
-        $pa = (isset($infos_a['plPriority']) ? $infos_a['plPriority'] : 0);
-        $pb = (isset($infos_b['plPriority']) ? $infos_b['plPriority'] : 0);
-        if ($pa == $pb) {
-          return 0;
-        }
-        return ($pa < $pb ? -1 : 1);
-      }
-    );
-
-    return $list;
-  }
-
   /*!
    * \brief Explode a role
    *
diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc
index 986c8b9fe..99b917fad 100644
--- a/include/class_pluglist.inc
+++ b/include/class_pluglist.inc
@@ -161,6 +161,10 @@ class pluglist
         if (isset($infos['plFilter'])) {
           $infos['plFilterObject'] = ldapFilter::parse($infos['plFilter']);
         }
+        if (isset($infos['plObjectType']) && !isset($infos['plPriority']) && !is_numeric(key($infos['plObjectType']))) {
+          /* Set main tab priority to 0 */
+          $infos['plPriority'] = 0;
+        }
         $infos['plForeignRefs']         = [];
         $infos['INDEX']                 = $index;
         $this->info[$cname]             = $infos;
diff --git a/plugins/admin/aclrole/class_aclEditionDialog.inc b/plugins/admin/aclrole/class_aclEditionDialog.inc
index aad8aa9e9..454508826 100644
--- a/plugins/admin/aclrole/class_aclEditionDialog.inc
+++ b/plugins/admin/aclrole/class_aclEditionDialog.inc
@@ -272,7 +272,6 @@ class ACLEditionDialog extends GenericDialog
     $cols     = 3;
     $tmp      = session::get('plist');
     $plist    = $tmp->info;
-    asort($plist);
 
     /* Add select all/none buttons */
     $style = 'style="width:100px;"';
@@ -305,7 +304,6 @@ class ACLEditionDialog extends GenericDialog
     $display .= '<input '.$style.' type="button" name="set_true_all_write"  onClick="acl_set_all(\'[^0]_w$\',true);"  value="W+"/>';
     $display .= '<input '.$style.' type="button" name="set_false_all_write" onClick="acl_set_all(\'[^0]_w$\',false);" value="W-"/>';
 
-    $list = acl::sort_by_priority($list);
     foreach ($list as $key => $name) {
       /* Create sub acl if it does not exist */
       if (!isset($this->aclContents[$key])) {
-- 
GitLab