Code

Updated baseSelector
[gosa.git] / gosa-core / include / class_filterLDAP.inc
index 5a6701d65540462693a5b681e7b475167d8e2a60..34aff04a8e5652b6c00a9e61cb5bdb8df7dbb459 100644 (file)
@@ -2,7 +2,7 @@
 
 class filterLDAP {
 
-  static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
+  static function query($base, $scope, $filter, $attributes, $category, $objectStorage= array(""))
   {
     $config= session::global_get('config');
     $ldap= $config->get_ldap_link(TRUE);
@@ -21,20 +21,22 @@ class filterLDAP {
     if (!is_array($category)) {
       $category= array($category);
     }
-    if (!is_array($objectStorage)) {
-      $objectStorage= array($objectStorage);
-    }
+
+    // Store in base - i.e. is a rdn value empty?
+    $storeOnBase= count($objectStorage) == 1 && empty($objectStorage[0]);
+
+    $method= ($storeOnBase && !($flags & GL_SUBSEARCH))?"ls":"search";
 
     // Initialize search bases
     $bases= array();
     
     // Get list of sub bases to search on
-    if (count($objectStorage) == 0) {
+    if ($storeOnBase) {
       $bases[$base]= "";
     } else {
       foreach ($objectStorage as $oc) {
         $oc= preg_replace('/,$/', '', $oc);
-        $tmp= split(',', $oc);
+        $tmp= explode(',', $oc);
         if (count($tmp) == 1) {
           preg_match('/([^=]+)=(.*)$/', $oc, $m);
           if ($flags & GL_SUBSEARCH) {
@@ -69,7 +71,6 @@ class filterLDAP {
       }
 
       // Switch to new base and search
-      $ldap->cd($base);
       if (is_array($dnFilters)){
         $dnFilter= "(|";
         foreach ($dnFilters as $df) {
@@ -79,7 +80,12 @@ class filterLDAP {
       } else {
         $dnFilter= "";
       }
-      $ldap->search ("(&$filter$dnFilter)", $attributes);
+      $ldap->cd($base);
+      if ($method == "ls") {
+        $ldap->ls("(&$filter$dnFilter)", $base, $attributes);
+      } else {
+        $ldap->search("(&$filter$dnFilter)", $attributes);
+      }
 
       // Check for size limit exceeded messages for GUI feedback
       if (preg_match("/size limit/i", $ldap->get_error())){