From: cajus Date: Fri, 5 Mar 2010 16:51:10 +0000 (+0000) Subject: Updated filtering. Warning: breaks all headpages except the user one! X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=a36c018156b0df7ae8c85d14230a64f47a689da1;p=gosa.git Updated filtering. Warning: breaks all headpages except the user one! git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@16313 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/gosa-core/include/class_filter.inc b/gosa-core/include/class_filter.inc index 84da1b5f2..8a0a9dfc1 100644 --- a/gosa-core/include/class_filter.inc +++ b/gosa-core/include/class_filter.inc @@ -23,19 +23,17 @@ class filter { var $xmlData; - var $elements= array(); - var $elementValues= array(); - var $alphabetElements= array(); - var $autocompleter= array(); + var $searches= array(); + var $search; var $category= ""; var $objectStorage= array(); var $base= ""; var $scope= ""; var $query; + var $value= ""; var $initial= false; var $scopeMode= "auto"; - var $alphabet= null; - var $converter= array(); + var $converter= null; var $pid; @@ -65,23 +63,38 @@ class filter { // Load filter if (isset($this->xmlData['search'])) { - if (!isset($this->xmlData['search']['query'][0])){ - $this->xmlData['search']['query']= array($this->xmlData['search']['query']); - } - // Move information - $entry= $this->xmlData['search']; - $this->scopeMode= $entry['scope']; - if ($entry['scope'] == "auto") { - $this->scope= "one"; + // Array conversion + if (!is_array($this->xmlData['search'])) { + $searches= array($this->xmlData['search']); } else { - $this->scope= $entry['scope']; + $searches= $this->xmlData['search']; + } + + /* Store available searches */ + foreach ($this->xmlData['search'] as $search) { + + /* Do multi conversation */ + if (!is_array($search['query'])){ + $search['query']= array($search['query']); + } + + /* Store search */ + $this->searches[$search['label']]= $search; + } - $this->query= $entry['query']; } else { return false; } + // Transfer scope + $this->scopeMode= $this->xmlData['definition']['scope']; + if ($this->scopeMode == "auto") { + $this->scope= "one"; + } else { + $this->scope= $this->scopeMode; + } + // Transfer initial value if (isset($this->xmlData['definition']['initial']) && $this->xmlData['definition']['initial'] == "true"){ $this->initial= true; @@ -92,47 +105,25 @@ class filter { $this->category= $this->xmlData['definition']['category']; } - // Generate formular data - if (isset($this->xmlData['element'])) { - if (!isset($this->xmlData['element'][0])){ - $this->xmlData['element']= array($this->xmlData['element']); - } - foreach ($this->xmlData['element'] as $element) { + // Set default search mode + $this->setSearch($this->xmlData['definition']['default']); - // Ignore elements without type - if (!isset($element['type']) || !isset($element['tag'])) { - next; - } - - $tag= $element['tag']; - - // Fix arrays - if (isset($element['value']) && !isset($element['value'][0])) { - $element['value']= array($element['value']); - } + return true; + } - // Store element for quick access - $this->elements[$tag] = $element; - // Preset elementValues with default values if exist - if (isset($element['default']) && !is_array($element['default'])) { - $this->elementValues[$tag] = $element['default']; - } else { - $this->elementValues[$tag] = ""; - } - - // Does this element react on alphabet links? - if (isset($element['alphabet']) && $element['alphabet'] == "true") { - $this->alphabetElements[]= $tag; - } + function setSearch($method) + { + // Move information + if (isset($this->searches[$method])) { + $this->query= $this->searches[$method]['query']; + if (!isset($this->query[0])) { + $this->query= array($this->query); } - - uasort($this->elements, 'strlenSort'); - $this->elements= array_reverse($this->elements); - + $this->search= $method; + } else { + die ("Invalid search module!"); } - - return true; } @@ -168,64 +159,6 @@ class filter { } - function getCheckbox($element) - { - $tag= $element['tag']; - $checked= ""; - if ($this->elementValues[$tag] == "true") { - $checked= " checked"; - } - - $result= ""; - return $result; - } - - - function getCombobox($element) - { - $result= ""; - - return $result; - } - - - function setComboBoxOptions($tag, $options) - { - if (isset($this->elements[$tag]) && $this->elements[$tag]['type'] == "combobox") { - - $this->elements[$tag]['value']= array(); - foreach ($options as $key => $label) { - $this->elements[$tag]['value'][]= array('label' => $label, 'key' => $key); - } - } - } - - function getCurrentBase() { if (isset($this->search->base) && (string)$this->search->scope != "auto") { @@ -246,9 +179,9 @@ class filter { } - function setConverter($field, $hook) + function setConverter($hook) { - $this->converter[$field]= $hook; + $this->converter= $hook; } @@ -270,45 +203,6 @@ class filter { } - function renderAlphabet($columns= 10) - { - // Return pre-rendered alphabet if available - if ($this->alphabet) { - return ($this->alphabet); - } - - $characters= _("*ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); - $alphabet= ""; - $c= 0; - - /* Fill cells with charaters */ - for ($i= 0, $l= mb_strlen($characters, 'UTF8'); $i<$l; $i++){ - if ($c == 0){ - $alphabet.= ""; - } - - $ch = mb_substr($characters, $i, 1, "UTF8"); - $alphabet.= " ".$ch." "; - - if ($c++ == $columns){ - $alphabet.= ""; - $c= 0; - } - } - - /* Fill remaining cells */ - while ($c++ <= $columns){ - $alphabet.= " "; - } - - /* Save alphabet */ - $this->alphabet= "$alphabet
"; - - return ($this->alphabet); - } - - function renderApply() { return (""); @@ -324,43 +218,10 @@ class filter { function render() { - $smarty= get_smarty(); - $smarty->assign("ALPHABET", $this->renderAlphabet()); - $smarty->assign("APPLY", $this->renderApply()); - $smarty->assign("SCOPE", $this->renderScope()); - - // Load template and replace elementsHtml[] - foreach ($this->elements as $tag => $element) { - $htmlCode= ""; - switch ($element['type']) { - case "textfield": - $htmlCode = $this->getTextfield($element); - break; - - case "checkbox": - $htmlCode = $this->getCheckbox($element); - break; - - case "combobox": - $htmlCode = $this->getCombobox($element); - break; + $content= "Search comes here..."; - default: - die ("Unknown element type specified!"); - } - $smarty->assign("$tag", $htmlCode); - } - - // Try to load template from plugin the folder first... - $file = get_template_path($this->xmlData['definition']['template'], true); - - // ... if this fails, try to load the file from the theme folder. - if(!file_exists($file)){ - $file = get_template_path($this->xmlData['definition']['template']); - } - - // Load template - return ("".$smarty->fetch($file)); + // Return meta data + return ("".$content); } @@ -391,32 +252,17 @@ class filter { $filter= $query['filter']; $attributes= $query['attribute']; - // Generate final filter - foreach ($this->elements as $tag => $element) { - if (!isset($element['set']) || !isset($element['unset'])) { - continue; - } - - // 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']; - } + // Handle converters if present + if ($this->converter) { + preg_match('/([^:]+)::(.*)$/', $this->converter, $m); + $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->elementValues[$tag] == "") { - $e_unset= preg_replace('/([^\\\\])\$/', '${1}'.normalizeLdap($this->elementValues[$tag]), $e_unset); - $e_unset= preg_replace('/\\\\\$/','$', $e_unset); - $filter= preg_replace("/\\$$tag/", $e_unset, $filter); - } else { - $e_set= preg_replace('/([^\\\\])\$/', '${1}'.normalizeLdap($this->elementValues[$tag]), $e_set); - $e_set= preg_replace('/\\\\\$/','$', $e_set); - $filter= preg_replace("/\\$$tag/", $e_set, $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, $attributes, $this->category, $this->objectStorage)); @@ -426,38 +272,13 @@ class filter { } - function isValid() - { - foreach ($this->elements as $tag => $element) { - if (isset($element->regex)){ - if (!preg_match('/'.(string)$element->regex.'/', $this->elementValues[$tag])){ - return false; - } - } - } - return true; - } - - function update() { - /* React on alphabet links if needed */ - if (isset($_GET['filter'])){ - $s= mb_substr(validate($_GET['filter']), 0, 1, "UTF8"); - foreach ($this->alphabetElements as $tag) { - $this->elementValues[$tag]= $s; - } - } - 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) { - if (isset($_POST[$tag])){ - $this->elementValues[$tag]= validate($_POST[$tag]); - } else { - $this->elementValues[$tag]= ""; - } + + // Save input field + if (isset($_POST['search_filter'])) { + $this->value= validate($_POST['search_filter']); } // Save scope if needed @@ -469,7 +290,7 @@ class filter { } - function getCompletitionList($config, $tag, $value="*") + function getCompletitionList($config, $value="*") { global $class_mapping; $res= array(); @@ -488,7 +309,7 @@ class filter { } // Make filter - $filter= preg_replace("/\\$$tag/", normalizeLdap($value), $filter); + $filter= preg_replace("/\\$/", normalizeLdap($value), $filter); if (isset($config['base']) && isset($config['scope']) && isset($config['category'])) { $result= call_user_func(array($backend, 'query'), $config['base'], $config['scope'], $filter, $attributes, $config["category"], $config["objectStorage"]); @@ -523,22 +344,20 @@ class filter { // Introduce maximum number of entries $max= 25; - foreach ($this->autocompleters as $tag => $config) { - if(isset($_POST[$tag])){ - $result= $this->getCompletitionList($config, $tag, $_POST[$tag]); - $result= array_unique($result); - asort($result); - - echo ''; + echo ''; } } @@ -565,16 +384,7 @@ class filter { 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); -} ?> diff --git a/gosa-core/include/class_management.inc b/gosa-core/include/class_management.inc index 8f9827a2f..60eb713e8 100644 --- a/gosa-core/include/class_management.inc +++ b/gosa-core/include/class_management.inc @@ -141,9 +141,6 @@ class management $this->filter->update(); session::global_set(get_class($this)."_filter", $this->filter); session::set('autocomplete', $this->filter); - if (!$this->filter->isValid()){ - msg_dialog::display(_("Filter error"), _("The filter is incomplete!"), ERROR_DIALOG); - } } // Handle actions (POSTs and GETs) diff --git a/gosa-core/plugins/admin/users/user-filter.tpl b/gosa-core/plugins/admin/users/user-filter.tpl deleted file mode 100644 index 347dc4f18..000000000 --- a/gosa-core/plugins/admin/users/user-filter.tpl +++ /dev/null @@ -1,36 +0,0 @@ -
- -

Filter - - - {$TEMPLATES} 
- {$POSIX} 
- {$MAIL} 
- {$SAMBA} 
- -
- - {$SCOPE} - - - - - - -
- - - {$NAME} -
- - - - - -
- {$APPLY} -
- -

diff --git a/gosa-core/plugins/admin/users/user-filter.xml b/gosa-core/plugins/admin/users/user-filter.xml index 5b42c1853..90ae3ee3c 100644 --- a/gosa-core/plugins/admin/users/user-filter.xml +++ b/gosa-core/plugins/admin/users/user-filter.xml @@ -3,14 +3,16 @@ users - true + All + auto + LDAP - (&(objectClass=gosaAccount)$TEMPLATES$NAME$SAMBA$POSIX$MAIL) + (&(objectClass=gosaAccount)(|(cn=$)(sn=$)(uid=$))) dn objectClass givenName @@ -18,57 +20,49 @@ uid userPassword - auto + + cn + 0.5 + 3 + - - textfield - NAME - 20 - 60 - - - (|(cn=*$*)(sn=*$*)(givenName=*$*)) - true - + + + LDAP - (&(objectClass=gosaAccount)(|(cn=*$NAME*)(sn=*$NAME*)(givenName=*$NAME*))) + (&(objectClass=gosaAccount)(objectClass=posixAccount)(|(cn=$)(sn=$)(uid=$))) + dn + objectClass + givenName + sn + uid + userPassword + + cn 0.5 3 - - - - checkbox - TEMPLATES - - (!(objectClass=gosaUserTemplate)) - - - - - checkbox - POSIX - true - (!(objectClass=posixAccount)) - - - - - checkbox - MAIL - true - (!(objectClass=gosaMailAccount)) - - + - - checkbox - SAMBA - true - (!(objectClass=sambaSamAccount)) - - + + + + LDAP + (&(objectClass=gosaAccount)(objectClass=gosaMailAccount)(|(cn=$)(sn=$)(uid=$)(mail=$))) + dn + objectClass + givenName + sn + uid + userPassword + + + mail + 0.5 + 3 + + diff --git a/gosa-core/plugins/admin/users/user-list.tpl b/gosa-core/plugins/admin/users/user-list.tpl index cab19e704..7cbddbd0c 100644 --- a/gosa-core/plugins/admin/users/user-list.tpl +++ b/gosa-core/plugins/admin/users/user-list.tpl @@ -13,6 +13,7 @@ {$RELOAD} {t}Base{/t} {$BASE} {$ACTIONS} + {$FILTER} @@ -21,10 +22,6 @@ {$LIST} - -