diff --git a/src/Core/Search.php b/src/Core/Search.php index 605e3fa229..a226784e2c 100644 --- a/src/Core/Search.php +++ b/src/Core/Search.php @@ -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 diff --git a/src/Module/BaseSearch.php b/src/Module/BaseSearch.php index 3593e8a632..262ec94a20 100644 --- a/src/Module/BaseSearch.php +++ b/src/Module/BaseSearch.php @@ -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