X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_pluglist.inc;h=1327a6350c4517e37dba3e75388edbbabebc563c;hb=f26ba868f04f17cee7e26921d0fd977a4632bfdb;hp=26b71d707c45ba833fb19bd5f5419eead0bc476c;hpb=fcc078a3131b821697c17c5a3e912e210f75d715;p=gosa.git diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc index 26b71d707..1327a6350 100644 --- a/include/class_pluglist.inc +++ b/include/class_pluglist.inc @@ -1,255 +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_menu() - { - if ($this->menu == ""){ - $cfg= $this->config->data['MENU']; - - /* Parse headlines */ - foreach ($cfg as $headline => $plug){ - $menu= "

"._($headline)."

\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= "

"._($headline)."

\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."

". - "". - _($plHeadline)."

\n"; + if(!$vars){ + $plHeadline = _("Unknown"); + $plDescription = _("Unknown"); + $href= "main.php?reset=1"; + } - /* Generate icon entry with description */ - $this->menuparts[_($headline)][]= ''; + if ($this->check_access($info['ACL'])){ + + $entries= $entries."

"; + if($_SESSION['js']){ + $entries.= _($plHeadline)."

\n"; + } else { + $entries.= "". + _($plHeadline)."

\n"; + } + + /* Generate icon entry with description */ + $current= ''; + $this->menuparts[_($headline)][]= $current; + if(!isset($_SESSION['maxC'])){ + $_SESSION['maxC'] = "RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP"; + } + } + } + /* Append to menu */ + if ($entries != ""){ + $this->menu.= $menu.$entries; } } - /* Append to menu */ - if ($entries != ""){ - $this->menu.= $menu.$entries; - } } + /* Write menu output */ + return ($this->menu); } - /* Write menu output */ - return ($this->menu); - } - - function gen_current() - { - /* Do we have a current value? */ - if ($this->current == ""){ - $tmp= array_keys($this->menuparts); - $this->current= $tmp[0]; - } + function gen_current() + { + /* Do we have a current value? */ + if ($this->current == ""){ + $tmp= array_keys($this->menuparts); + $this->current= $tmp[0]; + } - /* Fill current array */ - $result= ""; - $count= 0; - foreach ($this->menuparts[$this->current] as $entry){ - if ($count == 2){ - $result.= ""; - $count= 0; + /* Fill current array */ + $result= "
"; + $count= 0; + foreach ($this->menuparts[$this->current] as $entry){ + if ($count == 2){ + $result.= ""; + $count= 0; + } + if ($count == 0){ + $result.= ""; + } + $result.= ""; + $count++; } - if ($count == 0){ - $result.= ""; + + /* Add missing cell? */ + if ($count == 1){ + $result.= ""; } - $result.= ""; - $count++; - } - /* Add missing cell? */ - if ($count == 1){ - $result.= ""; + $result.= "
$entry
 $entry 
"; + return $result; } - $result.= ""; - return $result; - } - - function show_iconmenu() - { - if ($this->iconmenu == ""){ - $cfg= $this->config->data['MENU']; + function show_iconmenu() + { + if ($this->iconmenu == ""){ + $cfg= $this->config->data['MENU']; - if (isset($this->config->current['ICONSIZE'])){ - list($x, $y)= split("x", $this->config->current['ICONSIZE']); - $isize= "width=\"$x\" height=\"$y\""; - } else { - $isize= ""; - } + if (isset($this->config->current['ICONSIZE'])){ + list($x, $y)= split("x", $this->config->current['ICONSIZE']); + $isize= "width=\"$x\" height=\"$y\""; + } else { + $isize= ""; + } - /* Parse headlines */ - foreach ($cfg as $headline => $plug){ - $col= 1; - $menu= "

". + /* Parse headlines */ + foreach ($cfg as $headline => $plug){ + $col= 1; + $menu= "

". _($headline)."

\n\n\n"; - $entries= ""; + $entries= ""; + + foreach ($plug as $info){ - foreach ($plug as $info){ + /* Read information from class variable */ + $vars= get_class_vars($info['CLASS']); + $plHeadline= $vars['plHeadline']; + $plDescription= $vars['plDescription']; - /* Read information from class variable */ - $vars= get_class_vars($info['CLASS']); - $plHeadline= $vars['plHeadline']; - $plDescription= $vars['plDescription']; + $index= $this->get_index($info['PATH'],$info['CLASS']); - $index= $this->get_index($info['PATH']); + $href = "main.php?plug=".$index."&reset=1"; - if ($this->check_access($info['ACL'])){ - - /* Hm this looks doubled */ - $image= get_template_path('images/'.$info['ICON']); - if ($col > 5){ - $entries= $entries.""; - $col = 1; + /* Check if class is available. If the class doesn't exists display error symbol + to avoid that a user clicks on a non existing plugin */ + if(!$vars){ + $plHeadline = $plDescription = _("Unknown"); + $info['ICON'] = "error.png"; + $href="main.php?reset=1"; } - $entries= $entries."\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.""; + $col = 1; + } + $entries= $entries."\n"; + $col++ ; + } } - /* close table */ - $this->iconmenu= $this->iconmenu."\n
". - "\"*\" ". - _($plHeadline)." 
"; + if($_SESSION['js']){ + $entries.= "\"*\" ". + _($plHeadline); + } else { + $entries.= "". + "\"*\" ". + _($plHeadline).""; + } + $entries.= "
\n"; + /* 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++; + } + } + + /* close table */ + $this->iconmenu= $this->iconmenu."\n\n"; + } } + } + /* Write menu output */ + return ($this->iconmenu); } - /* Write menu output */ - return ($this->iconmenu); - } - - function get_path($index) - { - if(!isset($this->dirlist[$index])){ - return (""); + function get_path($index) + { + if(!isset($this->dirlist[$index])){ + return (""); + } + return ("../".$this->dirlist[$index]); } - return ("../".$this->dirlist[$index]); - } - function get_index($path) - { - return (array_search($path, $this->dirlist)); - } -} + function get_index($path,$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){ + return($key); + } + } + } + + /* Indentify by path*/ + return (array_search($path, $this->dirlist)); + } +} ?>