Code

Updated defaults
[gosa.git] / gosa-core / include / class_filter.inc
index 4d8260fc457e7b37938a64a68fa968b1dd79ad78..3a9e38d75856c25e3fa1bb45c3019d840dfa3fc5 100644 (file)
@@ -36,6 +36,7 @@ class filter {
   var $scopeMode= "auto";
   var $alphabet= null;
   var $converter= array();
+  var $pid;
 
 
   function filter($filename)
@@ -46,6 +47,8 @@ class filter {
     if (!$this->load($filename)) {
       die("Cannot parse $filename!");
     }
+
+    $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); 
   }
 
 
@@ -54,11 +57,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'])) {
@@ -124,13 +127,6 @@ class filter {
         }
       }
 
-      // Sort elements for element length to allow proper replacing later on
-      function strlenSort($a, $b) {
-        if (strlen($a['tag']) == strlen($b['tag'])) {
-          return 0;
-        }
-       return (strlen($a['tag']) < strlen($b['tag']) ? -1 : 1);
-      } 
       uasort($this->elements, 'strlenSort');
       $this->elements= array_reverse($this->elements);
 
@@ -344,7 +340,7 @@ class filter {
     }
 
     // Load template
-    return ("<input type='hidden' name='FILTER_LOADED' value='1'>".$smarty->fetch(get_template_path($this->xmlData['definition']['template'], true)));
+    return ("<input type='hidden' name='FILTER_PID' value='".$this->pid."'>".$smarty->fetch(get_template_path($this->xmlData['definition']['template'], true)));
   }
 
 
@@ -353,6 +349,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'])) {
@@ -428,7 +430,7 @@ class filter {
       }
     }
 
-    if (isset($_POST['FILTER_LOADED'])) {
+    if (isset($_POST['FILTER_PID']) && $_POST['FILTER_PID'] == $this->pid) {
       // Load post values and adapt filter, base and scope accordingly - but
       // only if we didn't get a _GET
       foreach ($this->elements as $tag => $element) {
@@ -480,7 +482,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];
@@ -520,6 +524,38 @@ class filter {
   }
 
 
+  function getObjectBase($dn)
+  {
+    global $config;
+    $base= "";
+
+    // Try every object storage
+    $storage= $this->objectStorage;
+    if (!is_array($storage)){
+      $storage= array($storage);
+    }
+    foreach ($storage as $location) {
+      $pattern= "/^[^,]+,".preg_quote($location, '/')."/i";
+      $base= preg_replace($pattern, '', $dn);
+    }
+
+    /* Set to base, if we're not on a correct subtree */
+    if (!isset($config->idepartments[$base])){
+      $base= $config->current['BASE'];
+    }
+
+    return $base;
+  }
+
+
 }
 
+// Sort elements for element length to allow proper replacing later on
+function strlenSort($a, $b) {
+  if (strlen($a['tag']) == strlen($b['tag'])) {
+    return 0;
+  }
+  return (strlen($a['tag']) < strlen($b['tag']) ? -1 : 1);
+} 
+
 ?>