Code

Added pChart classes and GOsa mapping class to enable auto-include
[gosa.git] / gosa-core / include / class_pluglist.inc
index f633d55f9fd8a68742ab3902be2fc1620f07aff6..18cf1a1ee9f4715a41e40ebf6502c2a39bb64dde 100644 (file)
@@ -83,27 +83,52 @@ class pluglist
    *            Checks existence and ACL for the given plugin.
    *            Returns true in case of success else false. 
    */
-  function registerPlugin($plug)
+  function registerPlugin(&$plug)
   {
-    global $class_mapping;
+      global $class_mapping;
 
-    if (!isset($plug['CLASS'])){
-      msg_dialog::display(
-          _("Configuration error"),
-          _("The configuration format has changed: please run the setup again!"),
-          FATAL_ERROR_DIALOG);
-      exit();
-    }
-    if (!plugin_available($plug['CLASS'])){
-      return(FALSE);
-    }
-    if (!$this->check_access($plug['ACL'])){
-      return(FALSE);
-    }
-    $this->dirlist[$this->index] = dirname($class_mapping[$plug['CLASS']]);
-    $this->pluginList[$this->index] = $plug['CLASS'];
-    $this->index++;
-    return(TRUE);
+      // Clean ACL string, we do not want any spaces or lines breaks here. 
+      $plug['ACL'] = trim($plug['ACL']);
+
+      // Clean ACL string, we do not want any spaces or lines breaks here.
+      $acl = trim($plug['ACL']);
+      if(preg_match("/,/",$acl)){
+          $acls = explode(",",$acl);
+      }else{
+          $acls = array($acl);
+      }
+      foreach($acls as $key => $aclEntry){
+          $aclEntry = trim($aclEntry);
+          $tmp = preg_replace("/[^a-z0-9\/:]/i","",$aclEntry);
+
+          // Check if cleaned 'acl' tag doesn't match the configured one from the gosa.conf.
+          // Display a notification to tell the user that there is something wrong.
+          if($tmp != $aclEntry){
+              trigger_error("Please check acl='{$aclEntry}' tag for plugin '{$plug['CLASS']}' in your gosa.conf, it contains invalid characters!" );
+          }
+          $acls[$key] = $tmp;
+      }
+      $plug['ACL'] = implode(',',$acls);
+
+
+      // Check class
+      if (!isset($plug['CLASS'])){
+          msg_dialog::display(
+                  _("Configuration error"),
+                  _("The configuration format has changed: please run the setup again!"),
+                  FATAL_ERROR_DIALOG);
+          exit();
+      }
+      if (!plugin_available($plug['CLASS'])){
+          return(FALSE);
+      }
+      if (!$this->check_access($plug['ACL'])){
+          return(FALSE);
+      }
+      $this->dirlist[$this->index] = dirname($class_mapping[$plug['CLASS']]);
+      $this->pluginList[$this->index] = $plug['CLASS'];
+      $this->index++;
+      return(TRUE);
   }
 
 
@@ -128,7 +153,11 @@ class pluglist
     }
 
     foreach($acls_to_check as $acl_to_check){
+    
+      // Remove spaces and line breaks.
       $acl_to_check = trim($acl_to_check);
+      $acl_to_check = preg_replace("/ /","",$acl_to_check);
+        
 
       /* Check if the given acl tag is only valid for self acl entries  
        *          <plugin acl="users/user:self" class="user"...  
@@ -179,7 +208,7 @@ class pluglist
       if(isset($this->config->data['MENU'])){
         foreach($this->config->data['MENU'] as $section => $plugins){
           foreach($plugins as $id => $plug){
-            if(!$this->registerPlugin($plug)){ 
+            if(!$this->registerPlugin($this->config->data['MENU'][$section][$id])){ 
               unset($this->config->data['MENU'][$section][$id]); 
             }
           }
@@ -317,7 +346,7 @@ class pluglist
       //  if this fails for some reason, then remove the plugins from the menu.
       if(isset($this->config->data['SHORTCUTMENU'])){
         foreach($this->config->data['SHORTCUTMENU'] as $id => $plugin){
-          if(!$this->registerPlugin($plugin)){
+          if(!$this->registerPlugin($this->config->data['SHORTCUTMENU'][$id])){
             unset($this->config->data['SHORTCUTMENU'][$id]); 
           } 
         }
@@ -327,7 +356,7 @@ class 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)){
+          if(!$this->registerPlugin($this->config->data['PATHMENU'][$id])){
             unset($this->config->data['PATHMENU'][$id]); 
           } 
         }