X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_pluglist.inc;h=f6267beb2fdf5cce01e29f6cb9de856a5a4b4343;hb=f1714ac56cc41319519c97c1ab7749d4d8a637c3;hp=d92e6e56281338963b96b43b39361cf8565dcea6;hpb=853fb239604b206861c7461f4ca08b5980610398;p=gosa.git
diff --git a/include/class_pluglist.inc b/include/class_pluglist.inc
index d92e6e562..f6267beb2 100644
--- a/include/class_pluglist.inc
+++ b/include/class_pluglist.inc
@@ -20,253 +20,300 @@
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= "
\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."\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.= "$entry | ";
- $count++;
- }
-
- /* Add missing cell? */
- if ($count == 1){
- $result.= " | ";
- }
-
- $result.= "
";
- 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= "\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
\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= "\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'],$info['CLASS']);
+ $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."\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.= "$entry | ";
+ $count++;
+ }
+
+ /* Add missing cell? */
+ if ($count == 1){
+ $result.= " | ";
+ }
+
+ $result.= "
";
+ 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= "\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'],$info['CLASS']);
+
+ $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
\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,$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));
+
+ }
}
-// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
?>