X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_pluglist.inc;h=0f89f3b611bb05aeda5ba7c67a386a0236578d9b;hb=5eb351d44a10e1315cba393a894348906934e06b;hp=9166656b5df3bd153c4477e2ecf7404fcf0cdb94;hpb=24e255e362a43d64765bd8cb4dedc1c37729e131;p=gosa.git diff --git a/gosa-core/include/class_pluglist.inc b/gosa-core/include/class_pluglist.inc index 9166656b5..0f89f3b61 100644 --- a/gosa-core/include/class_pluglist.inc +++ b/gosa-core/include/class_pluglist.inc @@ -22,20 +22,32 @@ class pluglist { + // The id of the last registered plugin id var $index= 0; + var $config= NULL; - var $dirlist= array(); var $ui= NULL; - var $info= array(); + + // Contains a list of the paths for all registered plugins. + var $dirlist= array(); + + // Seems to be used in the help menu to generate an overview. var $headlines = array(); + // Remember stuff in here. var $silly_cache= array(); + // The pluglist keeps track of all registered plugins. + // (Registered plugins are those we are able to access) var $pluginList = array(); + // Some cache vars to avoid regenration of the menus. var $pathMenu = ""; var $menu= ""; var $iconmenu= ""; + // Classes plInfo list + var $info = array(); + function pluglist(&$config, &$ui) { $this->ui= &$ui; @@ -47,35 +59,30 @@ class pluglist { $this->pluginList = array(); - // 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]); - } - } - } + /* Fill info part of pluglist */ + $classes= get_declared_classes(); + foreach ($classes as $cname){ + $cmethods = get_class_methods($cname); + if (in_array_ics('plInfo',$cmethods)){ + $this->info[$cname]= call_user_func(array($cname, 'plInfo')); + } + } if(!session::is_set('maxC')){ session::set('maxC',"RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP"); } - $this->gen_menu(); - $this->show_iconmenu(); - $this->genPathMenu(); +// +// // Now generate menu - usually they are cached +// $this->gen_menu(); +// $this->show_iconmenu(); +// $this->genPathMenu(); } + /*! \brief Tries to register a plugin in the pluglist + * Checks existence and ACL for the given plugin. + * Returns true in case of success else false. + */ function registerPlugin($plug) { global $class_mapping; @@ -83,7 +90,7 @@ class pluglist if (!isset($plug['CLASS'])){ msg_dialog::display( _("Configuration error"), - _("The configuration format has changed. Please re-run setup!"), + _("The configuration format has changed: please run the setup again!"), FATAL_ERROR_DIALOG); exit(); } @@ -128,12 +135,17 @@ class pluglist */ if(preg_match("/:self$/",$acl_to_check)){ $acl_to_check = preg_replace("/:self$/","",$acl_to_check); - if($this->ui->get_permissions($this->ui->dn,$acl_to_check,"") != ""){ - $this->silly_cache[$aclname]= TRUE; - return(TRUE); + if(strpos($acl_to_check,"/")){ + if($this->ui->get_permissions($this->ui->dn,$acl_to_check,"") != ""){ + $this->silly_cache[$aclname]= TRUE; + return(TRUE); + } + }else{ + if($this->ui->get_category_permissions($this->ui->dn,$acl_to_check,"") != ""){ + $this->silly_cache[$aclname]= TRUE; + return(TRUE); + } } - $this->silly_cache[$aclname]= FALSE; - return(FALSE); }else{ // No self acls. Check if we have any acls for the given ACL type @@ -160,7 +172,20 @@ class pluglist */ function gen_menu() { - if (1 || $this->menu == ""){ + if ($this->menu == ""){ + + // First load the menu plugins and try to register them in the pluglist + // if this fails for some reason, then remove the plugin from the menu. + 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]); + } + } + } + } + $cfg= $this->config->data['MENU']; $menu = "\n \n"; - $menu.= "\n
"; + $menu.= "\n
 
"; $menu.= "\n
\n"; } $menu.= "\n \n"; @@ -195,7 +220,7 @@ class pluglist $this->menu .= "\n \n"; @@ -227,17 +252,19 @@ class pluglist function show_iconmenu() { $add_hr =FALSE; + $this->iconmenu = ""; if ($this->iconmenu == ""){ + $cfg= $this->config->data['MENU']; foreach ($cfg as $headline => $plug){ $col= 0; - $this->iconmenu .= "\n
\n"; + $this->iconmenu .= "\n
"; if($add_hr){ $add_hr = FALSE; - $this->iconmenu .= "\n
\n"; + $this->iconmenu .= "\n
"; } - $this->iconmenu .= "\n

". _($headline)."

\n"; + $this->iconmenu .= "\n

". _($headline)."

"; foreach ($plug as $info){ @@ -246,18 +273,16 @@ class pluglist // Add a seperating row if (($col % 4) == 0){ - $this->iconmenu .= "\n
\n"; + $this->iconmenu .= "\n
"; } - - $this->iconmenu.= "\n
"; - $this->iconmenu.= "\n ".image($icon); - $this->iconmenu.= "\n
"; - $this->iconmenu.= "\n

{$title}

"; - $this->iconmenu.= "\n

{$desc}

"; - $this->iconmenu.= "\n
"; - $this->iconmenu.= "\n
"; - + $this->iconmenu.= "\n
"; + $this->iconmenu.= "\n ".image($icon); + $this->iconmenu.= "\n
"; + $this->iconmenu.= "\n

{$title}

"; + $this->iconmenu.= "\n

{$desc}

"; + $this->iconmenu.= "\n
"; + $this->iconmenu.= "\n
"; $col++ ; } $add_hr = TRUE; @@ -267,17 +292,34 @@ class pluglist } + /*! \brieg Generates and the path menu (the one on the upper right) and keeps + * the generated HTML content, so we are not forced to generate it on every + * page request. + * (See of your gosa.conf) + */ function genPathMenu() { - if(1 || empty($this->pathMenu)){ + if(empty($this->pathMenu)){ + + // Now load the path menu and try to register the plugins in the pluglist + // if this fails for some reason, then remove the plugin from the menu. + if(isset($this->config->data['PATHMENU'])){ + foreach($this->config->data['PATHMENU'] as $id => $plugin){ + if(!$this->registerPlugin($plugin)){ + unset($this->config->data['PATHMENU'][$id]); + } + } + } + $this->pathMenu = "\n
". "\n "; $this->pathMenu.= "\n
"; - } - return($this->pathMenu); + } + + $menu = pathNavigator::getCurrentPath(); + return(preg_replace("/%navigator%/", $menu, $this->pathMenu)); } + /*! \brief Returns additional info for a given class name, like + * plugin-icon, title, description and the index of the element + in the pluglist which uses this class. + */ function getPlugData($class) { global $class_mapping;