Code

Only find adequat values
[gosa.git] / gosa-core / include / class_filter.inc
index 4a132154ccdc52eed46a0e982dc3dc193604c48e..0b5f1778a9263186bbada5d718d35540cb2ffcd6 100644 (file)
@@ -35,6 +35,7 @@ class filter {
   var $initial= false;
   var $scopeMode= "auto";
   var $alphabet= null;
+  var $converter= array();
 
 
   function filter($filename)
@@ -53,11 +54,11 @@ class filter {
     $contents = file_get_contents($filename);
     $this->xmlData= xml::xml2array($contents, 1);
 
-    if (!isset($this->xmlData['filter'])) {
+    if (!isset($this->xmlData['filterdef'])) {
       return false;
     }
 
-    $this->xmlData= $this->xmlData["filter"];
+    $this->xmlData= $this->xmlData["filterdef"];
 
     // Load filter
     if (isset($this->xmlData['search'])) {
@@ -237,17 +238,26 @@ class filter {
   }
 
 
-  function setObjectStorage($storage) {
+  function setConverter($field, $hook)
+  {
+    $this->converter[$field]= $hook;
+  }
+
+
+  function setObjectStorage($storage)
+  {
     $this->objectStorage= $storage;    
   }
 
 
-  function setBase($base) {
+  function setBase($base)
+  {
     $this->base= $base;
   }
 
 
-  function setCurrentScope($scope) {
+  function setCurrentScope($scope)
+  {
     $this->scope= $scope;
   }
 
@@ -343,6 +353,12 @@ class filter {
     global $class_mapping;
     $result= array();
 
+    // Return empty list if initial is not set
+    if (!$this->initial) {
+      $this->initial= true;
+      return $result;
+    }
+
     // Go thru all queries and merge results
     foreach ($this->query as $query) {
       if (!isset($query['backend']) || !isset($query['filter']) || !isset($query['attribute'])) {
@@ -364,8 +380,16 @@ class filter {
         if (!isset($element['set']) || !isset($element['unset'])) {
           continue;
         }
-        $e_set= is_array($element['set'])?"":$element['set'];
-        $e_unset= is_array($element['unset'])?"":$element['unset'];
+
+        // Handle converters if present
+        if (isset($this->converter[$tag])) {
+          preg_match('/([^:]+)::(.*)$/', $this->converter[$tag], $m);
+          $e_set= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->elementValues[$tag], is_array($element['set'])?"":$element['set']));
+          $e_unset= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->elementValues[$tag], is_array($element['unset'])?"":$element['unset']));
+        } else {
+          $e_set= is_array($element['set'])?"":$element['set'];
+          $e_unset= is_array($element['unset'])?"":$element['unset'];
+        }
 
         if ($this->elementValues[$tag] == "") {
           $e_unset= preg_replace('/\$/', normalizeLdap($this->elementValues[$tag]), $e_unset);
@@ -376,11 +400,9 @@ class filter {
         }
       }
 
-      $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $attributes,
-                               $this->category, $this->objectStorage));
+      $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $attributes, $this->category, $this->objectStorage));
     }
     
-
     return ($result);
   }
 
@@ -464,7 +486,9 @@ class filter {
       foreach ($attributes as $attribute) {
         if (is_array($entry[$attribute])) {
           for ($i= 0; $i<$entry[$attribute]['count']; $i++) {
-            $res[]= $entry[$attribute][$i];
+            if (mb_stristr($entry[$attribute][$i], $value)) {
+              $res[]= $entry[$attribute][$i];
+            }
           }
         } else {
           $res[]= $entry[$attribute];
@@ -482,7 +506,7 @@ class filter {
     $result= array();
 
     // Introduce maximum number of entries
-    $max= 10;
+    $max= 25;
 
     foreach ($this->autocompleters as $tag => $config) {
       if(isset($_POST[$tag])){