]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Search/Acl.php
Issue 9231: Speed up full text search
[friendica.git] / src / Module / Search / Acl.php
index 2c0cc967c03f20cc0aad820712e6bf74d7483a8c..e8b6f357d9c422280d805a922a60e4df55a28bdb 100644 (file)
@@ -32,7 +32,6 @@ use Friendica\DI;
 use Friendica\Model\Contact;
 use Friendica\Model\Item;
 use Friendica\Network\HTTPException;
-use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 
 /**
@@ -57,7 +56,6 @@ class Acl extends BaseModule
                }
 
                $type = $_REQUEST['type'] ?? self::TYPE_MENTION_CONTACT_GROUP;
-
                if ($type === self::TYPE_GLOBAL_CONTACT) {
                        $o = self::globalContactSearch();
                } else {
@@ -75,22 +73,17 @@ class Acl extends BaseModule
                $mode = $_REQUEST['smode'];
                $page = $_REQUEST['page'] ?? 1;
 
-               $r = Search::searchGlobalContact($search, $mode, $page);
+               $result = Search::searchContact($search, $mode, $page);
 
                $contacts = [];
-               foreach ($r as $g) {
-                       if (empty($g['name'])) {
-                               DI::logger()->warning('Wrong result item from Search::searchGlobalContact', ['$g' => $g, '$search' => $search, '$mode' => $mode, '$page' => $page]);
-                               continue;
-                       }
-
+               foreach ($result as $contact) {
                        $contacts[] = [
-                               'photo'   => ProxyUtils::proxifyUrl($g['photo'], false, ProxyUtils::SIZE_MICRO),
-                               'name'    => htmlspecialchars($g['name']),
-                               'nick'    => $g['addr'] ?: $g['url'],
-                               'network' => $g['network'],
-                               'link'    => $g['url'],
-                               'forum'   => !empty($g['community']) ? 1 : 0,
+                               'photo'   => Contact::getMicro($contact),
+                               'name'    => htmlspecialchars($contact['name']),
+                               'nick'    => $contact['addr'] ?: $contact['url'],
+                               'network' => $contact['network'],
+                               'link'    => $contact['url'],
+                               'forum'   => $contact['contact-type'] == Contact::TYPE_COMMUNITY,
                        ];
                }
 
@@ -231,7 +224,7 @@ class Acl extends BaseModule
                $r = [];
                switch ($type) {
                        case self::TYPE_MENTION_CONTACT_GROUP:
-                               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact`
+                               $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, (`prv` OR `forum`) AS `frm` FROM `contact`
                                        WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
                                        AND NOT (`network` IN ('%s', '%s'))
                                        $sql_extra2
@@ -243,7 +236,7 @@ class Acl extends BaseModule
                                break;
 
                        case self::TYPE_MENTION_CONTACT:
-                               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
+                               $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
                                        WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
                                        AND NOT (`network` IN ('%s'))
                                        $sql_extra2
@@ -254,7 +247,7 @@ class Acl extends BaseModule
                                break;
 
                        case self::TYPE_MENTION_FORUM:
-                               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
+                               $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
                                        WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive` AND `notify` != ''
                                        AND NOT (`network` IN ('%s'))
                                        AND (`forum` OR `prv`)
@@ -266,7 +259,7 @@ class Acl extends BaseModule
                                break;
 
                        case self::TYPE_PRIVATE_MESSAGE:
-                               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact`
+                               $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr` FROM `contact`
                                        WHERE `uid` = %d AND NOT `self` AND NOT `deleted` AND NOT `blocked` AND NOT `pending` AND NOT `archive`
                                        AND `network` IN ('%s', '%s', '%s')
                                        $sql_extra2
@@ -280,7 +273,7 @@ class Acl extends BaseModule
 
                        case self::TYPE_ANY_CONTACT:
                        default:
-                               $r = q("SELECT `id`, `name`, `nick`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv` FROM `contact`
+                               $r = q("SELECT `id`, `name`, `nick`, `avatar`, `micro`, `network`, `url`, `attag`, `addr`, `forum`, `prv`, `avatar` FROM `contact`
                                        WHERE `uid` = %d AND NOT `deleted` AND NOT `pending` AND NOT `archive`
                                        $sql_extra2
                                        ORDER BY `name`",
@@ -350,14 +343,14 @@ class Acl extends BaseModule
                                        continue;
                                }
 
-                               $contact = Contact::getByURL($author, false, ['micro', 'name', 'id', 'network', 'nick', 'addr', 'url', 'forum']);
+                               $contact = Contact::getByURL($author, false, ['micro', 'name', 'id', 'network', 'nick', 'addr', 'url', 'forum', 'avatar']);
 
                                if (count($contact) > 0) {
                                        $unknown_contacts[] = [
                                                'type'    => 'c',
                                                'photo'   => Contact::getMicro($contact),
                                                'name'    => htmlspecialchars($contact['name']),
-                                               'id'      => intval($contact['cid']),
+                                               'id'      => intval($contact['id']),
                                                'network' => $contact['network'],
                                                'link'    => $contact['url'],
                                                'nick'    => htmlentities(($contact['nick'] ?? '') ?: $contact['addr']),