Issue 301 redirects for Special:Search/searchterm
[lhc/web/wiklou.git] / includes / specials / SpecialSearch.php
index 45d2415..26b86f9 100644 (file)
@@ -100,6 +100,25 @@ class SpecialSearch extends SpecialPage {
         * @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();
@@ -110,15 +129,6 @@ class SpecialSearch extends SpecialPage {
                ] );
                $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();
@@ -386,7 +396,7 @@ class SpecialSearch extends SpecialPage {
                if ( $textMatches && !$textStatus ) {
                        // output appropriate heading
                        if ( $numTextMatches > 0 && $numTitleMatches > 0 ) {
-                               $out->addHTML( '<div class="visualClear"></div>' );
+                               $out->addHTML( '<div class="mw-search-visualclear"></div>' );
                                // if no title matches the heading is redundant
                                $out->wrapWikiMsg( "==$1==\n", 'textmatches' );
                        }
@@ -435,7 +445,7 @@ class SpecialSearch extends SpecialPage {
                        $textMatches->free();
                }
 
-               $out->addHTML( '<div class="visualClear"></div>' );
+               $out->addHTML( '<div class="mw-search-visualclear"></div>' );
 
                if ( $prevnext ) {
                        $out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
@@ -456,7 +466,7 @@ class SpecialSearch extends SpecialPage {
        protected function interwikiHeader( $interwiki, $interwikiResult ) {
                // TODO: we need to figure out how to name wikis correctly
                $wikiMsg = $this->msg( 'search-interwiki-results-' . $interwiki )->parse();
-               return "<p class=\"mw-search-interwiki-header\">\n$wikiMsg</p>";
+               return "<p class=\"mw-search-interwiki-header mw-search-visualclear\">\n$wikiMsg</p>";
        }
 
        /**
@@ -720,7 +730,7 @@ class SpecialSearch extends SpecialPage {
 
                $out .= "<ul class='mw-search-results'>\n";
                while ( $result ) {
-                       $out .= $this->showHit( $result, $terms, ++$pos );
+                       $out .= $this->showHit( $result, $terms, $pos++ );
                        $result = $matches->next();
                }
                $out .= "</ul>\n";
@@ -1166,7 +1176,7 @@ class SpecialSearch extends SpecialPage {
         * @return string
         */
        protected function searchProfileTabs( $term ) {
-               $out = Html::element( 'div', [ 'class' => 'visualClear' ] ) .
+               $out = Html::element( 'div', [ 'class' => 'mw-search-visualclear' ] ) .
                        Xml::openElement( 'div', [ 'class' => 'mw-search-profile-tabs' ] );
 
                $bareterm = $term;
@@ -1244,6 +1254,7 @@ class SpecialSearch extends SpecialPage {
                        'autofocus' => trim( $term ) === '',
                        'value' => $term,
                        'dataLocation' => 'content',
+                       'infusable' => true,
                ] );
 
                $layout = new OOUI\ActionFieldLayout( $searchWidget, new OOUI\ButtonInputWidget( [