vbenincasa
2010-06-09 d0b981757ab416dfd182e6b91e7f9a66132116f9
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']))
@@ -304,10 +305,13 @@
   *
   * @param array   List of fields to search in
   * @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)
@@ -338,10 +342,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 . ')';
@@ -626,7 +639,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
@@ -680,7 +695,7 @@
    // list of known attribute aliases
    $aliases = array(
      'gn' => 'givenname',
      'rfc822mailbox' => 'mail',
      'rfc822mailbox' => 'email',
      'userid' => 'uid',
      'emailaddress' => 'email',
      'pkcs9email' => 'email',