]> git.mxchange.org Git - friendica.git/commitdiff
Only probr when needed, search local if nothing was found
authorMichael <heluecht@pirati.ca>
Wed, 17 May 2023 02:23:56 +0000 (02:23 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 17 May 2023 02:23:56 +0000 (02:23 +0000)
src/Core/Search.php
src/Module/BaseSearch.php

index 605e3fa22918c4beafa37599397c9ae27e58d229..a226784e2c26a1e3de80ef2901349cc1c7170d79 100644 (file)
@@ -55,19 +55,25 @@ class Search
         * @throws HTTPException\InternalServerErrorException
         * @throws \ImagickException
         */
-       public static function getContactsFromProbe(string $user): ?ResultList
+       public static function getContactsFromProbe(string $user, $only_forum = false): ResultList
        {
+               $emptyResultList = new ResultList();
+
                if (empty(parse_url($user, PHP_URL_SCHEME)) && !(filter_var($user, FILTER_VALIDATE_EMAIL) || Network::isEmailDomainValid($user))) {
-                       return null;            
+                       return $emptyResultList;
                }
-       
+
                $user_data = Contact::getByURL($user);
                if (empty($user_data)) {
-                       return null;
+                       return $emptyResultList;
+               }
+
+               if ($only_forum && ($user_data['contact-type'] != Contact::TYPE_COMMUNITY)) {
+                       return $emptyResultList;
                }
 
                if (!Protocol::supportsProbe($user_data['network'])) {
-                       return null;
+                       return $emptyResultList;
                }
 
                $contactDetails = Contact::getByURLForUser($user_data['url'], DI::userSession()->getLocalUserId());
@@ -125,8 +131,8 @@ class Search
 
                $resultList = new ResultList(
                        ($results['page']         ?? 0) ?: 1,
-                        $results['count']        ?? 0,
-                       ($results['itemsperpage'] ?? 0) ?: 30
+                       ($results['itemsperpage'] ?? 0) ?: 30,
+                       $results['count']        ?? 0
                );
 
                $profiles = $results['profiles'] ?? [];
@@ -170,7 +176,7 @@ class Search
 
                $contacts = Contact::searchByName($search, $type == self::TYPE_FORUM ? 'community' : '', true);
 
-               $resultList = new ResultList($start, $itemPage, count($contacts));
+               $resultList = new ResultList($start, count($contacts), $itemPage);
 
                foreach ($contacts as $contact) {
                        $result = new ContactResult(
@@ -280,4 +286,4 @@ class Search
                        return 'search?q=' . urlencode($search);
                }
        }
-}
+}
\ No newline at end of file
index 3593e8a632d15cdfd8eae3170f7797ef8c2ee620..262ec94a20b8d875f751c15ad0d8ee2ba83c0ff5 100644 (file)
@@ -23,6 +23,7 @@ namespace Friendica\Module;
 
 use Friendica\BaseModule;
 use Friendica\Content\Pager;
+use Friendica\Core\Logger;
 use Friendica\Core\Renderer;
 use Friendica\Core\Search;
 use Friendica\DI;
@@ -62,18 +63,13 @@ class BaseSearch extends BaseModule
                }
 
                $header = '';
+               $results = new ResultList();
 
                if (strpos($search, '@') === 0) {
                        $search  = trim(substr($search, 1));
                        $type    = Search::TYPE_PEOPLE;
                        $header  = DI::l10n()->t('People Search - %s', $search);
-
-                       if (strrpos($search, '@') > 0) {
-                               $results = Search::getContactsFromProbe(Network::convertToIdn($search));
-                       }
-               }
-
-               if (strpos($search, '!') === 0) {
+               } elseif (strpos($search, '!') === 0) {
                        $search = trim(substr($search, 1));
                        $type   = Search::TYPE_FORUM;
                        $header = DI::l10n()->t('Forum Search - %s', $search);
@@ -91,16 +87,18 @@ class BaseSearch extends BaseModule
 
                $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), $itemsPerPage);
 
-               if (empty($results)) {
-                       if ($localSearch) {
-                               $pager->setItemsPerPage(80);
-                               $results = Search::getContactsFromLocalDirectory($search, $type, $pager->getStart(), $pager->getItemsPerPage());
-                       } elseif (Search::getGlobalDirectory()) {
-                               $results = Search::getContactsFromGlobalDirectory($search, $type, $pager->getPage());
-                               $pager->setItemsPerPage($results->getItemsPage());
-                       } else {
-                               $results = new ResultList();
-                       }
+               if (!$results->getTotal() && !$localSearch && Search::getGlobalDirectory()) {
+                       $results = Search::getContactsFromGlobalDirectory($search, $type, $pager->getPage());
+                       $pager->setItemsPerPage($results->getItemsPage());
+               }
+
+               if (!$results->getTotal()) {
+                       $pager->setItemsPerPage(80);
+                       $results = Search::getContactsFromLocalDirectory($search, $type, $pager->getStart(), $pager->getItemsPerPage());
+               }
+
+               if (!$results->getTotal()) {
+                       $results = Search::getContactsFromProbe(Network::convertToIdn($search), $type == Search::TYPE_FORUM);
                }
 
                return self::printResult($results, $pager, $header);
@@ -153,4 +151,4 @@ class BaseSearch extends BaseModule
                        '$paginate' => $pager->renderFull($results->getTotal()),
                ]);
        }
-}
+}
\ No newline at end of file