From 2d08d6bbfe6c45fc2d5d34abed822515d12f5fa3 Mon Sep 17 00:00:00 2001 From: hickert Date: Fri, 26 Feb 2010 16:22:09 +0000 Subject: [PATCH] Updated pluglist git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@15764 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/include/class_pluglist.inc | 145 ++++++++++++--------------- 1 file changed, 63 insertions(+), 82 deletions(-) diff --git a/gosa-core/include/class_pluglist.inc b/gosa-core/include/class_pluglist.inc index 81f9a8d9f..b3f70b41b 100644 --- a/gosa-core/include/class_pluglist.inc +++ b/gosa-core/include/class_pluglist.inc @@ -20,7 +20,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -class pluglist { +class pluglist +{ var $index= 0; var $menu= ""; var $iconmenu= ""; @@ -31,17 +32,28 @@ class pluglist { var $current= ""; var $info= array(); var $headlines = array(); - var $allowed_plugins = array(); var $silly_cache= array(); + var $pluginList = array(); + 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']); - $this->dirlist= array_merge($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(); @@ -51,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); } @@ -136,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. @@ -179,12 +178,12 @@ class pluglist { function gen_menu() { if ($this->menu == ""){ - $this->checkMenu(); $cfg= $this->config->data['MENU']; $menu = "\n