alecpl
2010-08-12 1a2f8375ded7563964ea24c44c7874a92e6f7b77
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 . ')';
@@ -719,4 +732,3 @@
}
?>