X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_pluglist.inc;h=ba3288a63de2bcf49940029154be2c300c95c3b1;hb=0a8eb52048cd81d884b8e3f63613dc70e444fc27;hp=87dcd769368812892d2e5496fbea44c3817a496a;hpb=344a6a0362a6073ba639203b0dc6af354e458d7c;p=gosa.git diff --git a/gosa-core/include/class_pluglist.inc b/gosa-core/include/class_pluglist.inc index 87dcd7693..ba3288a63 100644 --- a/gosa-core/include/class_pluglist.inc +++ b/gosa-core/include/class_pluglist.inc @@ -1,24 +1,25 @@ config= &$config; /* Create dirlist for all plugins */ - $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data); + $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data['MENU']); /* Fill info part of pluglist */ $classes= get_declared_classes(); @@ -58,56 +60,68 @@ class pluglist { function get_plugins($list, &$config) { + global $class_mapping; + /* Error reporting, because I'm getting strange messages in PHP 4.2.x */ - if (!isset($config['PATH']) && !isset($config['CLASS'])){ + if (!isset($config['CLASS'])){ if (is_array($config)){ foreach ($config as $val){ $list= $this->get_plugins($list, $val); } } } else { - if (isset ($config['PATH']) && is_array($config)){ - $list[$this->index++]= $config['PATH']; - if (isset($config['CLASS'])){ - $class= $config['CLASS']; - } + if (is_array($config) && isset($class_mapping[$config['CLASS']])){ + $list[$this->index++]= dirname($class_mapping[$config['CLASS']]); + } else { + $list[$this->index++]= ""; } } return ($list); } + + /*! \brief Check whether we are allowed to modify the given acl or nit.. + This function is used to check which plugins are visible. + + @param The acl tag to test, eg. "users/user:self", "systems", ... + @return Boolean TRUE on success else FALSE + */ function check_access($aclname) { - $deps= $this->ui->get_module_departments($aclname); - + /* Split given acl string into an array. + e.g. "user,systems" => array("users","systems"); + */ $acls_to_check = array(); if(preg_match("/,/",$aclname)){ $acls_to_check = split(",",$aclname); }else{ $acls_to_check = array($aclname); } - - if(preg_match("/\//",$aclname)){ - foreach($deps as $dep){ - foreach($acls_to_check as $acl_to_check){ - if($this->ui->get_permissions($dep,$acl_to_check) != ""){ - return(TRUE); - } - } - } - }else{ - foreach($deps as $dep){ - foreach($acls_to_check as $acl_to_check){ - if($this->ui->get_category_permissions($dep,$acl_to_check) != ""){ - return(TRUE); - } + + foreach($acls_to_check as $acl_to_check){ + + /* Check if the given acl tag is only valid for self acl entries + ui->get_permissions($this->ui->dn,$acl_to_check,"") != ""){ + return(TRUE); } + return(FALSE); + }else{ + + /* No self acls. Check if we have any acls for the given ACL type + */ + $deps = $this->ui->get_module_departments($acl_to_check,TRUE); + if(count($deps)) return TRUE; } } return (FALSE); } + function gen_headlines() { $ret = array(); @@ -149,8 +163,11 @@ class pluglist { /* Read information from class variable */ if (!isset($info['CLASS'])){ - msg_dialog::display(_("Configuration error"), _("The configuration format has changed. Please re-run setup!"), ERROR_DIALOG); - display_error_page(); + msg_dialog::display( + _("Configuration error"), + _("The configuration format has changed. Please re-run setup!"), + FATAL_ERROR_DIALOG); + exit(); } if (!plugin_available($info['CLASS'])){ continue; @@ -159,9 +176,7 @@ class pluglist { $plHeadline= $vars['plHeadline']; $plDescription= $vars['plDescription']; - - $index= $this->get_index($info['PATH'],$info['CLASS']); - $image= get_template_path('images/'.$info['ICON']); + $index= $this->get_index($info['CLASS']); $href= "main.php?plug=$index&reset=1"; if(!$vars){ @@ -172,6 +187,8 @@ class pluglist { if ($this->check_access($info['ACL'])){ + $this->allowed_plugins[$index] = $index; + $entries= $entries."

"; if(session::get('js')){ @@ -182,15 +199,6 @@ class pluglist { _($plHeadline)."

\n"; } - /* Generate icon entry with description */ - $current= ''; - $this->menuparts[_($headline)][]= $current; if(!session::is_set('maxC')){ session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP"); } @@ -244,6 +252,7 @@ class pluglist { function show_iconmenu() { + global $class_mapping; if ($this->iconmenu == ""){ $cfg= $this->config->data['MENU']; @@ -272,8 +281,13 @@ class pluglist { $vars= get_class_vars($info['CLASS']); $plHeadline= $vars['plHeadline']; $plDescription= $vars['plDescription']; + if (isset($vars['plIcon'])){ + $plIcon= $vars['plIcon']; + } else { + $plIcon= "plugin.png"; + } - $index= $this->get_index($info['PATH'],$info['CLASS']); + $index= $this->get_index($info['CLASS']); $href = "main.php?plug=".$index."&reset=1"; @@ -288,8 +302,12 @@ class pluglist { if ($this->check_access($info['ACL'])){ - /* Hm this looks doubled */ - $image= get_template_path('images/'.$info['ICON']); + /* Load icon */ + if (isset($info['ICON'])){ + $image= get_template_path('images/'.$info['ICON']); + } else { + $image= get_template_path("plugins/".preg_replace('%^.*/([^/]+)/[^/]+$%', '\1', $class_mapping[$info['CLASS']])."/images/$plIcon"); + } if ($col > 5){ $entries= $entries.""; $col = 1; @@ -345,21 +363,41 @@ class pluglist { return ("../".$this->dirlist[$index]); } - function get_index($path,$class) + 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 && $plugin['PATH'] == $path){ + if($plugin['CLASS'] == $class){ return($key); } } } - /* Indentify by path*/ - return (array_search($path, $this->dirlist)); + /* Nothing */ + return (0); } + + /*! \brief This function checks if we are allowed to view the plugin with the given id + @param $plug_id Integer The ID of the plugin. + @return Boolean TRUE if we are allowed to view the plugin else FASLE + */ + function plugin_access_allowed($plug_id) + { + return(isset($this->allowed_plugins[$plug_id])); + } + + + /*! \brief Force the menu to be recreated + */ + function reset_menus() + { + $this->menu = ""; + $this->iconmenu =""; + } + } +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>