From 5380dfa886f2a6f0b13d7bcf8ee05e6b4e924eaa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=B4me=20Chilliet?= <come@opensides.be>
Date: Thu, 8 Jun 2017 16:47:36 +0200
Subject: [PATCH] Fixes #5568 Fixing language setting and menu reloading

---
 include/class_pluglist.inc | 12 ++----------
 include/functions.inc      | 11 ++++++-----
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc
index c8248aa3a..974580ead 100644
--- a/include/class_pluglist.inc
+++ b/include/class_pluglist.inc
@@ -62,6 +62,8 @@ class pluglist {
 
     /* Fill info part of pluglist */
     $classes = get_declared_classes();
+    /* To avoid plugins changing index when reloading */
+    sort($classes);
 
     $index = 0;
     $depends_infos    = array();
@@ -477,16 +479,6 @@ class pluglist {
     return isset($this->allowed_plugins[$plug_id]);
   }
 
-
-  /*!
-   * \brief Force the menu to be recreated
-   */
-  function reset_menus()
-  {
-    $this->menu     = "";
-    $this->iconmenu = "";
-  }
-
   static function pluginInfos($cname)
   {
     $plist = session::global_get('plist');
diff --git a/include/functions.inc b/include/functions.inc
index 458607756..812bef3f7 100644
--- a/include/functions.inc
+++ b/include/functions.inc
@@ -159,7 +159,7 @@ function plugin_available($plugin)
  */
 function load_plist ($ldap_available = TRUE)
 {
-  global $config;
+  global $config, $plist;
   if (!session::global_is_set('plist')) {
     /* Initially load all classes */
     load_all_classes();
@@ -2570,15 +2570,16 @@ function initLanguage($lang = NULL)
 
   $ret = FALSE;
 
-  /* Reset menu cache if language changed */
+  /* Reset plist cache if language changed */
   if ((!session::global_is_set('lang')) || (session::global_get('lang') != $lang)) {
     $ret = TRUE;
     if (session::global_is_set('plist')) {
       if ($_SERVER['REQUEST_METHOD'] != 'POST') {
-        @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, session::global_get('lang'), 'Plist already loaded with language ');
+        @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, session::global_get('lang'), 'Plist already loaded with language');
       }
-      $plist = session::global_get('plist');
-      $plist->reset_menus();
+      session::global_un_set('plist');
+      session::global_set('lang', $lang);
+      load_plist();
     }
   }
 
-- 
GitLab