+ $pubmail = false;
+ $networks = Protocol::SUPPORT_PRIVATE;
+
+ $mailacct = DBA::selectFirst('mailacct', ['pubmail'], ['`uid` = ? AND `server` != ""', $uid]);
+ if (DBA::isResult($mailacct)) {
+ $pubmail = $mailacct['pubmail'];
+ }
+
+ if (!$pubmail) {
+ $networks = array_diff($networks, [Protocol::MAIL]);
+ }
+
+ $key = array_search(self::FOLLOWERS, $group_ids);
+ if ($key !== false) {
+ $followers = Contact::selectToArray(['id'], [
+ 'uid' => $uid,
+ 'rel' => [Contact::FOLLOWER, Contact::FRIEND],
+ 'network' => $networks,
+ 'contact-type' => [Contact::TYPE_UNKNOWN, Contact::TYPE_PERSON],
+ 'archive' => false,
+ 'pending' => false,
+ 'blocked' => false,
+ ]);
+
+ foreach ($followers as $follower) {
+ $return[] = $follower['id'];
+ }
+
+ unset($group_ids[$key]);
+ }
+
+ $key = array_search(self::MUTUALS, $group_ids);
+ if ($key !== false) {
+ $mutuals = Contact::selectToArray(['id'], [
+ 'uid' => $uid,
+ 'rel' => [Contact::FRIEND],
+ 'network' => $networks,
+ 'contact-type' => [Contact::TYPE_UNKNOWN, Contact::TYPE_PERSON],
+ 'archive' => false,
+ 'pending' => false,
+ 'blocked' => false,
+ ]);
+
+ foreach ($mutuals as $mutual) {
+ $return[] = $mutual['id'];
+ }
+
+ unset($group_ids[$key]);
+ }
+
+ $stmt = DBA::select('group_member', ['contact-id'], ['gid' => $group_ids]);
+ while ($group_member = DBA::fetch($stmt)) {