diff --git a/mod/search.php b/mod/search.php index 21b6918b1c..816ebf18a9 100644 --- a/mod/search.php +++ b/mod/search.php @@ -14,7 +14,7 @@ use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Database\DBA; use Friendica\Model\Item; -use Friendica\Module\DirectorySearch; +use Friendica\Module\Directory; use Friendica\Util\Strings; function search_saved_searches() { @@ -148,10 +148,10 @@ function search_content(App $a) { $search = substr($search,1); } if (strpos($search,'@') === 0) { - return DirectorySearch::performSearch(); + return Directory::performSearch(); } if (strpos($search,'!') === 0) { - return DirectorySearch::performSearch(); + return Directory::performSearch(); } if (!empty($_GET['search-option'])) @@ -162,9 +162,9 @@ function search_content(App $a) { $tag = true; break; case 'contacts': - return DirectorySearch::performSearch('@'); + return Directory::performSearch('@'); case 'forums': - return DirectorySearch::performSearch('!'); + return Directory::performSearch('!'); } if (!$search) diff --git a/src/App/Router.php b/src/App/Router.php index 4a8807fa70..02072594cd 100644 --- a/src/App/Router.php +++ b/src/App/Router.php @@ -113,7 +113,7 @@ class Router $collector->addRoute(['GET'], '/ignored', Module\Contact::class); }); $this->routeCollector->addRoute(['GET'], '/credits', Module\Credits::class); - $this->routeCollector->addRoute(['GET'], '/dirfind', Module\DirectorySearch::class); + $this->routeCollector->addRoute(['GET'], '/dirfind', Module\Search\Directory::class); $this->routeCollector->addRoute(['GET'], '/directory', Module\Directory::class); $this->routeCollector->addGroup('/feed', function (RouteCollector $collector) { $collector->addRoute(['GET'], '/{nickname}', Module\Feed::class); diff --git a/src/Module/DirectorySearch.php b/src/Module/BaseSearchModule.php similarity index 62% rename from src/Module/DirectorySearch.php rename to src/Module/BaseSearchModule.php index 7e3e3c2c5f..d11f7e9860 100644 --- a/src/Module/DirectorySearch.php +++ b/src/Module/BaseSearchModule.php @@ -5,83 +5,38 @@ namespace Friendica\Module; use Friendica\BaseModule; use Friendica\Content\ContactSelector; use Friendica\Content\Pager; -use Friendica\Content\Widget; use Friendica\Core\L10n; use Friendica\Core\Renderer; +use Friendica\Object\Search\ResultList; use Friendica\Util\Proxy as ProxyUtils; -use Friendica\Util\Strings; use Friendica\Model; /** - * Multi search module, which is needed for further search operations + * Base class for search modules */ -class DirectorySearch extends BaseModule +abstract class BaseSearchModule extends BaseModule { - public static function content() + /** + * Prints a human readable search result + * + * @param ResultList $results + * @param Pager $pager + * @param string $header + * + * @return string The result + * @throws \Friendica\Network\HTTPException\InternalServerErrorException + * @throws \ImagickException + */ + protected static function printResult(ResultList $results, Pager $pager, $header = '') { - if (!local_user()) { - notice(L10n::t('Permission denied.')); - return Login::form(); - } - - $a = self::getApp(); - - if (empty($a->page['aside'])) { - $a->page['aside'] = ''; - } - - $a->page['aside'] .= Widget::findPeople(); - $a->page['aside'] .= Widget::follow(); - - return self::performSearch(); - } - - public static function performSearch($prefix = '') - { - $a = self::getApp(); - $config = $a->getConfig(); - - $community = false; - - $localSearch = $config->get('system', 'poco_local_search'); - - $search = $prefix . Strings::escapeTags(trim(defaults($_REQUEST, 'search', ''))); - - if (!$search) { - return ''; - } - - $header = ''; - - if (strpos($search, '@') === 0) { - $search = substr($search, 1); - $header = L10n::t('People Search - %s', $search); - $results = Model\Search::searchUser($search); - } - - if (strpos($search, '!') === 0) { - $search = substr($search, 1); - $community = true; - $header = L10n::t('Forum Search - %s', $search); - } - - $pager = new Pager($a->query_string); - - if ($localSearch && empty($results)) { - $pager->setItemsPerPage(80); - $results = Model\Search::searchLocal($search, $pager->getStart(), $pager->getItemsPerPage(), $community); - - } elseif (strlen($config->get('system', 'directory')) && empty($results)) { - $results = Model\Search::searchDirectory($search, $pager->getPage()); - $pager->setItemsPerPage($results->getItemsPage()); - } - if (empty($results) || empty($results->getResults())) { info(L10n::t('No matches') . EOL); return ''; } - $id = 0; + $a = self::getApp(); + + $id = 0; $entries = []; foreach ($results->getResults() as $result) { diff --git a/src/Module/Search/Directory.php b/src/Module/Search/Directory.php new file mode 100644 index 0000000000..900bf818bc --- /dev/null +++ b/src/Module/Search/Directory.php @@ -0,0 +1,82 @@ +page['aside'])) { + $a->page['aside'] = ''; + } + + $a->page['aside'] .= Widget::findPeople(); + $a->page['aside'] .= Widget::follow(); + + return self::performSearch(); + } + + public static function performSearch($prefix = '') + { + $a = self::getApp(); + $config = $a->getConfig(); + + $community = false; + + $localSearch = $config->get('system', 'poco_local_search'); + + $search = $prefix . Strings::escapeTags(trim(defaults($_REQUEST, 'search', ''))); + + if (!$search) { + return ''; + } + + $header = ''; + + if (strpos($search, '@') === 0) { + $search = substr($search, 1); + $header = L10n::t('People Search - %s', $search); + $results = Model\Search::searchUser($search); + } + + if (strpos($search, '!') === 0) { + $search = substr($search, 1); + $community = true; + $header = L10n::t('Forum Search - %s', $search); + } + + $pager = new Pager($a->query_string); + + if ($localSearch && empty($results)) { + $pager->setItemsPerPage(80); + $results = Model\Search::searchLocal($search, $pager->getStart(), $pager->getItemsPerPage(), $community); + + } elseif (strlen($config->get('system', 'directory')) && empty($results)) { + $results = Model\Search::searchDirectory($search, $pager->getPage()); + $pager->setItemsPerPage($results->getItemsPage()); + } + + return self::printResult($results, $pager, $header); + } +}