+
+ $sql_extra2 .= ' ' . Widget::unavailableNetworks();
+
+ $contact_count = 0;
+ if ($type == '' || $type == 'c') {
+ // autocomplete for editor mentions
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND NOT `self`
+ AND NOT `blocked` AND NOT `pending` AND NOT `archive`
+ AND `success_update` >= `failure_update`
+ AND `notify` != '' $sql_extra2",
+ intval(local_user())
+ );
+ $contact_count = (int) $r[0]['c'];
+ } elseif ($type == 'f') {
+ // autocomplete for editor mentions of forums
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND NOT `self`
+ AND NOT `blocked` AND NOT `pending` AND NOT `archive`
+ AND (`forum` OR `prv`)
+ AND `success_update` >= `failure_update`
+ AND `notify` != '' $sql_extra2",
+ intval(local_user())
+ );
+ $contact_count = (int) $r[0]['c'];
+ } elseif ($type == 'm') {
+ // autocomplete for Private Messages
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND NOT `self`
+ AND NOT `blocked` AND NOT `pending` AND NOT `archive`
+ AND `success_update` >= `failure_update`
+ AND `network` IN ('%s', '%s') $sql_extra2",
+ intval(local_user()),
+ dbesc(NETWORK_DFRN),
+ dbesc(NETWORK_DIASPORA)
+ );
+ $contact_count = (int) $r[0]['c'];
+ } elseif ($type == 'a') {
+ // autocomplete for Contacts
+ $r = q("SELECT COUNT(*) AS c FROM `contact`
+ WHERE `uid` = %d AND NOT `self`
+ AND NOT `pending` $sql_extra2",
+ intval(local_user())
+ );
+ $contact_count = (int) $r[0]['c'];
+ }
+
+ $tot = $group_count + $contact_count;
+
+ $groups = [];
+ $contacts = [];
+
+ if ($type == '' || $type == 'g') {
+ /// @todo We should cache this query.
+ // This can be done when we can delete cache entries via wildcard
+ $r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') AS uids
+ FROM `group`
+ INNER JOIN `group_member` ON `group_member`.`gid`=`group`.`id`
+ WHERE NOT `group`.`deleted` AND `group`.`uid` = %d
+ $sql_extra
+ GROUP BY `group`.`name`, `group`.`id`
+ ORDER BY `group`.`name`
+ LIMIT %d,%d",
+ intval(local_user()),
+ intval($start),
+ intval($count)
+ );
+
+ foreach ($r as $g) {
+ $groups[] = [
+ 'type' => 'g',
+ 'photo' => 'images/twopeople.png',
+ 'name' => htmlentities($g['name']),
+ 'id' => intval($g['id']),
+ 'uids' => array_map('intval', explode(',', $g['uids'])),
+ 'link' => '',
+ 'forum' => '0'
+ ];
+ }
+ if ((count($groups) > 0) && ($search == '')) {
+ $groups[] = ['separator' => true];
+ }
+ }
+
+ $r = [];
+ if ($type == '') {
+ $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact`
+ WHERE `uid` = %d AND NOT `self` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
+ AND `success_update` >= `failure_update` AND NOT (`network` IN ('%s', '%s'))
+ $sql_extra2
+ ORDER BY `name` ASC ",
+ intval(local_user()),
+ dbesc(NETWORK_OSTATUS),
+ dbesc(NETWORK_STATUSNET)