* @param string $par
*/
public function execute( $par ) {
+ $request = $this->getRequest();
+
+ // Fetch the search term
+ $search = str_replace( "\n", " ", $request->getText( 'search' ) );
+
+ // Historically search terms have been accepted not only in the search query
+ // parameter, but also as part of the primary url. This can have PII implications
+ // in releasing page view data. As such issue a 301 redirect to the correct
+ // URL.
+ if ( strlen( $par ) && !strlen( $search ) ) {
+ $query = $request->getValues();
+ unset( $query['title'] );
+ // Strip underscores from title parameter; most of the time we'll want
+ // text form here. But don't strip underscores from actual text params!
+ $query['search'] = str_replace( '_', ' ', $par );
+ $this->getOutput()->redirect( $this->getPageTitle()->getFullURL( $query ), 301 );
+ return;
+ }
+
$this->setHeaders();
$this->outputHeader();
$out = $this->getOutput();
] );
$this->addHelpLink( 'Help:Searching' );
- // Strip underscores from title parameter; most of the time we'll want
- // text form here. But don't strip underscores from actual text params!
- $titleParam = str_replace( '_', ' ', $par );
-
- $request = $this->getRequest();
-
- // Fetch the search term
- $search = str_replace( "\n", " ", $request->getText( 'search', $titleParam ) );
-
$this->load();
if ( !is_null( $request->getVal( 'nsRemember' ) ) ) {
$this->saveNamespaces();
return;
}
- # No match, generate an edit URL
- $title = Title::newFromText( $term );
- if ( !is_null( $title ) ) {
- Hooks::run( 'SpecialSearchNogomatch', [ &$title ] );
- }
$this->showResults( $term );
}
// show results
if ( $numTextMatches > 0 ) {
+ $search->augmentSearchResults( $textMatches );
$out->addHTML( $this->showMatches( $textMatches ) );
}
$out->addHTML( "</div>" );
Hooks::run( 'SpecialSearchResultsAppend', [ $this, $out, $term ] );
-
}
/**
return "<p class=\"mw-search-interwiki-header mw-search-visualclear\">\n$wikiMsg</p>";
}
- /**
- * Decide if the suggested query should be run, and it's results returned
- * instead of the provided $textMatches
- *
- * @param SearchResultSet $textMatches The results of a users query
- * @return bool
- */
- protected function shouldRunSuggestedQuery( SearchResultSet $textMatches ) {
- if ( !$this->runSuggestion ||
- !$textMatches->hasSuggestion() ||
- $textMatches->numRows() > 0 ||
- $textMatches->searchContainedSyntax()
- ) {
- return false;
- }
-
- return $this->getConfig()->get( 'SearchRunSuggestedQuery' );
- }
-
/**
* Generates HTML shown to the user when we have a suggestion about a query
* that might give more results than their current query.
*
* @return string
*/
- protected function showMatches( &$matches, $interwiki = null ) {
+ protected function showMatches( $matches, $interwiki = null ) {
global $wgContLang;
$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
$pos = $this->offset;
if ( $result && $interwiki ) {
- $out .= $this->interwikiHeader( $interwiki, $result );
+ $out .= $this->interwikiHeader( $interwiki, $matches );
}
$out .= "<ul class='mw-search-results'>\n";
*
* @return string
*/
- protected function showHit( $result, $terms, $position ) {
-
+ protected function showHit( SearchResult $result, $terms, $position ) {
if ( $result->isBrokenTitle() ) {
return '';
}
* @return string
*/
protected function showInterwikiHit( $result, $lastInterwiki, $query ) {
-
if ( $result->isBrokenTitle() ) {
return '';
}
return false;
}
- /**
- * Check if query starts with all: prefix
- *
- * @param string $term The string to check
- * @return bool
- */
- protected function startsWithAll( $term ) {
-
- $allkeyword = $this->msg( 'searchall' )->inContentLanguage()->text();
-
- $parts = explode( ':', $term );
- if ( count( $parts ) > 1 ) {
- return $parts[0] == $allkeyword;
- }
-
- return false;
- }
-
/**
* @since 1.18
*