]> git.mxchange.org Git - friendica.git/commitdiff
Add search types
authorPhilipp Holzer <admin+github@philipp.info>
Mon, 20 May 2019 17:13:37 +0000 (19:13 +0200)
committerPhilipp Holzer <admin+github@philipp.info>
Mon, 20 May 2019 17:13:37 +0000 (19:13 +0200)
src/Core/Search.php
src/Module/BaseSearchModule.php

index dcc297780c5ee800bd3263e25f256ed5e0c06abd..d000f8283c670e07a4fe3f7e35427d0a6acb513b 100644 (file)
@@ -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],
index 7e13a590ed0c82a8f39f3d5bc08c900df77304f0..3c02b6f4903494a0aa1b4066aacf6b15ad23b148 100644 (file)
@@ -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());
                }