X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_filter.inc;h=0b5f1778a9263186bbada5d718d35540cb2ffcd6;hb=7eada0d8c03ea6bbe6e0bf41a789de38715eba9e;hp=4a132154ccdc52eed46a0e982dc3dc193604c48e;hpb=9fd2e5d3dfc118c48d94bfec2b8faf5ebd663876;p=gosa.git diff --git a/gosa-core/include/class_filter.inc b/gosa-core/include/class_filter.inc index 4a132154c..0b5f1778a 100644 --- a/gosa-core/include/class_filter.inc +++ b/gosa-core/include/class_filter.inc @@ -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])){