Revised styling of sister-search sidebar.
[lhc/web/wiklou.git] / includes / specials / SpecialSearch.php
index 34620ff..ceb6b7b 100644 (file)
 
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Widget\Search\BasicSearchResultSetWidget;
-use MediaWiki\Widget\Search\InterwikiSearchResultSetWidget;
 use MediaWiki\Widget\Search\FullSearchResultWidget;
+use MediaWiki\Widget\Search\InterwikiSearchResultWidget;
+use MediaWiki\Widget\Search\InterwikiSearchResultSetWidget;
 use MediaWiki\Widget\Search\SimpleSearchResultWidget;
+use MediaWiki\Widget\Search\SimpleSearchResultSetWidget;
 
 /**
  * implements Special:Search - Run text & title search and display the output
@@ -144,6 +146,12 @@ class SpecialSearch extends SpecialPage {
                                $out->redirect( $url );
                                return;
                        }
+                       // No match. If it could plausibly be a title
+                       // run the No go match hook.
+                       $title = Title::newFromText( $term );
+                       if ( !is_null( $title ) ) {
+                               Hooks::run( 'SpecialSearchNogomatch', [ &$title ] );
+                       }
                }
 
                $this->setupPage( $term );
@@ -251,7 +259,7 @@ class SpecialSearch extends SpecialPage {
                        return null;
                }
 
-               return $url === null ? $title->getFullURL() : $url;
+               return $url === null ? $title->getFullUrlForRedirect() : $url;
        }
 
        /**
@@ -344,12 +352,16 @@ class SpecialSearch extends SpecialPage {
                        $out->addHTML( $dymWidget->render( $term, $textMatches ) );
                }
 
-               $out->addHTML( "<div class='searchresults'>" );
-
                $hasErrors = $textStatus && $textStatus->getErrors();
                $hasOtherResults = $textMatches &&
                        $textMatches->hasInterwikiResults( SearchResultSet::INLINE_RESULTS );
 
+               if ( $textMatches->hasInterwikiResults( SearchResultSet::SECONDARY_RESULTS ) ) {
+                       $out->addHTML( '<div class="searchresults mw-searchresults-has-iw">' );
+               } else {
+                       $out->addHTML( '<div class="searchresults">' );
+               }
+
                if ( $hasErrors ) {
                        list( $error, $warning ) = $textStatus->splitByErrorType();
                        if ( $error->getErrors() ) {
@@ -385,13 +397,26 @@ class SpecialSearch extends SpecialPage {
                // results to display.
                $linkRenderer = $this->getLinkRenderer();
                $mainResultWidget = new FullSearchResultWidget( $this, $linkRenderer );
-               $sidebarResultWidget = new SimpleSearchResultWidget( $this, $linkRenderer );
-               $sidebarResultsWidget = new InterwikiSearchResultSetWidget(
-                       $this,
-                       $sidebarResultWidget,
-                       $linkRenderer,
-                       MediaWikiServices::getInstance()->getInterwikiLookup()
-               );
+
+               if ( $search->getFeatureData( 'enable-new-crossproject-page' ) ) {
+
+                       $sidebarResultWidget = new InterwikiSearchResultWidget( $this, $linkRenderer );
+                       $sidebarResultsWidget = new InterwikiSearchResultSetWidget(
+                               $this,
+                               $sidebarResultWidget,
+                               $linkRenderer,
+                               MediaWikiServices::getInstance()->getInterwikiLookup()
+                       );
+               } else {
+                       $sidebarResultWidget = new SimpleSearchResultWidget( $this, $linkRenderer );
+                       $sidebarResultsWidget = new SimpleSearchResultSetWidget(
+                               $this,
+                               $sidebarResultWidget,
+                               $linkRenderer,
+                               MediaWikiServices::getInstance()->getInterwikiLookup()
+                       );
+               }
+
                $widget = new BasicSearchResultSetWidget( $this, $mainResultWidget, $sidebarResultsWidget );
 
                $out->addHTML( $widget->render(
@@ -454,7 +479,9 @@ class SpecialSearch extends SpecialPage {
                        if ( $title->isKnown() ) {
                                $messageName = 'searchmenu-exists';
                                $linkClass = 'mw-search-exists';
-                       } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
+                       } elseif ( ContentHandler::getForTitle( $title )->supportsDirectEditing()
+                               && $title->quickUserCan( 'create', $this->getUser() )
+                       ) {
                                $messageName = 'searchmenu-new';
                        }
                }