X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_pluglist.inc;h=50e0c0f191a29158c58fd8df71453925b8992bf7;hb=bc81ccefd133ead30e4d43c2be5896df4fb89486;hp=66bc4daed4acd4dc23954715f9f6da9ee9cfba3b;hpb=e4bf3ecc1b431adcb5b9ad1bdf58d7e3739f6849;p=gosa.git diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc index 66bc4daed..50e0c0f19 100644 --- a/include/class_pluglist.inc +++ b/include/class_pluglist.inc @@ -1,272 +1,357 @@ ui= $ui; - $this->config= $config; - - /* Create dirlist for all plugins */ - $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data); - } - - function get_plugins($list, $config) - { - /* Error reporting, because I'm getting strange messages in PHP 4.2.x */ - error_reporting(0); - if (!isset($config['PATH']) && !isset($config['CLASS'])){ - if (is_array($config)){ - foreach ($config as $val){ - $list= $this->get_plugins($list, $val); + 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(); + + function pluglist(&$config, &$ui) + { + $this->ui= &$ui; + $this->config= &$config; + + /* Create dirlist for all plugins */ + $this->dirlist= $this->get_plugins ($this->dirlist, $this->config->data); + + /* 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')); + } + } + + /* Provide field for 'all' */ + $this->info['all']= array(); + $this->info['all']['plProvidedAcls']= array(); + $this->info['all']['plDescription']= _("All objects in this category"); + $this->info['all']['plSelfModify']= FALSE; + } + + function get_plugins($list, &$config) + { + /* Error reporting, because I'm getting strange messages in PHP 4.2.x */ + if (!isset($config['PATH']) && !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']; + } } } - } else { - if (isset ($config['PATH']) && is_array($config)){ - $list[$this->index++]= $config['PATH']; - } + + return ($list); } - error_reporting(E_ALL); - return ($list); - } + function check_access($aclname) + { + $deps= $this->ui->get_module_departments($aclname); - function check_access($modname) - { - /* This plugin is readable for everyone, return true */ - if ($modname == 'default'){ - return (TRUE); + $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); + } + } + } + } + return (FALSE); } - /* Look through ACL's */ - foreach($this->ui->subtreeACL as $arr){ - foreach($arr as $value){ - if ($value == ':all' || preg_match("/[,:]$modname#/", $value)){ - if (!preg_match('/^!/', $value)){ - return (TRUE); + function gen_headlines() + { + $ret = array(); + if(count($this->headlines) == 0){ + foreach($this->config->data['MENU'] as $headline => $plugins){ + foreach( $plugins as $id => $plug){ + $attrs = (get_class_vars($plug['CLASS'])); + $ret[$id]['HEADLINE'] = $headline; + $ret[$id]['NAME'] = $attrs['plHeadline']; } } + $this->headlines = $ret; } + return($this->headlines); } - return (FALSE); - } - - function gen_headlines() - { - $ret = array(); - if(count($this->headlines) == 0){ - foreach($this->config->data['MENU'] as $headline => $plugins){ - foreach( $plugins as $id => $plug){ - $attrs = (get_class_vars($plug['CLASS'])); - $ret[$id]['HEADLINE'] = $headline; - $ret[$id]['NAME'] = $attrs['plHeadline']; - } - } - $this->headlines = $ret; - } - return($this->headlines); - } - - function gen_menu() - { - if ($this->menu == ""){ - $cfg= $this->config->data['MENU']; - - /* Parse headlines */ - foreach ($cfg as $headline => $plug){ - $menu= "
\n"; - $entries= ""; - $this->menuparts[_($headline)]= array(); - - /* Parse sub-plugins */ - foreach ($plug as $info){ - - /* Read information from class variable */ - if (!isset($info['CLASS'])){ - print_red(_("Your gosa.conf information has changed partly. Please convert it using the contributed script fix_config.sh!")); - echo $_SESSION['errors']; - exit; + function gen_menu() + { + if ($this->menu == ""){ + $first= TRUE; + $cfg= $this->config->data['MENU']; + + /* Parse headlines */ + foreach ($cfg as $headline => $plug){ + if ($first){ + $style= ""; + $first= FALSE; + } else { + $style= "style='border-top:1px solid #AAA; margin-top:0.8em;'"; } - $vars= get_class_vars($info['CLASS']); - $plHeadline= $vars['plHeadline']; - $plDescription= $vars['plDescription']; + $menu= " \n"; + $entries= ""; + $this->menuparts[_($headline)]= array(); + + /* Parse sub-plugins */ + foreach ($plug as $info){ + + /* Read information from class variable */ + if (!isset($info['CLASS'])){ + print_red(_("Your gosa.conf information has changed partly. Please convert it using the contributed script fix_config.sh!")); + echo $_SESSION['errors']; + exit; + } + $vars= get_class_vars($info['CLASS']); + $plHeadline= $vars['plHeadline']; + $plDescription= $vars['plDescription']; - $index= $this->get_index($info['PATH']); - $image= get_template_path('images/'.$info['ICON']); - $href= "main.php?plug=$index&reset=1"; - if ($this->check_access($info['ACL'])){ + $index= $this->get_index($info['PATH'],$info['CLASS']); + $image= get_template_path('images/'.$info['ICON']); + $href= "main.php?plug=$index&reset=1"; - $entries= $entries." \n"; + if(!$vars){ + $plHeadline = _("Unknown"); + $plDescription = _("Unknown"); + $href= "main.php?reset=1"; + } - /* Generate icon entry with description */ - $this->menuparts[_($headline)][]= ''._($plHeadline).' '._($plDescription).' |
';
+ if($_SESSION['js']){
+ $current.= ''._($plHeadline).' '._($plDescription); + } else { + $current.= ''._($plHeadline).' '._($plDescription).''; + } + $current.= ' |
$entry | "; + $count++; } - if ($count == 0){ - $result.= "||
"; } - $result.= " | $entry | "; - $count++; - } - /* Add missing cell? */ - if ($count == 1){ - $result.= ""; + $result.= " |
". - " ". - _($plHeadline)." | \n"; - $col++ ; - } - } - /* Append to menu */ - if ($entries != ""){ - $this->iconmenu.= $menu.$entries; - - /* Fill up remaining columns */ - if ($col != 1){ - $col--; - while ($col % 5){ - $this->iconmenu= $this->iconmenu. - "\n"; - $col++; + if ($this->check_access($info['ACL'])){ + + /* Hm this looks doubled */ + $image= get_template_path('images/'.$info['ICON']); + if ($col > 5){ + $entries= $entries." |
"; + if($_SESSION['js']){ + $entries.= " ". + _($plHeadline); + } else { + $entries.= "". + " ". + _($plHeadline).""; + } + $entries.= " | \n"; + $col++ ; + } } - /* close table */ - $this->iconmenu= $this->iconmenu."