Code

Fixed layout
[gosa.git] / gosa-core / include / class_pluglist.inc
index e4602283a8db3205f7f97ca20ee3c4fc43d4e9ad..6e1c059a76836d7cd55364a359649213835cc8b2 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-class pluglist {
+class pluglist 
+{
   var $index= 0;
-  var $menu= "";
-  var $iconmenu= "";
-  var $menuparts= array();
   var $config= NULL;
   var $dirlist= array();
   var $ui= NULL;
-  var $current= "";
   var $info= array();
   var $headlines = array();
-  var $allowed_plugins = array();
   var $silly_cache= array();
 
+  var $pluginList = array();
+
+  var $pathMenu = "";
+  var $menu= "";
+  var $iconmenu= "";
+
   function pluglist(&$config, &$ui)
   {
     $this->ui= &$ui;
     $this->config= &$config;
 
-    // Get list of plugin paths, this allows us to open the plugins main.inc if available.
-    $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data['MENU']);
+    // Reserve a special ACL will allows us to display plugins/addons whenever a user 
+    //  is able to login into gosa. E.g. some kind of welcome page. 
+    $this->info['all']= array();
+    $this->info['all']['plProvidedAcls']= array();
+    $this->info['all']['plDescription']= _("All objects in this category");
+    $this->info['all']['plSelfModify']= FALSE;
+    
+    $this->loadPluginList();
+  }
+
+  function loadPluginList()
+  {
+    $this->pluginList = array();
 
     // Detect installed plugins and their configuration, to be able to restrict access later.
     $classes= get_declared_classes();
@@ -50,38 +63,57 @@ class pluglist {
         $this->info[$cname]= call_user_func(array($cname, 'plInfo'));
       }
     }
-
-    // Reserve a special ACL will allows us to display plugins/addons whenever a user 
-    //  is able to login into gosa. E.g. some kind of welcome page. 
-    $this->info['all']= array();
-    $this->info['all']['plProvidedAcls']= array();
-    $this->info['all']['plDescription']= _("All objects in this category");
-    $this->info['all']['plSelfModify']= FALSE;
     
+    // First load Menu Plugins 
+    if(isset($this->config->data['MENU'])){
+      foreach($this->config->data['MENU'] as $section => $plugins){
+        foreach($plugins as $id => $plug){
+          if(!$this->registerPlugin($plug)){ 
+            unset($this->config->data['MENU'][$section][$id]); 
+          }
+        }
+      }
+    }
+    
+    // Now register pathMenu plugins
+    if(isset($this->config->data['PATHMENU'])){
+      foreach($this->config->data['PATHMENU'] as $id => $plugin){
+        if(!$this->registerPlugin($plugin)){
+          unset($this->config->data['PATHMENU'][$id]); 
+        } 
+      }
+    }
+
+    if(!session::is_set('maxC')){
+      session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
+    }
     $this->gen_menu();
+    $this->show_iconmenu();
+    $this->genPathMenu();
   }
 
 
-  /*! \brief    Detect plugin installation paths, by walking through the config. 
-   */
-  function get_plugins($list, &$config)
+  function registerPlugin($plug)
   {
     global $class_mapping;
-    if (!isset($config['CLASS'])){
-      if (is_array($config)){
-        foreach ($config as $val){
-          $list= $this->get_plugins($list, $val);
-        }
-      }
-    } else {
-      if (is_array($config) && isset($class_mapping[$config['CLASS']])){
-        $list[$this->index++]= dirname($class_mapping[$config['CLASS']]);
-      } else {
-        $list[$this->index++]= "";
-      }
-    }
 
-    return ($list);
+    if (!isset($plug['CLASS'])){
+      msg_dialog::display(
+          _("Configuration error"),
+          _("The configuration format has changed. Please re-run setup!"),
+          FATAL_ERROR_DIALOG);
+      exit();
+    }
+    if (!plugin_available($plug['CLASS'])){
+      return(FALSE);
+    }
+    if (!$this->check_access($plug['ACL'])){
+      return(FALSE);
+    }
+    $this->dirlist[$this->index] = dirname($class_mapping[$plug['CLASS']]);
+    $this->pluginList[$this->index] = $plug['CLASS'];
+    $this->index++;
+    return(TRUE);
   }
 
 
@@ -135,38 +167,6 @@ class pluglist {
   }
 
 
