Support 'univentiongroup' objectclass, small code improvements

pull/73/merge
Aleksander Machniak 12 years ago
parent 528366f693
commit 1b52cfc45f

@ -550,7 +550,8 @@ class rcube_ldap extends rcube_addressbook
// fetch group object
if (empty($entries)) {
$entries = $this->ldap->read_entries($dn, '(objectClass=*)', array('dn','objectClass','member','uniqueMember','memberURL'));
$attribs = array('dn','objectClass','member','uniqueMember','memberURL');
$entries = $this->ldap->read_entries($dn, '(objectClass=*)', $attribs);
if ($entries === false) {
return $group_members;
}
@ -558,29 +559,25 @@ class rcube_ldap extends rcube_addressbook
for ($i=0; $i < $entries['count']; $i++) {
$entry = $entries[$i];
if (empty($entry['objectclass']))
continue;
$attrs = array();
foreach ((array)$entry['objectclass'] as $objectclass) {
switch (strtolower($objectclass)) {
case "group":
case "groupofnames":
case "kolabgroupofnames":
$group_members = array_merge($group_members, $this->_list_group_members($dn, $entry, 'member', $count));
break;
case "groupofuniquenames":
case "kolabgroupofuniquenames":
$group_members = array_merge($group_members, $this->_list_group_members($dn, $entry, 'uniquemember', $count));
break;
case "groupofurls":
$group_members = array_merge($group_members, $this->_list_group_memberurl($dn, $entry, $count));
break;
if (strtolower($objectclass) == 'groupofurls') {
$members = $this->_list_group_memberurl($dn, $entry, $count);
$group_members = array_merge($group_members, $members);
}
else if (($member_attr = $this->get_group_member_attr(array($objectclass), ''))
&& ($member_attr = strtolower($member_attr)) && !in_array($member_attr, $attrs)
) {
$members = $this->_list_group_members($dn, $entry, $member_attr, $count);
$group_members = array_merge($group_members, $members);
$attrs[] = $member_attr;
}
if ($this->prop['sizelimit'] && count($group_members) > $this->prop['sizelimit'])
break;
if ($this->prop['sizelimit'] && count($group_members) > $this->prop['sizelimit']) {
break 2;
}
}
}
return array_filter($group_members);
@ -599,8 +596,9 @@ class rcube_ldap extends rcube_addressbook
// Use the member attributes to return an array of member ldap objects
// NOTE that the member attribute is supposed to contain a DN
$group_members = array();
if (empty($entry[$attr]))
if (empty($entry[$attr])) {
return $group_members;
}
// read these attributes for all members
$attrib = $count ? array('dn','objectClass') : $this->prop['list_attributes'];
@ -1466,7 +1464,8 @@ class rcube_ldap extends rcube_addressbook
private static function is_group_entry($entry)
{
return array_intersect(
array('group', 'groupofnames', 'kolabgroupofnames', 'groupofuniquenames','kolabgroupofuniquenames','groupofurls'),
array('group', 'groupofnames', 'kolabgroupofnames', 'groupofuniquenames',
'kolabgroupofuniquenames', 'groupofurls', 'univentiongroup'),
array_map('strtolower', (array)$entry['objectclass'])
);
}
@ -1888,37 +1887,33 @@ class rcube_ldap extends rcube_addressbook
/**
* Detects group member attribute name
*/
private function get_group_member_attr($object_classes = array())
private function get_group_member_attr($object_classes = array(), $default = 'member')
{
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;
return 'member';
case 'groupofuniquenames':
case 'kolabgroupofuniquenames':
$member_attr = 'uniqueMember';
break;
}
case 'univentiongroup':
return 'uniqueMember';
}
}
if (!empty($member_attr)) {
return $member_attr;
}
if (!empty($this->prop['groups']['member_attr'])) {
return $this->prop['groups']['member_attr'];
}
return 'member';
return $default;
}

Loading…
Cancel
Save