namespace Friendica\Module;
+use Friendica\App\Arguments;
use Friendica\BaseModule;
use Friendica\Content\ContactSelector;
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;
/**
/**
* Performs a search with an optional prefix
*
+ * @param string $search Search query
* @param string $prefix A optional prefix (e.g. @ or !) for searching
*
* @return string
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
- public static function performSearch($prefix = '')
+ public static function performSearch($search, $prefix = '')
{
$a = self::getApp();
$config = $a->getConfig();
- $community = false;
+ $type = Search::TYPE_ALL;
$localSearch = $config->get('system', 'poco_local_search');
- $search = $prefix . Strings::escapeTags(trim(defaults($_REQUEST, 'search', '')));
+ $search = $prefix . $search;
if (!$search) {
return '';
if (strpos($search, '@') === 0) {
$search = substr($search, 1);
+ $type = Search::TYPE_PEOPLE;
$header = L10n::t('People Search - %s', $search);
- $results = Search::getContactsFromProbe($search);
+
+ if (strrpos($search, '@') > 0) {
+ $results = Search::getContactsFromProbe($search);
+ }
}
if (strpos($search, '!') === 0) {
- $search = substr($search, 1);
- $community = true;
- $header = L10n::t('Forum Search - %s', $search);
+ $search = substr($search, 1);
+ $type = Search::TYPE_FORUM;
+ $header = L10n::t('Forum Search - %s', $search);
}
- $pager = new Pager($a->query_string);
+ /** @var Arguments $args */
+ $args = self::getClass(Arguments::class);
+ $pager = new Pager($args->getQueryString());
if ($localSearch && empty($results)) {
$pager->setItemsPerPage(80);
- $results = Search::getContactsFromLocalDirectory($search, $pager->getStart(), $pager->getItemsPerPage(), $community);
-
+ $results = Search::getContactsFromLocalDirectory($search, $type, $pager->getStart(), $pager->getItemsPerPage());
} elseif (strlen($config->get('system', 'directory')) && empty($results)) {
- $results = Search::getContactsFromGlobalDirectory($search, $pager->getPage());
+ $results = Search::getContactsFromGlobalDirectory($search, $type, $pager->getPage());
$pager->setItemsPerPage($results->getItemsPage());
}
* Prints a human readable search result
*
* @param ResultList $results
- * @param Pager $pager
- * @param string $header
+ * @param Pager $pager
+ * @param string $header
*
* @return string The result
* @throws HTTPException\InternalServerErrorException
*/
protected static function printResult(ResultList $results, Pager $pager, $header = '')
{
- if (empty($results) || empty($results->getResults())) {
- info(L10n::t('No matches') . EOL);
+ if ($results->getTotal() == 0) {
+ info(L10n::t('No matches'));
return '';
}
$a = self::getApp();
- $id = 0;
+ $id = 0;
$entries = [];
foreach ($results->getResults() as $result) {