-  /*! \brief    Check the accessibility of the configured plugins.
-   *            We may simply have now permissions to access some plugins 
-   *             but some may be broken or missing!.
-   */
-  function checkMenu()
-  {
-    $cfg= &$this->config->data['MENU'];
-    foreach ($cfg as $headline => $plug){
-      $this->menuparts[_($headline)]= array();
-      foreach ($plug as $id => $info){
-        if (!isset($info['CLASS'])){
-          msg_dialog::display(
-              _("Configuration error"), 
-              _("The configuration format has changed. Please re-run setup!"), 
-              FATAL_ERROR_DIALOG);
-          exit();
-        }
-        if (!plugin_available($info['CLASS'])){
-          unset($cfg[$headline][$id]); 
-          continue; 
-        }
-        if (!$this->check_access($info['ACL'])){
-          unset($cfg[$headline][$id]);
-          continue; 
-        }
-      }
-    }
-    if(!session::is_set('maxC')){
-      session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP");
-    }
-  }
-
 
   /*! \brief    Generate the GOsa Main-Menu here (The menu on the left), 
    *             this usually only done once during login.
@@ -178,20 +178,22 @@ class pluglist {
   function gen_menu()
   {
     if ($this->menu == ""){
-      $this->checkMenu();
       $cfg= $this->config->data['MENU'];
       $menu = "\n<div class='navigation'>";
       foreach ($cfg as $headline => $plug){
 
         if(!count($plug)) continue;
+
         $menu.= "\n<div class='menu'>";
         $menu.= "\n <ul>";
         $menu.= "\n  <li class='menu-header'>"._($headline)."</li>";
         $id = 0;
         foreach ($plug as $info){
+
+          // Used to detect the last element in the menu
           $id ++;
+
           list($index, $title, $desc, $icon) = $this->getPlugData($info['CLASS']);
-          $this->allowed_plugins[$index] = $index;
           $class= "";
           if($id == count($plug)) $class=" class='menu-last' \n   ";
           $menu .=  "\n  <li id='plugMenuId_{$index}' $class onClick='return openPlugin({$index});'>".$title."</li>";
@@ -266,12 +268,16 @@ class pluglist {
             $this->iconmenu .= "\n  <div class='clear'></div>\n";
           }
 
-          $this->iconmenu.= "\n  <div class='container-element' style='width: 25%;' onclick='openPlugin({$index})'> ";
-          $this->iconmenu.= "\n   <div class='icon-menu-item' style='background-image: url({$icon});'>";
+
+          $this->iconmenu.= "\n  <div class='icon-menu-item' style='width: 25%;' onclick='openPlugin({$index})'>";
+          /* $this->iconmenu.= "\n   ".image($icon); */
+          $this->iconmenu.= "\n   <div class='img' style='width:48px;height:48px;background-image: url({$icon});'></div>";
+          $this->iconmenu.= "\n   <div class='dsc'>";
           $this->iconmenu.= "\n    <h1>{$title}</h1>";
           $this->iconmenu.= "\n    <p>{$desc}</p>";
           $this->iconmenu.= "\n   </div>";
-          $this->iconmenu.= "\n  </div>\n";
+          $this->iconmenu.= "\n  </div>";
+
           $col++ ;
         }
         $add_hr = TRUE;
@@ -283,8 +289,7 @@ class pluglist {
 
   function genPathMenu()
   {
-    if(1 | empty($this->pathMenu)){
-
+    if(empty($this->pathMenu)){
       $this->pathMenu = 
         "\n    <div class='plugin-path'>".
         "\n     <ul class='path-navigation'>".
@@ -293,18 +298,13 @@ class pluglist {
         "\n      </li>".
         "\n      <li class='left'>Welcome to GOsa</li>";
 
-      $cfg= &$this->config->data['PATHMENU'];
-      $rcfg = array_reverse($cfg);
-      foreach($rcfg as $id => $plug){
-
-        // Do not add inaccessible plugins
-        if (!$this->check_access($plug['ACL'])){
-          unset($rcfg[$id]);
-          continue; 
+      if(isset($this->config->data['PATHMENU'])){
+        $cfg= &$this->config->data['PATHMENU'];
+        $rcfg = array_reverse($cfg);
+        foreach($rcfg as $id => $plug){
+          list($index, $title, $desc, $icon) = $this->getPlugData($plug['CLASS']);
+          $this->pathMenu.= "\n     <li class='right left-border' onClick='openPlugin({$index})'>{$title}</li>";
         }
-
-        list($index, $title, $desc, $icon) = $this->getPlugData($plug['CLASS']);
-        $this->pathMenu.= "\n     <li class='right left-border'>{$title}</li>";
       }
       $this->pathMenu.= "\n    </ul>";
       $this->pathMenu.= "\n    </div>";
@@ -358,16 +358,7 @@ class pluglist {
    */
   function get_index($class)
   {
-    /* Search for plugin index (id), identify entry by path && class */
-    $data = $this->config->data['MENU'];
-    foreach($data as $section => $plugins){
-      foreach($plugins as $key => $plugin)    {
-        if($plugin['CLASS'] == $class){
-          return($key);
-        }
-      }
-    }
-    return (0);
+    return (array_search($class, $this->pluginList));
   }
 
 
@@ -378,7 +369,7 @@ class pluglist {
    */
   function plugin_access_allowed($plug_id)
   {
-    return(isset($this->allowed_plugins[$plug_id]));
+    return(isset($this->pluginList[$plug_id]));
   }