Add Horde_Ldap_Filter::build() to create filters from common configuration values.
authorJan Schneider <jan@horde.org>
Mon, 20 Sep 2010 12:49:06 +0000 (14:49 +0200)
committerJan Schneider <jan@horde.org>
Mon, 20 Sep 2010 12:49:06 +0000 (14:49 +0200)
framework/Group/lib/Horde/Group/Ldap.php
framework/Ldap/lib/Horde/Ldap/Filter.php

index 25cf3a1..807ddf0 100644 (file)
@@ -86,21 +86,7 @@ class Horde_Group_Ldap extends Horde_Group
         }
 
         /* Generate LDAP search filter. */
-        if (!empty($this->_params['filter'])) {
-            $this->_filter = Horde_Ldap_Filter::parse($this->_params['filter']);
-        } elseif (!is_array($this->_params['objectclass'])) {
-            $this->_filter = Horde_Ldap_Filter::create('objectclass', 'equals', $this->_params['objectclass']);
-        } else {
-            $filters = array();
-            foreach ($this->_params['objectclass'] as $objectclass) {
-                $filters[] = Horde_Ldap_Filter::create('objectclass', 'equals', $objectclass);
-            }
-            if (count($filters) == 1) {
-                $this->_filter = $filters[0];
-            } else {
-                $this->_filter = Horde_Ldap_Filter::combine('and', $filters);
-            }
-        }
+        $this->_filter = Horde_Ldap_Filter::build($this->_params);
 
         /* Connect to server. */
         $this->_ldap = new Horde_Ldap($this->_params);
index 3e4850b..f37aceb 100644 (file)
@@ -253,6 +253,38 @@ class Horde_Ldap_Filter
     }
 
     /**
+     * Builds a filter (commonly for objectClass attributes) from different
+     * configuration options.
+     *
+     * @param array $params  Hash with configuration options that build the
+     *                       search filter. Possible hash keys:
+     *                       - 'filter': An LDAP filter string.
+     *                       - 'objectclass' (string): An objectClass name.
+     *                       - 'objectclass' (array): A list of objectClass
+     *                                                names.
+     *
+     * @return Horde_Ldap_Filter  A filter matching the specified criteria.
+     * @throws Horde_Ldap_Exception
+     */
+    public static function build(array $params)
+    {
+        if (!empty($params['filter'])) {
+            return Horde_Ldap_Filter::parse($params['filter']);
+        }
+        if (!is_array($params['objectclass'])) {
+            return Horde_Ldap_Filter::create('objectclass', 'equals', $params['objectclass']);
+        }
+        $filters = array();
+        foreach ($params['objectclass'] as $objectclass) {
+            $filters[] = Horde_Ldap_Filter::create('objectclass', 'equals', $objectclass);
+        }
+        if (count($filters) == 1) {
+            return $filters[0];
+        }
+        return Horde_Ldap_Filter::combine('and', $filters);
+    }
+
+    /**
      * Parses a string into a Horde_Ldap_Filter object.
      *
      * @todo Leaf-mode: Do we need to escape at all? what about *-chars? Check