Simplify code to compose LDAP filters for user search

This commit is contained in:
Thomas Bruederli 2015-05-05 10:51:18 +02:00
parent 2fcb1eba99
commit 97ea819b8a

View file

@ -229,17 +229,12 @@ class kolab_auth_ldap extends rcube_ldap_generic
}
$mode = intval($mode);
$attrs = array();
// resolve field names into ldap attributes
foreach ((array) $fields as $idx => $field) {
if ($attr = $this->fieldmap[$field]) {
$attrs = array_merge($attrs, (array) $attr);
}
else {
$attrs[] = $field;
}
}
// try to resolve field names into ldap attributes
$fieldmap = $this->fieldmap;
$attrs = array_map(function($f) use ($fieldmap) {
return array_key_exists($f, $fieldmap) ? $fieldmap[$f] : $f;
}, (array)$fields);
// compose a full-text-search-like filter
if (count($attrs) > 1 || $mode != 1) {
@ -255,21 +250,11 @@ class kolab_auth_ldap extends rcube_ldap_generic
$req_filter = '';
foreach ((array)$required as $field) {
if (in_array($field, (array)$fields)) // required field is already in search filter
continue;
$attr = array_key_exists($field, $this->fieldmap) ? $this->fieldmap[$field] : $field;
$attrs = (array) $this->fieldmap[$field];
if (empty($attrs)) {
$req_filter .= "($field=*)";
}
else {
if (count($attrs) > 1)
$req_filter .= '(|';
foreach ($attrs as $f)
$req_filter .= "($f=*)";
if (count($attrs) > 1)
$req_filter .= ')';
// only add if required field is not already in search filter
if (!in_array($attr, $attrs)) {
$req_filter .= "($attr=*)";
}
}