Code

Updated property handling
[gosa.git] / gosa-core / include / class_configRegistry.inc
index 420c0034650a8e1d69b1261d0ea54e1555c6c3a0..5051d21b6221dc7412529932a38da648d2aabb29 100644 (file)
@@ -13,9 +13,30 @@ class configRegistry{
     // Excludes property values defined in ldap 
     public $ignoreLdapProperties = FALSE;
 
+    // Contains all classes with plInfo
+    public $classesWithInfo = array();
+
     function __construct($config)
     {
         $this->config = &$config;
+
+        // Detect classes that have a plInfo method 
+        global $class_mapping;
+        foreach ($class_mapping as $cname => $path){
+            $cmethods = get_class_methods($cname);
+            if (is_array($cmethods) && in_array_ics('plInfo',$cmethods)){
+
+                // Get plugin definitions
+                $def = call_user_func(array($cname, 'plInfo'));;
+
+                // Register Post Events (postmodfiy,postcreate,postremove,checkhook)
+                if(count($def)){
+                    $this->classesWithInfo[$cname] = $def;
+                }
+            }
+        }
+
+        // (Re)Load properties
         $this->reload();
     }
 
@@ -102,36 +123,29 @@ class configRegistry{
             $this->status = 'finished';
         }
 
-        global $class_mapping;
-        foreach ($class_mapping as $cname => $path){
-            $cmethods = get_class_methods($cname);
-            if (is_array($cmethods) && in_array_ics('plInfo',$cmethods)){
-
-                // Get plugin definitions
-                $def = call_user_func(array($cname, 'plInfo'));;
-
-                // Register Post Events (postmodfiy,postcreate,postremove,checkhook)
-                if(count($def)){
-                    
-                    $name = $cname;
-                    $name = (isset($def['plShortName'])) ? $def['plShortName'] : $cname;
-                    $name = (isset($def['plDescription'])) ? $def['plDescription'] : $cname;
-
-                    $this->classToName[$cname] = $name;
-                    $data = array('name' => 'postcreate','type' => 'command');
-                    $this->register($cname, $data);    
-                    $data = array('name' => 'postremove','type' => 'command');
-                    $this->register($cname, $data);    
-                    $data = array('name' => 'postmodify','type' => 'command');
-                    $this->register($cname, $data);    
-                    $data = array('name' => 'check', 'type' => 'command');
-                    $this->register($cname, $data);    
-                }
-
-                if(isset($def['plProperties'])){
-                    foreach($def['plProperties'] as $property){
-                        $this->register($cname, $property);
-                    }
+        // Register plugin properties.
+        foreach ($this->classesWithInfo as $cname => $def){
+
+            // Detect class name
+            $name = $cname;
+            $name = (isset($def['plShortName'])) ? $def['plShortName'] : $cname;
+            $name = (isset($def['plDescription'])) ? $def['plDescription'] : $cname;
+
+            // Register post events
+            $this->classToName[$cname] = $name;
+            $data = array('name' => 'postcreate','type' => 'command');
+            $this->register($cname, $data);    
+            $data = array('name' => 'postremove','type' => 'command');
+            $this->register($cname, $data);    
+            $data = array('name' => 'postmodify','type' => 'command');
+            $this->register($cname, $data);    
+            $data = array('name' => 'check', 'type' => 'command');
+            $this->register($cname, $data);    
+
+            // Register properties 
+            if(isset($def['plProperties'])){
+                foreach($def['plProperties'] as $property){
+                    $this->register($cname, $property);
                 }
             }
         }
@@ -315,7 +329,10 @@ class gosaProperty
 
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name,$value,"",_("Use 'true', 'false' or empty if allowed")), WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The value '%s' specified for '%s:%s' is invalid. A bool value is required here!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
     
         return($match);
@@ -327,7 +344,10 @@ class gosaProperty
     
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name), WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The value '%s' specified for '%s:%s' is invalid. A string value is required here!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
 
         return($match);
@@ -339,7 +359,10 @@ class gosaProperty
 
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name, $value,'/[0-9]/'), WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The value '%s' specified for '%s:%s' is invalid. A numeric value is required here!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
 
         return($match);
@@ -347,27 +370,57 @@ class gosaProperty
 
     static function isPath($message,$class,$name,$value, $type)
     {
-        $match = TRUE;
+        $match = preg_match("#^(/[^/]*/){1}#", $value);
     
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name), WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The path '%s' specified for '%s:%s' is invalid!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
 
         return($match);
     }
 
