From 58c8959da0ece9a23966b315310a3962542bc7f4 Mon Sep 17 00:00:00 2001 From: Philipp Holzer Date: Mon, 20 May 2019 19:13:37 +0200 Subject: [PATCH] Add search types --- src/Core/Search.php | 29 ++++++++++++++++++++++------- src/Module/BaseSearchModule.php | 13 +++++++------ 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/Core/Search.php b/src/Core/Search.php index dcc297780..d000f8283 100644 --- a/src/Core/Search.php +++ b/src/Core/Search.php @@ -23,6 +23,10 @@ class Search extends BaseObject { const DEFAULT_DIRECTORY = 'https://dir.friendica.social'; + const TYPE_PEOPLE = 0; + const TYPE_FORUM = 1; + const TYPE_ALL = 2; + /** * Search a user based on his/her profile address * pattern: @username@domain.tld @@ -71,20 +75,31 @@ class Search extends BaseObject /** * Search in the global directory for occurrences of the search string - * This is mainly based on the JSON results of https://dir.friendica.social + * @see https://github.com/friendica/friendica-directory/blob/master/docs/Protocol.md#search * * @param string $search + * @param int $type specific type of searching * @param int $page * * @return ResultList|null * @throws HTTPException\InternalServerErrorException */ - public static function getContactsFromGlobalDirectory($search, $page = 1) + public static function getContactsFromGlobalDirectory($search, $type = self::TYPE_ALL, $page = 1) { $config = self::getApp()->getConfig(); $server = $config->get('system', 'directory', self::DEFAULT_DIRECTORY); - $searchUrl = $server . '/search?q=' . urlencode($search); + $searchUrl = $server . '/search'; + + switch ($type) { + case self::TYPE_FORUM: + $searchUrl .= '/forum'; + break; + case self::TYPE_PEOPLE: + $searchUrl .= '/people'; + break; + } + $searchUrl .= '?q=' . urlencode($search); if ($page > 1) { $searchUrl .= '&page=' . $page; @@ -130,12 +145,12 @@ class Search extends BaseObject * @param string $search * @param int $start * @param int $itemPage - * @param bool $community + * @param int $type * * @return ResultList|null * @throws HTTPException\InternalServerErrorException */ - public static function getContactsFromLocalDirectory($search, $start = 0, $itemPage = 80, $community = false) + public static function getContactsFromLocalDirectory($search, $start = 0, $itemPage = 80, $type = self::TYPE_ALL) { $config = self::getApp()->getConfig(); @@ -154,7 +169,7 @@ class Search extends BaseObject Protocol::ACTIVITYPUB, Protocol::DFRN, $ostatus, $diaspora, $wildcard, $wildcard, $wildcard, $wildcard, $wildcard, $wildcard, - $community, + ($type === self::TYPE_FORUM), ]); if (empty($count)) { @@ -171,7 +186,7 @@ class Search extends BaseObject Protocol::ACTIVITYPUB, Protocol::DFRN, $ostatus, $diaspora, $wildcard, $wildcard, $wildcard, $wildcard, $wildcard, $wildcard, - $community, + ($type === self::TYPE_FORUM), ], [ 'group_by' => ['nurl', 'updated'], 'limit' => [$start, $itemPage], diff --git a/src/Module/BaseSearchModule.php b/src/Module/BaseSearchModule.php index 7e13a590e..3c02b6f49 100644 --- a/src/Module/BaseSearchModule.php +++ b/src/Module/BaseSearchModule.php @@ -8,11 +8,11 @@ use Friendica\Content\Pager; use Friendica\Core\L10n; use Friendica\Core\Renderer; use Friendica\Core\Search; +use Friendica\Model; +use Friendica\Network\HTTPException; use Friendica\Object\Search\ContactResult; use Friendica\Object\Search\ResultList; use Friendica\Util\Proxy as ProxyUtils; -use Friendica\Model; -use Friendica\Network\HTTPException; use Friendica\Util\Strings; /** @@ -34,7 +34,7 @@ class BaseSearchModule extends BaseModule $a = self::getApp(); $config = $a->getConfig(); - $community = false; + $type = Search::TYPE_ALL; $localSearch = $config->get('system', 'poco_local_search'); @@ -48,13 +48,14 @@ class BaseSearchModule extends BaseModule if (strpos($search, '@') === 0) { $search = substr($search, 1); + $type = Search::TYPE_PEOPLE; $header = L10n::t('People Search - %s', $search); $results = Search::getContactsFromProbe($search); } if (strpos($search, '!') === 0) { $search = substr($search, 1); - $community = true; + $type = Search::TYPE_FORUM; $header = L10n::t('Forum Search - %s', $search); } @@ -62,10 +63,10 @@ class BaseSearchModule extends BaseModule if ($localSearch && empty($results)) { $pager->setItemsPerPage(80); - $results = Search::getContactsFromLocalDirectory($search, $pager->getStart(), $pager->getItemsPerPage(), $community); + $results = Search::getContactsFromLocalDirectory($search, $pager->getStart(), $pager->getItemsPerPage(), $type); } elseif (strlen($config->get('system', 'directory')) && empty($results)) { - $results = Search::getContactsFromGlobalDirectory($search, $pager->getPage()); + $results = Search::getContactsFromGlobalDirectory($search, $pager->getPage(), $type); $pager->setItemsPerPage($results->getItemsPage()); }