From: hickert Date: Thu, 29 Jul 2010 13:19:45 +0000 (+0000) Subject: Updated post handling X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=8931e83fa34fe85080c2398adb710007e3acbc11;p=gosa.git Updated post handling git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@19243 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/gosa-core/include/class_filter.inc b/gosa-core/include/class_filter.inc index 04de2dae2..38c4faf4d 100644 --- a/gosa-core/include/class_filter.inc +++ b/gosa-core/include/class_filter.inc @@ -22,444 +22,444 @@ class filter { - var $searches= array(); - var $xmlSearches= array(); - var $attributes= array(); - var $search; - var $defaultSearch; - var $category= ""; - var $objectStorage= array(); - var $base= ""; - var $scope= ""; - var $query; - var $value= ""; - var $initial= false; - var $scopeMode= "auto"; - var $converter= null; - var $pid; - - - function filter($filename) - { - global $config; - - // Load eventually passed filename - if (!$this->load($filename)) { - die("Cannot parse $filename!"); + var $searches= array(); + var $xmlSearches= array(); + var $attributes= array(); + var $search; + var $defaultSearch; + var $category= ""; + var $objectStorage= array(); + var $base= ""; + var $scope= ""; + var $query; + var $value= ""; + var $initial= false; + var $scopeMode= "auto"; + var $converter= null; + var $pid; + + + function filter($filename) + { + global $config; + + // Load eventually passed filename + if (!$this->load($filename)) { + die("Cannot parse $filename!"); + } + + $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); } - $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); - } + function load($filename) + { + $contents = file_get_contents($filename); + $xmlData= xml::xml2array($contents, 1); - function load($filename) - { - $contents = file_get_contents($filename); - $xmlData= xml::xml2array($contents, 1); + if (!isset($xmlData['filterdef'])) { + return false; + } - if (!isset($xmlData['filterdef'])) { - return false; - } + $xmlData= $xmlData["filterdef"]; + + // Load filter + if (isset($xmlData['search'])) { - $xmlData= $xmlData["filterdef"]; + // Array conversion + if (!isset($xmlData['search'][0])) { + $searches= array($xmlData['search']); + } else { + $searches= $xmlData['search']; + } + + /* Store available searches */ + foreach ($searches as $search) { + + /* Do multi conversation */ + if (!isset($search['query'][0])){ + $search['query']= array($search['query']); + } - // Load filter - if (isset($xmlData['search'])) { + /* Store search */ + $this->xmlSearches[$search['tag']]= $search; - // Array conversion - if (!isset($xmlData['search'][0])) { - $searches= array($xmlData['search']); - } else { - $searches= $xmlData['search']; - } + } + } else { + return false; + } - /* Store available searches */ - foreach ($searches as $search) { + // Transfer scope + $this->scopeMode= $xmlData['definition']['scope']; + if ($this->scopeMode == "auto") { + $this->scope= "one"; + } else { + $this->scope= $this->scopeMode; + } - /* Do multi conversation */ - if (!isset($search['query'][0])){ - $search['query']= array($search['query']); + // Transfer attributes + $this->attributes= $xmlData['definition']['attribute']; + if (!is_array($this->attributes)) { + $this->attributes= array($this->attributes); } - /* Store search */ - $this->xmlSearches[$search['tag']]= $search; + // Transfer initial value + if (isset($xmlData['definition']['initial']) && $xmlData['definition']['initial'] == "true"){ + $this->initial= true; + } - } - } else { - return false; - } + // Transfer category + if (isset($xmlData['definition']['category'])){ + $this->category= $xmlData['definition']['category']; + } + if (!is_array($this->category)) { + $this->category= array($this->category); + } - // Transfer scope - $this->scopeMode= $xmlData['definition']['scope']; - if ($this->scopeMode == "auto") { - $this->scope= "one"; - } else { - $this->scope= $this->scopeMode; - } + // Initialize searches and default search mode + $this->defaultSearch= $xmlData['definition']['default']; + $this->reloadFilters(); + $this->setSearch($this->defaultSearch); - // Transfer attributes - $this->attributes= $xmlData['definition']['attribute']; - if (!is_array($this->attributes)) { - $this->attributes= array($this->attributes); + return true; } - // Transfer initial value - if (isset($xmlData['definition']['initial']) && $xmlData['definition']['initial'] == "true"){ - $this->initial= true; - } - // Transfer category - if (isset($xmlData['definition']['category'])){ - $this->category= $xmlData['definition']['category']; - } - if (!is_array($this->category)) { - $this->category= array($this->category); + function reloadFilters() + { + $this->searches= array_merge($this->xmlSearches, userFilter::getFilter($this->category)); + $this->setSearch($this->search); } - // Initialize searches and default search mode - $this->defaultSearch= $xmlData['definition']['default']; - $this->reloadFilters(); - $this->setSearch($this->defaultSearch); - return true; - } + function setSearch($method= null) + { + $patch= null; + // Maybe our search method has gone? + if (!isset($this->searches[$method])) { + $method= $this->defaultSearch; + } - function reloadFilters() - { - $this->searches= array_merge($this->xmlSearches, userFilter::getFilter($this->category)); - $this->setSearch($this->search); - } + // Try to use it, but bail out if there's no help... + if (isset($this->searches[$method])) { + $this->query= $this->searches[$method]['query']; + $this->search= $method; + } else { + die ("Invalid search module!"); + } + } - function setSearch($method= null) - { - $patch= null; + function getTextfield($tag, $value= "", $element= null) + { + $size= 30; + $maxlength= 30; + $result= ""; + if ($element && isset($element['autocomplete'])) { + $frequency= "0.5"; + $characters= "1"; + if (isset($element['autocomplete']['frequency'])) { + $frequency= $element['autocomplete']['frequency']; + } + if (isset($element['autocomplete']['characters'])) { + $characters= $element['autocomplete']['characters']; + } + $result.= "
". + ""; - // Maybe our search method has gone? - if (!isset($this->searches[$method])) { - $method= $this->defaultSearch; + $this->autocompleters[$tag]= $element; + } + return $result; } - // Try to use it, but bail out if there's no help... - if (isset($this->searches[$method])) { - $this->query= $this->searches[$method]['query']; - $this->search= $method; - } else { - die ("Invalid search module!"); - } - } - - - function getTextfield($tag, $value= "", $element= null) - { - $size= 30; - $maxlength= 30; - $result= ""; - if ($element && isset($element['autocomplete'])) { - $frequency= "0.5"; - $characters= "1"; - if (isset($element['autocomplete']['frequency'])) { - $frequency= $element['autocomplete']['frequency']; - } - if (isset($element['autocomplete']['characters'])) { - $characters= $element['autocomplete']['characters']; - } - $result.= "
". - ""; - - $this->autocompleters[$tag]= $element; + + function getCurrentBase() + { + if (isset($this->search->base) && (string)$this->search->scope != "auto") { + return false; + } + + return $this->base; } - return $result; - } - function getCurrentBase() - { - if (isset($this->search->base) && (string)$this->search->scope != "auto") { - return false; + function getCurrentScope() + { + if (isset($this->search->scope) && (string)$this->search->scope != "auto") { + return (string)$this->search->scope; + } + + return $this->scope; } - return $this->base; - } + + function setConverter($hook) + { + $this->converter= $hook; + } - function getCurrentScope() - { - if (isset($this->search->scope) && (string)$this->search->scope != "auto") { - return (string)$this->search->scope; + function setObjectStorage($storage) + { + $this->objectStorage= $storage; } - return $this->scope; - } + function setBase($base) + { + $this->base= $base; + } - function setConverter($hook) - { - $this->converter= $hook; - } + function setCurrentScope($scope) + { + $this->scope= $scope; + } - function setObjectStorage($storage) - { - $this->objectStorage= $storage; - } - function setBase($base) - { - $this->base= $base; - } + function render() + { + $content= "
".$this->renderFilterMenu().""; + $content.= "
".$this->getTextfield('search_filter', $this->value, $this->searches[$this->search])."
". + " 
"; + // Return meta data + return ("".$content); + } - function setCurrentScope($scope) - { - $this->scope= $scope; - } + function query() + { + 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'])) { + die("No backend specified in search config."); + } - function render() - { - $content= "
".$this->renderFilterMenu().""; - $content.= "
".$this->getTextfield('search_filter', $this->value, $this->searches[$this->search])."
". - " 
"; + // Is backend available? + $backend= "filter".$query['backend']; + if (!isset($class_mapping["$backend"])) { + die("Invalid backend specified in search config."); + } - // Return meta data - return ("".$content); - } + // Load filter and attributes + $filter= $query['filter']; + + // Handle converters if present + if ($this->converter) { + preg_match('/([^:]+)::(.*)$/', $this->converter, $m); + if ($this->value == "") { + $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', "*", $filter)); + } else { + $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->value, $filter)); + } + } + // Do not replace escaped \$ - This is required to be able to search for e.g. windows machines. + if ($this->value == "") { + $filter= preg_replace("/\\$/", '*', $filter); + } else { + $filter= preg_replace("/\\$/", "*".normalizeLdap($this->value)."*", $filter); + } - function query() - { - global $class_mapping; - $result= array(); + $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $this->attributes, $this->category, $this->objectStorage)); + } - // Return empty list if initial is not set - if (!$this->initial) { - $this->initial= true; - return $result; + return ($result); } - // Go thru all queries and merge results - foreach ($this->query as $query) { - if (!isset($query['backend']) || !isset($query['filter'])) { - die("No backend specified in search config."); - } - - // Is backend available? - $backend= "filter".$query['backend']; - if (!isset($class_mapping["$backend"])) { - die("Invalid backend specified in search config."); - } - - // Load filter and attributes - $filter= $query['filter']; - - // Handle converters if present - if ($this->converter) { - preg_match('/([^:]+)::(.*)$/', $this->converter, $m); - if ($this->value == "") { - $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', "*", $filter)); - } else { - $filter= call_user_func(array($m[1], $m[2]), preg_replace('/\$/', $this->value, $filter)); - } - } - // Do not replace escaped \$ - This is required to be able to search for e.g. windows machines. - if ($this->value == "") { - $filter= preg_replace("/\\$/", '*', $filter); - } else { - $filter= preg_replace("/\\$/", "*".normalizeLdap($this->value)."*", $filter); - } - $result= array_merge($result, call_user_func(array($backend, 'query'), $this->base, $this->scope, $filter, $this->attributes, $this->category, $this->objectStorage)); - } + function update() + { + if (isset($_POST['FILTER_PID']) && $_POST['FILTER_PID'] == $this->pid) { + // Save input field + if (isset($_POST['search_filter'])) { + $this->value= get_post('search_filter'); + } + + // Save scope if needed + if ($this->scopeMode == "auto" && isset($_POST['act']) && $_POST['act'] == "toggle-subtree") { + $this->scope= ($this->scope == "one")?"sub":"one"; + } - return ($result); - } - - - function update() - { - if (isset($_POST['FILTER_PID']) && $_POST['FILTER_PID'] == $this->pid) { - // Save input field - if (isset($_POST['search_filter'])) { - $this->value= validate($_POST['search_filter']); - } - - // Save scope if needed - if ($this->scopeMode == "auto" && isset($_POST['act']) && $_POST['act'] == "toggle-subtree") { - $this->scope= ($this->scope == "one")?"sub":"one"; - } - - // Switch filter? - if (isset($_POST['act'])) { - foreach ($this->searches as $tag => $cfg) { - if ($_POST['act'] == "filter-$tag") { - $this->setSearch($tag); - break; - } + // Switch filter? + if (isset($_POST['act'])) { + foreach ($this->searches as $tag => $cfg) { + if ($_POST['act'] == "filter-$tag") { + $this->setSearch($tag); + break; + } + } + } } - } + } - } + function getCompletitionList($config, $value="*") + { + global $class_mapping; + $res= array(); - function getCompletitionList($config, $value="*") - { - global $class_mapping; - $res= array(); + // Load result attributes + $attributes= $config['autocomplete']['attribute']; + if (!is_array($attributes)) { + $attributes= array($attributes); + } - // Load result attributes - $attributes= $config['autocomplete']['attribute']; - if (!is_array($attributes)) { - $attributes= array($attributes); - } + // Do the query + $result= array(); - // Do the query - $result= array(); + // Is backend available? +# FIXME + $queries= $config['query']; + if (!isset($queries[0])){ + $queries= array($queries); + } + foreach ($queries as $query) { + $backend= "filter".$query['backend']; + if (!isset($class_mapping["$backend"])) { + die("Invalid backend specified in search config."); + } + $filter= preg_replace("/\\$/", "*".normalizeLdap($value)."*", $query['filter']); - // Is backend available? - # FIXME - $queries= $config['query']; - if (!isset($queries[0])){ - $queries= array($queries); - } - foreach ($queries as $query) { - $backend= "filter".$query['backend']; - if (!isset($class_mapping["$backend"])) { - die("Invalid backend specified in search config."); - } - $filter= preg_replace("/\\$/", "*".normalizeLdap($value)."*", $query['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)); + } - foreach ($result as $entry) { - foreach ($attributes as $attribute) { - if (is_array($entry[$attribute])) { - for ($i= 0; $i<$entry[$attribute]['count']; $i++) { - if (mb_stristr($entry[$attribute][$i], $value)) { - $res[]= $entry[$attribute][$i]; + foreach ($result as $entry) { + foreach ($attributes as $attribute) { + if (is_array($entry[$attribute])) { + for ($i= 0; $i<$entry[$attribute]['count']; $i++) { + if (mb_stristr($entry[$attribute][$i], $value)) { + $res[]= $entry[$attribute][$i]; + } + } + } else { + $res[]= $entry[$attribute]; + } } - } - } else { - $res[]= $entry[$attribute]; } - } + + return $res; } - return $res; - } + function processAutocomplete() + { + global $class_mapping; + $result= array(); - function processAutocomplete() - { - global $class_mapping; - $result= array(); + // Introduce maximum number of entries + $max= 25; - // Introduce maximum number of entries - $max= 25; + if(isset($this->searches[$this->search]['autocomplete'])){ + $result= $this->getCompletitionList($this->searches[$this->search], get_post('search_filter')); + $result= array_unique($result); + asort($result); - if(isset($this->searches[$this->search]['autocomplete'])){ - $result= $this->getCompletitionList($this->searches[$this->search], $_POST['search_filter']); - $result= array_unique($result); - asort($result); + echo ''; } - } - function getObjectBase($dn) - { - global $config; - $base= ""; + 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); - } + // 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']; - } + /* Set to base, if we're not on a correct subtree */ + if (!isset($config->idepartments[$base])){ + $base= $config->current['BASE']; + } - return $base; - } + return $base; + } - function renderFilterMenu() - { - // Load shortcut - $result= "$script"; + } - function getFixedFilters() - { - return array_keys($this->searches); - } + function getFixedFilters() + { + return array_keys($this->searches); + } }