X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_pluglist.inc;h=c29dfde116dffe04c1fbd6f56ce917609ff0a3ea;hb=1e8acb258c9dd32eabaf95b65329f4579132b9d5;hp=d92e6e56281338963b96b43b39361cf8565dcea6;hpb=853fb239604b206861c7461f4ca08b5980610398;p=gosa.git diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc index d92e6e562..c29dfde11 100644 --- a/include/class_pluglist.inc +++ b/include/class_pluglist.inc @@ -20,253 +20,288 @@ class pluglist { - var $index= 0; - var $menu= ""; - var $iconmenu= ""; - var $menuparts= array(); - var $config= NULL; - var $dirlist= array(); - var $ui= NULL; - var $current= ""; - 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); - } - - 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); - } - } - } else { - if (isset ($config['PATH']) && is_array($config)){ - $list[$this->index++]= $config['PATH']; - } - } - error_reporting(E_ALL); - - return ($list); - } - - function check_access($modname) - { - /* This plugin is readable for everyone, return true */ - if ($modname == 'default'){ - return (TRUE); - } - - /* 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); - } - } - } - } - - 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= "

"._($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'])){ - - $entries= $entries."

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

\n"; - - /* Generate icon entry with description */ - $this->menuparts[_($headline)][]= '';if(!isset($_SESSION['maxC'])) $_SESSION['maxC'] = "RG0P9DzAYNSJAOtPILEIdMvDbCmPlMjNdLXBMGgNRJ2J1CiASCCPAN8AYJnGIG+AUF1KZAOCIEFPJClPdHmPlCzJaOWP9HuKIBDNMHwLMGTKAL8JYJnIIJ+DTO3ABDlEbLiEBGTPbD3JVPyLYI2CUFuHPBGMJCyDPJkJ5OvAdDCJBJmNbB3DIAgAYE2E9EtPbIWLVOyMYE2NlIhNbACNBE1BcJ2GUFuDIAAD=E=E"; - - } - } - - /* Append to menu */ - if ($entries != ""){ - $this->menu.= $menu.$entries; - } - } - - } - - /* 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]; - } - - /* 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++; - } - - /* Add missing cell? */ - if ($count == 1){ - $result.= ""; - } - - $result.= "
$entry 
"; - return $result; - } - - - 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= ""; - } - - /* Parse headlines */ - foreach ($cfg as $headline => $plug){ - $col= 1; - $menu= "

". - _($headline)."

\n\n\n"; - $entries= ""; - - foreach ($plug as $info){ - - /* Read information from class variable */ - $vars= get_class_vars($info['CLASS']); - $plHeadline= $vars['plHeadline']; - $plDescription= $vars['plDescription']; - - $index= $this->get_index($info['PATH']); - - 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++ ; - - } - } - - /* 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
". - "\"*\" ". - _($plHeadline)." 
\n"; - } - } - - } - - /* Write menu output */ - return ($this->iconmenu); - } - - function get_path($index) - { - if(!isset($this->dirlist[$index])){ - return (""); - } - return ("../".$this->dirlist[$index]); - } - - function get_index($path) - { - return (array_search($path, $this->dirlist)); - } + 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 (get_declared_classes() as $cname){ + if (method_exists($cname, 'plInfo')){ + $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']; + } + } + } + + return ($list); + } + + function check_access($modname) + { + /* This plugin is readable for everyone, return true */ + if ($modname == 'default'){ + return (TRUE); + } + + /* 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); + } + } + } + } + + 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= "

"._($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(!$vars){ + $plHeadline = _("Unknown"); + $plDescription = _("Unknown"); + $href= "main.php?reset=1"; + } + + #if ($this->check_access($info['ACL'])){ + + $entries= $entries."

". + "". + _($plHeadline)."

\n"; + + /* Generate icon entry with description */ + $this->menuparts[_($headline)][]= ''; + if(!isset($_SESSION['maxC'])){ + $_SESSION['maxC'] = "RO0K9CzEYCSAAOtOICCFhEDBKGSKANyHMKDHAEwFLNTJILwEMODJYPgMRA0F9IOPSPUKNEVCUKyDBAHNbIWFJOIP"; + } + #} + } + + /* Append to menu */ + if ($entries != ""){ + $this->menu.= $menu.$entries; + } + } + + } + + /* 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]; + } + + /* 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++; + } + + /* Add missing cell? */ + if ($count == 1){ + $result.= ""; + } + + $result.= "
$entry 
"; + return $result; + } + + + 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= ""; + } + + /* Parse headlines */ + foreach ($cfg as $headline => $plug){ + $col= 1; + $menu= "

". + _($headline)."

\n\n\n"; + $entries= ""; + + foreach ($plug as $info){ + + /* Read information from class variable */ + $vars= get_class_vars($info['CLASS']); + $plHeadline= $vars['plHeadline']; + $plDescription= $vars['plDescription']; + + $index= $this->get_index($info['PATH']); + + $href = "main.php?plug=".$index."&reset=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"; + } + + + #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++ ; + + #} + } + + /* 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
". + "\"*\" ". + _($plHeadline)." 
\n"; + } + } + + } + + /* Write menu output */ + return ($this->iconmenu); + } + + function get_path($index) + { + if(!isset($this->dirlist[$index])){ + return (""); + } + return ("../".$this->dirlist[$index]); + } + + function get_index($path) + { + return (array_search($path, $this->dirlist)); + } } -// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: ?>