X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FSearch%2FIndex.php;h=ec96b559a703a349992416ce41a15f213eec72cc;hb=7c7cb8373c6e5444507b04fdbb7d0d4ce830f895;hp=93c1af7aa6d5874afb82f08d744ae4392969c893;hpb=e56a53647bd5469551bf4f9ef2df50a5dd16b943;p=friendica.git diff --git a/src/Module/Search/Index.php b/src/Module/Search/Index.php index 93c1af7aa6..ec96b559a7 100644 --- a/src/Module/Search/Index.php +++ b/src/Module/Search/Index.php @@ -21,15 +21,16 @@ namespace Friendica\Module\Search; +use Friendica\App; use Friendica\Content\Nav; use Friendica\Content\Pager; use Friendica\Content\Text\HTML; use Friendica\Content\Widget; use Friendica\Core\Cache\Enum\Duration; +use Friendica\Core\L10n; use Friendica\Core\Logger; use Friendica\Core\Renderer; use Friendica\Core\Search; -use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Contact; @@ -37,23 +38,37 @@ use Friendica\Model\Item; use Friendica\Model\Post; use Friendica\Model\Tag; use Friendica\Module\BaseSearch; +use Friendica\Module\Response; use Friendica\Network\HTTPException; +use Friendica\Util\Network; +use Friendica\Util\Profiler; +use Psr\Log\LoggerInterface; class Index extends BaseSearch { + /** @var string */ + private $remoteAddress; + + public function __construct(L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, App\Request $request, array $server, array $parameters = []) + { + parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); + + $this->remoteAddress = $request->getRemoteAddress(); + } + protected function content(array $request = []): string { $search = (!empty($_GET['q']) ? trim(rawurldecode($_GET['q'])) : ''); - if (DI::config()->get('system', 'block_public') && !Session::isAuthenticated()) { + if (DI::config()->get('system', 'block_public') && !DI::userSession()->isAuthenticated()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Public access denied.')); } - if (DI::config()->get('system', 'local_search') && !Session::isAuthenticated()) { + if (DI::config()->get('system', 'local_search') && !DI::userSession()->isAuthenticated()) { throw new HTTPException\ForbiddenException(DI::l10n()->t('Only logged in users are permitted to perform a search.')); } - if (DI::config()->get('system', 'permit_crawling') && !Session::isAuthenticated()) { + if (DI::config()->get('system', 'permit_crawling') && !DI::userSession()->isAuthenticated()) { // Default values: // 10 requests are "free", after the 11th only a call per minute is allowed @@ -65,7 +80,7 @@ class Index extends BaseSearch if ($crawl_permit_period == 0) $crawl_permit_period = 10; - $remote = $_SERVER['REMOTE_ADDR']; + $remote = $this->remoteAddress; $result = DI::cache()->get('remote_search:' . $remote); if (!is_null($result)) { $resultdata = json_decode($result); @@ -78,7 +93,7 @@ class Index extends BaseSearch } } - if (local_user()) { + if (DI::userSession()->getLocalUserId()) { DI::page()['aside'] .= Widget\SavedSearches::getHTML(Search::getSearchPath($search), $search); } @@ -105,27 +120,27 @@ class Index extends BaseSearch if (strpos($search, '#') === 0) { $tag = true; $search = substr($search, 1); - } - - self::tryRedirectToProfile($search); - - if (strpos($search, '@') === 0 || strpos($search, '!') === 0) { - return self::performContactSearch($search); - } + } else { + if (strpos($search, '@') === 0 || strpos($search, '!') === 0) { + return self::performContactSearch($search); + } - self::tryRedirectToPost($search); - - if (!empty($_GET['search-option'])) { - switch ($_GET['search-option']) { - case 'fulltext': - break; - case 'tags': - $tag = true; - break; - case 'contacts': - return self::performContactSearch($search, '@'); - case 'forums': - return self::performContactSearch($search, '!'); + self::tryRedirectToPost($search); + + self::tryRedirectToProfile($search); + + if (!empty($_GET['search-option'])) { + switch ($_GET['search-option']) { + case 'fulltext': + break; + case 'tags': + $tag = true; + break; + case 'contacts': + return self::performContactSearch($search, '@'); + case 'forums': + return self::performContactSearch($search, '!'); + } } } @@ -133,7 +148,7 @@ class Index extends BaseSearch // Tags don't look like an URL and the fulltext search does only work with natural words if (parse_url($search, PHP_URL_SCHEME) && parse_url($search, PHP_URL_HOST)) { Logger::info('Skipping tag and fulltext search since the search looks like a URL.', ['q' => $search]); - notice(DI::l10n()->t('No results.')); + DI::sysmsg()->addNotice(DI::l10n()->t('No results.')); return $o; } @@ -145,10 +160,10 @@ class Index extends BaseSearch // No items will be shown if the member has a blocked profile wall. if (DI::mode()->isMobile()) { - $itemsPerPage = DI::pConfig()->get(local_user(), 'system', 'itemspage_mobile_network', + $itemsPerPage = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'itemspage_mobile_network', DI::config()->get('system', 'itemspage_network_mobile')); } else { - $itemsPerPage = DI::pConfig()->get(local_user(), 'system', 'itemspage_network', + $itemsPerPage = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'itemspage_network', DI::config()->get('system', 'itemspage_network')); } @@ -158,29 +173,29 @@ class Index extends BaseSearch if ($tag) { Logger::info('Start tag search.', ['q' => $search]); - $uriids = Tag::getURIIdListByTag($search, local_user(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); - $count = Tag::countByTag($search, local_user()); + $uriids = Tag::getURIIdListByTag($search, DI::userSession()->getLocalUserId(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); + $count = Tag::countByTag($search, DI::userSession()->getLocalUserId()); } else { Logger::info('Start fulltext search.', ['q' => $search]); - $uriids = Post\Content::getURIIdListBySearch($search, local_user(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); - $count = Post\Content::countBySearch($search, local_user()); + $uriids = Post\Content::getURIIdListBySearch($search, DI::userSession()->getLocalUserId(), $pager->getStart(), $pager->getItemsPerPage(), $last_uriid); + $count = Post\Content::countBySearch($search, DI::userSession()->getLocalUserId()); } if (!empty($uriids)) { - $condition = ["(`uid` = ? OR (`uid` = ? AND NOT `global`))", 0, local_user()]; + $condition = ["(`uid` = ? OR (`uid` = ? AND NOT `global`))", 0, DI::userSession()->getLocalUserId()]; $condition = DBA::mergeConditions($condition, ['uri-id' => $uriids]); $params = ['order' => ['id' => true]]; - $items = Post::toArray(Post::selectForUser(local_user(), Item::DISPLAY_FIELDLIST, $condition, $params)); + $items = Post::toArray(Post::selectForUser(DI::userSession()->getLocalUserId(), Item::DISPLAY_FIELDLIST, $condition, $params)); } if (empty($items)) { if (empty($last_uriid)) { - notice(DI::l10n()->t('No results.')); + DI::sysmsg()->addNotice(DI::l10n()->t('No results.')); } return $o; } - if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'infinite_scroll')) { $tpl = Renderer::getMarkupTemplate('infinite_scroll_head.tpl'); $o .= Renderer::replaceMacros($tpl, ['$reload_uri' => DI::args()->getQueryString()]); } @@ -197,9 +212,9 @@ class Index extends BaseSearch Logger::info('Start Conversation.', ['q' => $search]); - $o .= DI::conversation()->create($items, 'search', false, false, 'commented', local_user()); + $o .= DI::conversation()->create($items, 'search', false, false, 'commented', DI::userSession()->getLocalUserId()); - if (DI::pConfig()->get(local_user(), 'system', 'infinite_scroll')) { + if (DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'system', 'infinite_scroll')) { $o .= HTML::scrollLoader(); } else { $o .= $pager->renderMinimal($count); @@ -226,7 +241,8 @@ class Index extends BaseSearch */ private static function tryRedirectToProfile(string $search) { - $isUrl = !empty(parse_url($search, PHP_URL_SCHEME)); + $search = Network::convertToIdn($search); + $isUrl = !empty(parse_url($search, PHP_URL_SCHEME)); $isAddr = (bool)preg_match('/^@?([a-z0-9.-_]+@[a-z0-9.-_:]+)$/i', trim($search), $matches); if (!$isUrl && !$isAddr) { @@ -237,9 +253,9 @@ class Index extends BaseSearch $search = $matches[1]; } - if (local_user()) { + if (DI::userSession()->getLocalUserId()) { // User-specific contact URL/address search - $contact_id = Contact::getIdForURL($search, local_user()); + $contact_id = Contact::getIdForURL($search, DI::userSession()->getLocalUserId()); if (!$contact_id) { // User-specific contact URL/address search and probe $contact_id = Contact::getIdForURL($search); @@ -274,9 +290,11 @@ class Index extends BaseSearch return; } - if (local_user()) { + $search = Network::convertToIdn($search); + + if (DI::userSession()->getLocalUserId()) { // Post URL search - $item_id = Item::fetchByLink($search, local_user()); + $item_id = Item::fetchByLink($search, DI::userSession()->getLocalUserId()); if (!$item_id) { // If the user-specific search failed, we search and probe a public post $item_id = Item::fetchByLink($search);