-    static function isWriteablePath($message,$class,$name,$value, $type)
+    static function isReadablePath($message,$class,$name,$value, $type)
     {
         $match = !empty($value)&&is_dir($value)&&is_writeable($value);
-    
+   
         // Display the reason for failing this check.         
         if($message && ! $match){
+            if(!is_dir($value)){
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The folder '%s' specified for '%s:%s' does not exists!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
+            }elseif(!is_readable($value)){
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The folder '%s' specified for '%s:%s' cannot be used for reading!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
+            }
+        }
+
+        return($match);
+    }
 
+    static function isWriteablePath($message,$class,$name,$value, $type)
+    {
+        $match = !empty($value)&&is_dir($value)&&is_writeable($value);
+   
+        // Display the reason for failing this check.         
+        if($message && ! $match){
             if(!is_dir($value)){
-                msg_dialog::display(_("Warning"), sprintf(_("The specified folder does not exists '%s'."), $value), WARNING_DIALOG);
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The folder '%s' specified for '%s:%s' does not exists!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
             }elseif(!is_writeable($value)){
-                msg_dialog::display(_("Warning"), sprintf(_("The specified folder cannot be used for writing '%s'."), $value), WARNING_DIALOG);
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The folder '%s' specified for '%s:%s' cannot be used for writing!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
             }
         }
 
@@ -382,9 +435,15 @@ class gosaProperty
         if($message && ! $match){
                 
             if(!is_file($value)){
-                msg_dialog::display(_("Warning"), sprintf(_("The specified file does not exists '%s'."), $value), WARNING_DIALOG);
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The file '%s' specified for '%s:%s' does not exists!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
             }elseif(!is_readable($value)){
-                msg_dialog::display(_("Warning"), sprintf(_("The specified file cannot be used for reading '%s'."), $value), WARNING_DIALOG);
+                msg_dialog::display(_("Warning"), 
+                        sprintf(_("The file '%s' specified for '%s:%s' cannot be read!"), 
+                            bold($value),bold($class),bold($name)), 
+                        WARNING_DIALOG);
             }
         }
 
@@ -397,7 +456,10 @@ class gosaProperty
 
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::cmdinvalid($name,$value),  WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The command '%s' specified for '%s:%s' is invalid!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
         
         return($match);
@@ -409,7 +471,10 @@ class gosaProperty
 
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name,$value,'','cn=user,ou=people,dc=example,dc=de'),  WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The dn '%s' specified for '%s:%s' is invalid!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
         
         return($match);
@@ -417,11 +482,14 @@ class gosaProperty
 
     static function isRdn($message,$class,$name,$value, $type)
     {
-        $match = preg_match("/^([a-z]*=[^=,]*,)*[^=]*=[^=]*,$/i", $value);
+        $match = preg_match("/^([a-z]*=[^=,]*,)*[^=]*=[^=,]*,?$/i", $value);
 
         // Display the reason for failing this check.         
         if($message && ! $match){
-            msg_dialog::display(_("Warning"), msgPool::invalid($name,$value,'','ou=people,'),  WARNING_DIALOG);
+            msg_dialog::display(_("Warning"), 
+                    sprintf(_("The rdn '%s' specified for '%s:%s' is invalid!"), 
+                        bold($value),bold($class),bold($name)), 
+                    WARNING_DIALOG);
         }
         
         return($match);