|
|
@ -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 |
|
|
|