From 86552ffc8f0f76651747a1faaed9bbda6d015f98 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 07 Feb 2013 09:35:30 -0500
Subject: [PATCH] Finish hierarchical groups browsing in LDAP address books; add according UI elements and styles to the skins; adapt habavior of the compose address book widget

---
 program/lib/Roundcube/rcube_ldap.php |   23 ++++++++++-------------
 1 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/program/lib/Roundcube/rcube_ldap.php b/program/lib/Roundcube/rcube_ldap.php
index e54e659..7290490 100644
--- a/program/lib/Roundcube/rcube_ldap.php
+++ b/program/lib/Roundcube/rcube_ldap.php
@@ -924,7 +924,7 @@
             // We have a connection but no result set, attempt to get one.
             if (empty($this->filter)) {
                 // The filter is not set, set it.
-                $this->filter = $this->prop['filter'];
+                $this->filter = $prop['filter'];
             }
 
             $count = (int) $this->_exec_search($prop, true);
@@ -1299,7 +1299,7 @@
             // change the group membership of the contact
             if ($this->groups) {
                 $group_ids = $this->get_record_groups($dn);
-                foreach ($group_ids as $group_id)
+                foreach ($group_ids as $group_id => $group_prop)
                 {
                     $this->remove_from_group($group_id, $dn);
                     $this->add_to_group($group_id, $newdn);
@@ -1365,7 +1365,7 @@
             if ($this->groups) {
                 $dn = self::dn_encode($dn);
                 $group_ids = $this->get_record_groups($dn);
-                foreach ($group_ids as $group_id) {
+                foreach ($group_ids as $group_id => $group_prop) {
                     $this->remove_from_group($group_id, $dn);
                 }
             }
@@ -1735,11 +1735,11 @@
             // list regular groups configuration as special filter
             if (!empty($this->prop['groups']['filter'])) {
                 $id = '__groups__';
-                $groups[$id] = array('ID' => $id, 'name' => rcube_label('groups')) + $this->prop['groups'];
+                $groups[$id] = array('ID' => $id, 'name' => rcube_label('groups'), 'virtual' => true) + $this->prop['groups'];
             }
 
             foreach ($this->prop['group_filters'] as $id => $prop) {
-                $groups[$id] = $prop + array('ID' => $id, 'name' => ucfirst($id));
+                $groups[$id] = $prop + array('ID' => $id, 'name' => ucfirst($id), 'virtual' => true);
             }
 
             return $groups;
@@ -1830,7 +1830,7 @@
             $dn = self::dn_decode($group_id);
 
             $this->_debug("C: Read Group [dn: $dn]");
-            if ($result = @ldap_read($this->conn, $dn, '(objectClass=*)', array('dn','objectClass','member','uniqueMember','memberURL',$name_attr))) {
+            if ($result = @ldap_read($this->conn, $dn, '(objectClass=*)', array('dn','objectClass','member','uniqueMember','memberURL',$name_attr,$this->fieldmap['email']))) {
                 $list = ldap_get_entries($this->conn, $result);
                 $entry = $list[0];
                 $group_name = is_array($entry[$name_attr]) ? $entry[$name_attr][0] : $entry[$name_attr];
@@ -1858,10 +1858,7 @@
      */
     function get_group($group_id)
     {
-        if (($group_cache = $this->cache->get('groups')) === null)
-            $group_cache = $this->_fetch_groups();
-
-        $group_data = $group_cache[$group_id];
+        $group_data = $this->get_group_entry($group_id);
         unset($group_data['dn'], $group_data['member_attr']);
 
         return $group_data;
@@ -2040,7 +2037,7 @@
 
         $this->_debug("C: Search [$filter][dn: $base_dn]");
 
-        $res = @ldap_search($this->conn, $base_dn, $filter, array($name_attr));
+        $res = @ldap_search($this->conn, $base_dn, $filter, array('dn', $name_attr));
         if ($res === false)
         {
             $this->_debug("S: ".ldap_error($this->conn));
@@ -2053,8 +2050,8 @@
         for ($i=0; $i<$ldap_data["count"]; $i++)
         {
             $group_name = $ldap_data[$i][$name_attr][0];
-            $group_id = self::dn_encode($group_name);
-            $groups[$group_id] = $group_id;
+            $group_id = self::dn_encode($ldap_data[$i]['dn']);
+            $groups[$group_id] = array('ID' => $group_id, 'name' => $group_name, 'dn' => $ldap_data[$i]['dn']);
         }
         return $groups;
     }

--
Gitblit v1.9.1