From 1a2f8375ded7563964ea24c44c7874a92e6f7b77 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Thu, 12 Aug 2010 03:11:28 -0400 Subject: [PATCH] - add message_part_structure hook also for text parts of mixed messages --- program/include/rcube_ldap.php | 30 ++++++++++++++++++++++-------- 1 files changed, 22 insertions(+), 8 deletions(-) diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php index 4cacd52..2754794 100644 --- a/program/include/rcube_ldap.php +++ b/program/include/rcube_ldap.php @@ -99,6 +99,7 @@ foreach ($this->prop['hosts'] as $host) { + $host = rcube_parse_host($host); $this->_debug("C: Connect [$host".($this->prop['port'] ? ':'.$this->prop['port'] : '')."]"); if ($lc = @ldap_connect($host, $this->prop['port'])) @@ -131,13 +132,14 @@ // Get the pieces needed for variable replacement. $fu = $RCMAIL->user->get_username(); list($u, $d) = explode('@', $fu); - + $dc = 'dc='.strtr($d, array('.' => ',dc=')); // hierarchal domain string + // Replace the bind_dn and base_dn variables. - $replaces = array('%fu' => $fu, '%u' => $u, '%d' => $d); + $replaces = array('%dc' => $dc, '%d' => $d, '%fu' => $fu, '%u' => $u); $this->prop['bind_dn'] = strtr($this->prop['bind_dn'], $replaces); $this->prop['base_dn'] = strtr($this->prop['base_dn'], $replaces); } - + if (!empty($this->prop['bind_dn']) && !empty($this->prop['bind_pass'])) $this->ready = $this->bind($this->prop['bind_dn'], $this->prop['bind_pass']); } @@ -306,9 +308,11 @@ * @param string Search value * @param boolean True for strict, False for partial (fuzzy) matching * @param boolean True if results are requested, False if count only + * @param boolean (Not used) + * @param array List of fields that cannot be empty * @return array Indexed list of contact records and 'count' value */ - function search($fields, $value, $strict=false, $select=true) + function search($fields, $value, $strict=false, $select=true, $nocount=false, $required=array()) { // special treatment for ID-based search if ($fields == 'ID' || $fields == $this->primary_key) @@ -339,10 +343,19 @@ $filter .= "($f=$wc" . rcube_ldap::quote_string($value) . "$wc)"; } $filter .= ')'; - + + // add required (non empty) fields filter + $req_filter = ''; + foreach ((array)$required as $field) + if ($f = $this->_map_field($field)) + $req_filter .= "($f=*)"; + + if (!empty($req_filter)) + $filter = '(&' . $req_filter . $filter . ')'; + // avoid double-wildcard if $value is empty $filter = preg_replace('/\*+/', '*', $filter); - + // add general filter to query if (!empty($this->prop['filter'])) $filter = '(&(' . preg_replace('/^\(|\)$/', '', $this->prop['filter']) . ')' . $filter . ')'; @@ -627,7 +640,9 @@ $this->_debug("C: Search [".$filter."]"); - if ($this->ldap_result = @$function($this->conn, $this->prop['base_dn'], $filter, array_values($this->fieldmap), 0, 0)) { + if ($this->ldap_result = @$function($this->conn, $this->prop['base_dn'], $filter, + array_values($this->fieldmap), 0, (int) $this->prop['sizelimit'], (int) $this->prop['timelimit']) + ) { $this->_debug("S: ".ldap_count_entries($this->conn, $this->ldap_result)." record(s)"); return true; } else @@ -717,4 +732,3 @@ } -?> -- Gitblit v1.9.1