{
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
/**
* 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;
* @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();
Protocol::ACTIVITYPUB, Protocol::DFRN, $ostatus, $diaspora,
$wildcard, $wildcard, $wildcard,
$wildcard, $wildcard, $wildcard,
- $community,
+ ($type === self::TYPE_FORUM),
]);
if (empty($count)) {
Protocol::ACTIVITYPUB, Protocol::DFRN, $ostatus, $diaspora,
$wildcard, $wildcard, $wildcard,
$wildcard, $wildcard, $wildcard,
- $community,
+ ($type === self::TYPE_FORUM),
], [
'group_by' => ['nurl', 'updated'],
'limit' => [$start, $itemPage],
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;
/**
$a = self::getApp();
$config = $a->getConfig();
- $community = false;
+ $type = Search::TYPE_ALL;
$localSearch = $config->get('system', 'poco_local_search');
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);
}
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());
}