From 985286cbcbe07e779010764a09c2b30fc59cff71 Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Thu, 13 Mar 2014 18:35:27 +0100 Subject: [PATCH] Remove duplicate group members --- .../lib/kolab_format_distributionlist.php | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/plugins/libkolab/lib/kolab_format_distributionlist.php b/plugins/libkolab/lib/kolab_format_distributionlist.php index 46dda016..88c6f7b9 100644 --- a/plugins/libkolab/lib/kolab_format_distributionlist.php +++ b/plugins/libkolab/lib/kolab_format_distributionlist.php @@ -44,17 +44,29 @@ class kolab_format_distributionlist extends kolab_format $this->obj->setName($object['name']); + $seen = array(); $members = new vectorcontactref; - foreach ((array)$object['member'] as $member) { - if ($member['uid']) + foreach ((array)$object['member'] as $i => $member) { + if ($member['uid']) { + $key = 'uid:' . $member['uid']; $m = new ContactReference(ContactReference::UidReference, $member['uid']); - else if ($member['email']) + } + else if ($member['email']) { + $key = 'mailto:' . $member['email']; $m = new ContactReference(ContactReference::EmailReference, $member['email']); - else + $m->setName($member['name']); + } + else { continue; + } - $m->setName($member['name']); - $members->push($m); + if (!$seen[$key]++) { + $members->push($m); + } + else { + // remove dupes for caching + unset($object['member'][$i]); + } } $this->obj->setMembers($members);