Fix: Contacts can now be searched with a leading @ again.

This commit is contained in:
Michael 2023-05-12 07:00:02 +00:00
parent 725f99c813
commit f45dbf8b01
2 changed files with 38 additions and 40 deletions

View file

@ -55,40 +55,36 @@ class Search
* @throws HTTPException\InternalServerErrorException * @throws HTTPException\InternalServerErrorException
* @throws \ImagickException * @throws \ImagickException
*/ */
public static function getContactsFromProbe(string $user): ResultList public static function getContactsFromProbe(string $user): ?ResultList
{ {
$emptyResultList = new ResultList(1, 0, 1); if (empty(parse_url($user, PHP_URL_SCHEME)) && !(filter_var($user, FILTER_VALIDATE_EMAIL) || Network::isEmailDomainValid($user))) {
return null;
if ((filter_var($user, FILTER_VALIDATE_EMAIL) && Network::isEmailDomainValid($user)) || }
(substr(Strings::normaliseLink($user), 0, 7) == 'http://')) {
$user_data = Contact::getByURL($user); $user_data = Contact::getByURL($user);
if (empty($user_data)) { if (empty($user_data)) {
return $emptyResultList; return null;
} }
if (!in_array($user_data['network'], Protocol::FEDERATED)) { if (!Protocol::supportsProbe($user_data['network'])) {
return $emptyResultList; return null;
} }
$contactDetails = Contact::getByURLForUser($user_data['url'] ?? '', DI::userSession()->getLocalUserId()); $contactDetails = Contact::getByURLForUser($user_data['url'], DI::userSession()->getLocalUserId());
$result = new ContactResult( $result = new ContactResult(
$user_data['name'] ?? '', $user_data['name'],
$user_data['addr'] ?? '', $user_data['addr'],
($contactDetails['addr'] ?? '') ?: ($user_data['url'] ?? ''), $user_data['addr'] ?: $user_data['url'],
new Uri($user_data['url'] ?? ''), new Uri($user_data['url']),
$user_data['photo'] ?? '', $user_data['photo'],
$user_data['network'] ?? '', $user_data['network'],
$contactDetails['cid'] ?? 0, $contactDetails['cid'] ?? 0,
$user_data['id'] ?? 0, $user_data['id'],
$user_data['tags'] ?? '' $user_data['tags']
); );
return new ResultList(1, 1, 1, [$result]); return new ResultList(1, 1, 1, [$result]);
} else {
return $emptyResultList;
}
} }
/** /**

View file

@ -91,15 +91,17 @@ class BaseSearch extends BaseModule
$pager = new Pager(DI::l10n(), DI::args()->getQueryString(), $itemsPerPage); $pager = new Pager(DI::l10n(), DI::args()->getQueryString(), $itemsPerPage);
if ($localSearch && empty($results)) { if (empty($results)) {
if ($localSearch) {
$pager->setItemsPerPage(80); $pager->setItemsPerPage(80);
$results = Search::getContactsFromLocalDirectory($search, $type, $pager->getStart(), $pager->getItemsPerPage()); $results = Search::getContactsFromLocalDirectory($search, $type, $pager->getStart(), $pager->getItemsPerPage());
} elseif (Search::getGlobalDirectory() && empty($results)) { } elseif (Search::getGlobalDirectory()) {
$results = Search::getContactsFromGlobalDirectory($search, $type, $pager->getPage()); $results = Search::getContactsFromGlobalDirectory($search, $type, $pager->getPage());
$pager->setItemsPerPage($results->getItemsPage()); $pager->setItemsPerPage($results->getItemsPage());
} else { } else {
$results = new ResultList(); $results = new ResultList();
} }
}
return self::printResult($results, $pager, $header); return self::printResult($results, $pager, $header);
} }