Fix removal of a contact from a group in LDAP addressbook (#1489081)

pull/61/merge
Aleksander Machniak 12 years ago
parent 0826b2a896
commit 40d419d994

@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail CHANGELOG Roundcube Webmail
=========================== ===========================
- Fix removal of a contact from a group in LDAP addressbook (#1489081)
- Support CSV import from Atmail (#1489045) - Support CSV import from Atmail (#1489045)
- Inlcude SQL query in the log on SQL error (#1489064) - Inlcude SQL query in the log on SQL error (#1489064)
- Fix handling untagged responses in IMAP FETCH - "could not load message" error (#1489074) - Fix handling untagged responses in IMAP FETCH - "could not load message" error (#1489074)

@ -370,9 +370,10 @@ abstract class rcube_addressbook
/** /**
* Add the given contact records the a certain group * Add the given contact records the a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be added * @param array|string List of contact identifiers to be added
* @return int Number of contacts added *
* @return int Number of contacts added
*/ */
function add_to_group($group_id, $ids) function add_to_group($group_id, $ids)
{ {
@ -383,9 +384,10 @@ abstract class rcube_addressbook
/** /**
* Remove the given contact records from a certain group * Remove the given contact records from a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be removed * @param array|string List of contact identifiers to be removed
* @return int Number of deleted group members *
* @return int Number of deleted group members
*/ */
function remove_from_group($group_id, $ids) function remove_from_group($group_id, $ids)
{ {

@ -879,9 +879,10 @@ class rcube_contacts extends rcube_addressbook
/** /**
* Add the given contact records the a certain group * Add the given contact records the a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be added * @param array|string List of contact identifiers to be added
* @return int Number of contacts added *
* @return int Number of contacts added
*/ */
function add_to_group($group_id, $ids) function add_to_group($group_id, $ids)
{ {
@ -926,9 +927,10 @@ class rcube_contacts extends rcube_addressbook
/** /**
* Remove the given contact records from a certain group * Remove the given contact records from a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be removed * @param array|string List of contact identifiers to be removed
* @return int Number of deleted group members *
* @return int Number of deleted group members
*/ */
function remove_from_group($group_id, $ids) function remove_from_group($group_id, $ids)
{ {

@ -1921,9 +1921,10 @@ class rcube_ldap extends rcube_addressbook
/** /**
* Add the given contact records the a certain group * Add the given contact records the a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be added * @param array|string List of contact identifiers to be added
* @return int Number of contacts added *
* @return int Number of contacts added
*/ */
function add_to_group($group_id, $contact_ids) function add_to_group($group_id, $contact_ids)
{ {
@ -1937,8 +1938,8 @@ class rcube_ldap extends rcube_addressbook
$group_name = $group_cache[$group_id]['name']; $group_name = $group_cache[$group_id]['name'];
$member_attr = $group_cache[$group_id]['member_attr']; $member_attr = $group_cache[$group_id]['member_attr'];
$group_dn = "cn=$group_name,$base_dn"; $group_dn = "cn=$group_name,$base_dn";
$new_attrs = array();
$new_attrs = array();
foreach ($contact_ids as $id) foreach ($contact_ids as $id)
$new_attrs[$member_attr][] = self::dn_decode($id); $new_attrs[$member_attr][] = self::dn_decode($id);
@ -1949,28 +1950,32 @@ class rcube_ldap extends rcube_addressbook
$this->cache->remove('groups'); $this->cache->remove('groups');
return count($new_attrs['member']); return count($new_attrs[$member_attr]);
} }
/** /**
* Remove the given contact records from a certain group * Remove the given contact records from a certain group
* *
* @param string Group identifier * @param string Group identifier
* @param array List of contact identifiers to be removed * @param array|string List of contact identifiers to be removed
* @return int Number of deleted group members *
* @return int Number of deleted group members
*/ */
function remove_from_group($group_id, $contact_ids) function remove_from_group($group_id, $contact_ids)
{ {
if (($group_cache = $this->cache->get('groups')) === null) if (($group_cache = $this->cache->get('groups')) === null)
$group_cache = $this->_fetch_groups(); $group_cache = $this->_fetch_groups();
if (!is_array($contact_ids))
$contact_ids = explode(',', $contact_ids);
$base_dn = $this->groups_base_dn; $base_dn = $this->groups_base_dn;
$group_name = $group_cache[$group_id]['name']; $group_name = $group_cache[$group_id]['name'];
$member_attr = $group_cache[$group_id]['member_attr']; $member_attr = $group_cache[$group_id]['member_attr'];
$group_dn = "cn=$group_name,$base_dn"; $group_dn = "cn=$group_name,$base_dn";
$del_attrs = array();
$del_attrs = array(); foreach ($contact_ids as $id)
foreach (explode(",", $contact_ids) as $id)
$del_attrs[$member_attr][] = self::dn_decode($id); $del_attrs[$member_attr][] = self::dn_decode($id);
if (!$this->ldap_mod_del($group_dn, $del_attrs)) { if (!$this->ldap_mod_del($group_dn, $del_attrs)) {
@ -1980,7 +1985,7 @@ class rcube_ldap extends rcube_addressbook
$this->cache->remove('groups'); $this->cache->remove('groups');
return count($del_attrs['member']); return count($del_attrs[$member_attr]);
} }
/** /**

Loading…
Cancel
Save