- Improved member attribute detection with fallback in create_group()

pull/1/head
alecpl 12 years ago
parent 559446dfed
commit 097dbc6870

@ -1673,23 +1673,7 @@ class rcube_ldap extends rcube_addressbook
$groups[$group_id]['ID'] = $group_id;
$groups[$group_id]['dn'] = $ldap_data[$i]['dn'];
$groups[$group_id]['name'] = $group_name;
$groups[$group_id]['member_attr'] = $this->prop['member_attr'];
// check objectClass attributes of group and act accordingly
for ($j=0; $j < $ldap_data[$i]['objectclass']['count']; $j++) {
switch (strtolower($ldap_data[$i]['objectclass'][$j])) {
case 'group':
case 'groupofnames':
case 'kolabgroupofnames':
$groups[$group_id]['member_attr'] = 'member';
break;
case 'groupofuniquenames':
case 'kolabgroupofuniquenames':
$groups[$group_id]['member_attr'] = 'uniqueMember';
break;
}
}
$groups[$group_id]['member_attr'] = $this->get_group_member_attr($ldap_data[$i]['objectclass']);
// list email attributes of a group
for ($j=0; $ldap_data[$i][$email_attr] && $j < $ldap_data[$i][$email_attr]['count']; $j++) {
@ -1750,8 +1734,8 @@ class rcube_ldap extends rcube_addressbook
$base_dn = $this->groups_base_dn;
$new_dn = "cn=$group_name,$base_dn";
$new_gid = self::dn_encode($group_name);
$member_attr = $this->prop['groups']['member_attr'];
$name_attr = $this->prop['groups']['name_attr'];
$member_attr = $this->get_group_member_attr();
$name_attr = $this->prop['groups']['name_attr'] ? $this->prop['groups']['name_attr'] : 'cn';
$new_entry = array(
'objectClass' => $this->prop['groups']['object_classes'],
@ -1903,8 +1887,8 @@ class rcube_ldap extends rcube_addressbook
$base_dn = $this->groups_base_dn;
$contact_dn = self::dn_decode($contact_id);
$name_attr = $this->prop['groups']['name_attr'];
$member_attr = $this->prop['member_attr'];
$name_attr = $this->prop['groups']['name_attr'] ? $this->prop['groups']['name_attr'] : 'cn';
$member_attr = $this->get_group_member_attr();
$add_filter = '';
if ($member_attr != 'member' && $member_attr != 'uniqueMember')
$add_filter = "($member_attr=$contact_dn)";
@ -1931,6 +1915,42 @@ class rcube_ldap extends rcube_addressbook
return $groups;
}
/**
* Detects group member attribute name
*/
private function get_group_member_attr($object_classes = array())
{
if (empty($object_classes)) {
$object_classes = $this->prop['groups']['object_classes'];
}
if (!empty($object_classes)) {
foreach ((array)$object_classes as $oc) {
switch (strtolower($oc)) {
case 'group':
case 'groupofnames':
case 'kolabgroupofnames':
$member_attr = 'member';
break;
case 'groupofuniquenames':
case 'kolabgroupofuniquenames':
$member_attr = 'uniqueMember';
break;
}
}
}
if (!empty($member_attr)) {
return $member_attr;
}
if (!empty($this->prop['groups']['member_attr'])) {
return $this->prop['groups']['member_attr'];
}
return 'member';
}
/**
* Generate BER encoded string for Virtual List View option

Loading…
Cancel
Save