MediaWiki r43499 - Code Review

Jump to: navigation, search
Repository:MediaWiki
Revision:r43498‎ | r43499 (on ViewVC)‎ | r43500 >
Date:19:11, 14 November 2008
Author:brion
Status:ok (Comments)
Tags:
Comment:
Reverting in-development search changes pending fixing.

Can we please do these sorts of experimental developments on branches before putting them to trunk? Our trunk is meant to be functional and ready to deploy at all times; doing experiments on trunk delays deployments because we have to test and fix them or roll them back.

Reverted:
r43376
r43385
r43403
r43404
r43405
r43406
r43423

Issues I noticed during a few minutes testing:
* Background color mismatch on the frameset for wikis that set a BG color on Special:
* 'browse pages with this prefix' is kind of funky in "Pages & Project" (goes to main namespace only)
* Which namespaces are in "Pages & Project" is not discoverable
* Default link to nonexistent help page Project:Searching kind of sucks. we should avoid doing those by default. It used to link to Help:Contents; any reason for the change from one page which might have previously existed to one which doesn't?
* "Create the page "Stuff" on this wiki!" - Double page creation links seem kind of weird. There should only be one, otherwise why have two?
* Bad prefix link output when search terms are not a valid wiki title
* We've lost the Whatlinkshere link from the old results
Modified paths:

Diff [purge]

Index: trunk/phase3/maintenance/language/messages.inc
===================================================================
--- trunk/phase3/maintenance/language/messages.inc	(revision 43498)
+++ trunk/phase3/maintenance/language/messages.inc	(revision 43499)
@@ -760,6 +760,11 @@
 	'search' => array(
 		'searchresults',
 		'searchresults-title',
+		'searchresulttext',
+		'searchsubtitle',
+		'searchsubtitleinvalid',
+		'noexactmatch',
+		'noexactmatch-nocreate',
 		'toomanymatches',
 		'titlematches',
 		'notitlematches',
@@ -768,25 +773,6 @@
 		'prevn',
 		'nextn',
 		'viewprevnext',
-		'searchmenu-legend',
-		'searchmenu-exists',
-		'searchmenu-new',
-		'searchhelp-url',
-		'searchmenu-prefix',
-		'searchmenu-help',
-		'searchprofile-articles',
-		'searchprofile-articles-and-proj',
-		'searchprofile-project',
-		'searchprofile-images',
-		'searchprofile-everything',
-		'searchprofile-advanced',
-		'searchprofile-articles-tooltip',
-		'searchprofile-project-tooltip',
-		'searchprofile-images-tooltip',
-		'searchprofile-everything-tooltip',
-		'searchprofile-advanced-tooltip',
-		'prefs-search-nsdefault',
-		'prefs-search-nscustom',
 		'search-result-size',
 		'search-result-score',
 		'search-redirect',
@@ -805,7 +791,7 @@
 		'showingresults',
 		'showingresultsnum',
 		'showingresultstotal',
-		'search-nonefound',
+		'nonefound',
 		'powersearch',
 		'powersearch-legend',
 		'powersearch-ns',
@@ -879,6 +865,7 @@
 		'allowemail',
 		'prefs-searchoptions',
 		'prefs-namespaces',
+		'defaultns',
 		'default',
 		'files',
 	),
Index: trunk/phase3/skins/monobook/main.css
===================================================================
--- trunk/phase3/skins/monobook/main.css	(revision 43498)
+++ trunk/phase3/skins/monobook/main.css	(revision 43499)
@@ -1409,10 +1409,6 @@
 	padding:2px;
 }
 
-#powersearch p {
-	margin-top:0px;
-}
-
 div.multipageimagenavbox {
    border: solid 1px silver;
    padding: 4px;
Index: trunk/phase3/skins/common/shared.css
===================================================================
--- trunk/phase3/skins/common/shared.css	(revision 43498)
+++ trunk/phase3/skins/common/shared.css	(revision 43499)
@@ -106,18 +106,12 @@
 }
 .mw-search-results li {
 	padding-bottom: 1em;
-	list-style:none;
 }
 .mw-search-result-data {
 	color: green;
 	font-size: 97%;
 }
 
-td#mw-search-menu {
-	padding-left:6em;
-	font-size:85%;
-}
-
 div#mw-search-interwiki {
 	float: right;
 	width: 18em;
@@ -150,14 +144,6 @@
 	font-weight: bold;
 }
 
-div.searchresults {
-	border:1px solid darkblue;
-	padding-top: 5px;
-	padding-bottom: 5px;
-	padding-left: 15px;
-	padding-right: 15px;
-}
-
 /*
  * UserRights stuff
  */
Index: trunk/phase3/includes/SearchEngine.php
===================================================================
--- trunk/phase3/includes/SearchEngine.php	(revision 43498)
+++ trunk/phase3/includes/SearchEngine.php	(revision 43499)
@@ -43,11 +43,6 @@
 		return null;
 	}
 	
-	/** If this search backend can list/unlist redirects */
-	function acceptListRedirects() {
-		return true;
-	}
-	
 	/**
 	 * If an exact title match can be find, or a very slightly close match,
 	 * return the title. If no match, returns NULL.
@@ -267,52 +262,8 @@
 		
 		return array_keys($wgNamespacesToBeSearchedDefault, true);
 	}
-	
+
 	/**
-	 * Get a list of namespace names useful for showing in tooltips
-	 * and preferences
-	 *
-	 * @param unknown_type $namespaces
-	 */
-	public static function namespacesAsText( $namespaces ){
-		global $wgContLang;
-		
-		$formatted = array_map( array($wgContLang,'getFormattedNsText'), $namespaces );
-		foreach( $formatted as $key => $ns ){
-			if ( empty($ns) )
-				$formatted[$key] = wfMsg( 'blanknamespace' );
-		}
-		return $formatted;
-	}
-	
-	/**
-	 * An array of "project" namespaces indexes typically searched
-	 * by logged-in users
-	 * 
-	 * @return array 
-	 * @static
-	 */
-	public static function projectNamespaces() {
-		global $wgNamespacesToBeSearchedDefault, $wgNamespacesToBeSearchedProject;
-		
-		return array_keys( $wgNamespacesToBeSearchedProject, true );
-	}
-	
-	/**
-	 * An array of "project" namespaces indexes typically searched
-	 * by logged-in users in addition to the default namespaces
-	 * 
-	 * @return array 
-	 * @static
-	 */
-	public static function defaultAndProjectNamespaces() {
-		global $wgNamespacesToBeSearchedDefault, $wgNamespacesToBeSearchedProject;
-		
-		return array_keys( $wgNamespacesToBeSearchedDefault + 
-			$wgNamespacesToBeSearchedProject, true);
-	}
-	
-	/**
 	 * Return a 'cleaned up' search string
 	 *
 	 * @return string
@@ -534,11 +485,11 @@
 	var $mRevision = null;
 	var $mImage = null;
 
-	function __construct( $row ) {
+	function SearchResult( $row ) {
 		$this->mTitle = Title::makeTitle( $row->page_namespace, $row->page_title );
 		if( !is_null($this->mTitle) ){
 			$this->mRevision = Revision::newFromTitle( $this->mTitle );
-			if( $this->mTitle->getNamespace() === NS_IMAGE )
+			if($this->mTitle->getNamespace() == NS_IMAGE)
 				$this->mImage = wfFindFile( $this->mTitle );
 		}
 	}
Index: trunk/phase3/includes/DefaultSettings.php
===================================================================
--- trunk/phase3/includes/DefaultSettings.php	(revision 43498)
+++ trunk/phase3/includes/DefaultSettings.php	(revision 43499)
@@ -1436,7 +1436,7 @@
  * to ensure that client-side caches don't keep obsolete copies of global
  * styles.
  */
-$wgStyleVersion = '184';
+$wgStyleVersion = '183';
 
 
 # Server-side caching:
@@ -1924,20 +1924,6 @@
 );
 
 /**
- * Additional namespaces to those in $wgNamespacesToBeSearchedDefault that
- * will be added to default search for "project" page inclusive searches
- * 
- * Same format as $wgNamespacesToBeSearchedDefault
- */  
-$wgNamespacesToBeSearchedProject = array(
-	NS_USER           => true,
-	NS_PROJECT        => true,	
-	NS_HELP           => true,
-	NS_CATEGORY       => true,
-);
-
-
-/**
  * Site notice shown at the top of each page
  *
  * This message can contain wiki text, and can also be set through the
Index: trunk/phase3/includes/specials/SpecialSearch.php
===================================================================
--- trunk/phase3/includes/specials/SpecialSearch.php	(revision 43498)
+++ trunk/phase3/includes/specials/SpecialSearch.php	(revision 43499)
@@ -39,8 +39,7 @@
 	$searchPage = new SpecialSearch( $wgRequest, $wgUser );
 	if( $wgRequest->getVal( 'fulltext' ) 
 		|| !is_null( $wgRequest->getVal( 'offset' )) 
-		|| !is_null( $wgRequest->getVal( 'searchx' )) )
-	{
+		|| !is_null( $wgRequest->getVal( 'searchx' ))) {
 		$searchPage->showResults( $search, 'search' );
 	} else {
 		$searchPage->goResult( $search );
@@ -70,7 +69,6 @@
 		}
 
 		$this->searchRedirects = $request->getcheck( 'redirs' ) ? true : false;
-		$this->searchAdvanced = $request->getVal('advanced');
 	}
 
 	/**
@@ -79,7 +77,8 @@
 	 * @public
 	 */
 	function goResult( $term ) {
-		global $wgOut, $wgGoToEdit;
+		global $wgOut;
+		global $wgGoToEdit;
 
 		$this->setupPage( $term );
 
@@ -87,7 +86,7 @@
 		$t = Title::newFromText( $term );
 
 		# If the string cannot be used to create a title
-		if( is_null( $t ) ) {
+		if( is_null( $t ) ){
 			return $this->showResults( $term );
 		}
 
@@ -103,12 +102,19 @@
 		if( ! is_null( $t ) ) {
 			wfRunHooks( 'SpecialSearchNogomatch', array( &$t ) );
 			# If the feature is enabled, go straight to the edit page
-			if( $wgGoToEdit ) {
+			if ( $wgGoToEdit ) {
 				$wgOut->redirect( $t->getFullURL( 'action=edit' ) );
 				return;
 			}
 		}
 
+		$wgOut->wrapWikiMsg( "==$1==\n", 'notitlematches' );
+		if( $t->quickUserCan( 'create' ) && $t->quickUserCan( 'edit' ) ) {
+			$wgOut->addWikiMsg( 'noexactmatch', wfEscapeWikiText( $term ) );
+		} else {
+			$wgOut->addWikiMsg( 'noexactmatch-nocreate', wfEscapeWikiText( $term ) );
+		}
+
 		return $this->showResults( $term );
 	}
 
@@ -123,36 +129,20 @@
 		$sk = $wgUser->getSkin();
 
 		$this->setupPage( $term );
-		$this->searchEngine = SearchEngine::create();
-		
-		$t = Title::newFromText( $term );
 
-		$wgOut->addHtml( 
-			Xml::openElement( 'table', array( 'border'=>0, 'cellpadding'=>0, 'cellspacing'=>0 ) ) .
-			Xml::openElement( 'tr' ) .
-			Xml::openElement( 'td' ) . "\n"	
-		);
-		if( $this->searchAdvanced ) {
-			$wgOut->addHTML( $this->powerSearchBox( $term ) );
-			$showMenu = false;
-		} else { 			
-			$wgOut->addHTML( $this->shortDialog( $term ) );
-			$showMenu = true;
-		}
-		$wgOut->addHtml(
-			Xml::closeElement('td') .
-			Xml::closeElement('tr') .
-			Xml::closeElement('table')
-		);
+		$wgOut->addWikiMsg( 'searchresulttext' );
 
 		if( '' === trim( $term ) ) {
 			// Empty query -- straight view of search form
+			$wgOut->setSubtitle( '' );
+			$wgOut->addHTML( $this->powerSearchBox( $term ) );
+			$wgOut->addHTML( $this->powerSearchFocus() );
 			wfProfileOut( $fname );
 			return;
 		}
 
 		global $wgDisableTextSearch;
-		if( $wgDisableTextSearch ) {
+		if ( $wgDisableTextSearch ) {
 			global $wgSearchForwardUrl;
 			if( $wgSearchForwardUrl ) {
 				$url = str_replace( '$1', urlencode( $term ), $wgSearchForwardUrl );
@@ -175,7 +165,9 @@
 			return;
 		}
 
-		$search =& $this->searchEngine;
+		$wgOut->addHTML( $this->shortDialog( $term ) );
+
+		$search = SearchEngine::create();
 		$search->setLimitOffset( $this->limit, $this->offset );
 		$search->setNamespaces( $this->namespaces );
 		$search->showRedirects = $this->searchRedirects;
@@ -184,53 +176,43 @@
 		$titleMatches = $search->searchTitle( $rewritten );
 
 		// Sometimes the search engine knows there are too many hits
-		if( $titleMatches instanceof SearchResultTooMany ) {
+		if ($titleMatches instanceof SearchResultTooMany) {
 			$wgOut->addWikiText( '==' . wfMsg( 'toomanymatches' ) . "==\n" );
+			$wgOut->addHTML( $this->powerSearchBox( $term ) );
+			$wgOut->addHTML( $this->powerSearchFocus() );
 			wfProfileOut( $fname );
 			return;
 		}
 		
 		$textMatches = $search->searchText( $rewritten );
-		
+
 		// did you mean... suggestions
-		if( $textMatches && $textMatches->hasSuggestion() ) {
+		if($textMatches && $textMatches->hasSuggestion()){
 			$st = SpecialPage::getTitleFor( 'Search' );			
-			$stParams = wfArrayToCGI( 
-				array( 'search' => $textMatches->getSuggestionQuery(), 'fulltext' 	=> wfMsg('search') ),
-				$this->powerSearchOptions()
-			);
+			$stParams = wfArrayToCGI( array( 
+					'search' 	=> $textMatches->getSuggestionQuery(), 
+					'fulltext' 	=> wfMsg('search')),
+					$this->powerSearchOptions());
+					
 			$suggestLink = '<a href="'.$st->escapeLocalURL($stParams).'">'.
-				$textMatches->getSuggestionSnippet().'</a>';
-
+					$textMatches->getSuggestionSnippet().'</a>';
+			 		
 			$wgOut->addHTML('<div class="searchdidyoumean">'.wfMsg('search-suggest',$suggestLink).'</div>');
 		}
-		
-		// show direct page/create link
-		if( !is_null($t) ) {
-			if( !$t->exists() ) {
-				$wgOut->addWikiMsg( 'searchmenu-new', wfEscapeWikiText( $t->getPrefixedText() ) );
-			} else {
-				$wgOut->addWikiMsg( 'searchmenu-exists', wfEscapeWikiText( $t->getPrefixedText() ) );
-			}
-		}
-	
+
 		// show number of results
-		$numTitleMatches = $titleMatches ? $titleMatches->numRows() : 0;
-		$numTextMatches = $textMatches ? $textMatches->numRows() : 0;
-		$highestNum = max( $numTitleMatches, $numTextMatches );
-		// Total query matches (possible false positives)
-		$num = $numTitleMatches + $numTextMatches;
-		// Get total actual results
+		$num = ( $titleMatches ? $titleMatches->numRows() : 0 )
+			+ ( $textMatches ? $textMatches->numRows() : 0);
 		$totalNum = 0;
-		if( $titleMatches && !is_null($titleMatches->getTotalHits()) )
+		if($titleMatches && !is_null($titleMatches->getTotalHits()))
 			$totalNum += $titleMatches->getTotalHits();
-		if( $textMatches && !is_null($textMatches->getTotalHits()) )
+		if($textMatches && !is_null($textMatches->getTotalHits()))
 			$totalNum += $textMatches->getTotalHits();
-		if( $num > 0 ) {
-			if( $totalNum > 0 ) {
+		if ( $num > 0 ) {
+			if ( $totalNum > 0 ){
 				$top = wfMsgExt('showingresultstotal', array( 'parseinline' ), 
 					$this->offset+1, $this->offset+$num, $totalNum, $num );
-			} elseif( $num >= $this->limit ) {
+			} elseif ( $num >= $this->limit ) {
 				$top = wfShowingResults( $this->offset, $this->limit );
 			} else {
 				$top = wfShowingResultsNum( $this->offset, $this->limit, $num );
@@ -242,17 +224,16 @@
 		if( $num || $this->offset ) {
 			$prevnext = wfViewPrevNext( $this->offset, $this->limit,
 				SpecialPage::getTitleFor( 'Search' ),
-				wfArrayToCGI( $this->powerSearchOptions(), array( 'search' => $term ) ),
-				($highestNum < $this->limit)
-			);
+				wfArrayToCGI(
+					$this->powerSearchOptions(),
+					array( 'search' => $term ) ),
+					($num < $this->limit) );
 			$wgOut->addHTML( "<p class='mw-search-pager-top'>{$prevnext}</p>\n" );
 			wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
 		} else {
 			wfRunHooks( 'SpecialSearchNoResults', array( $term ) );
 		}
 
-		$wgOut->addHtml( "<div class='searchresults'>" );
-
 		if( $titleMatches ) {
 			if( $titleMatches->numRows() ) {
 				$wgOut->wrapWikiMsg( "==$1==\n", 'titlematches' );
@@ -282,27 +263,30 @@
 			$textMatches->free();
 		}
 
-		if( $num == 0 ) {
-			$wgOut->addWikiMsg( 'search-nonefound' );
+		if ( $num == 0 ) {
+			$wgOut->addWikiMsg( 'nonefound' );
 		}
-
-		$wgOut->addHtml( "</div>" );
-
 		if( $num || $this->offset ) {
 			$wgOut->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
 		}
+		$wgOut->addHTML( $this->powerSearchBox( $term ) );
 		wfProfileOut( $fname );
 	}
+
+	#------------------------------------------------------------------
+	# Private methods below this line
 	
 	/**
 	 *
 	 */
-	protected function setupPage( $term ) {
+	function setupPage( $term ) {
 		global $wgOut;
-		if( !empty( $term ) ) {
+		if( !empty( $term ) ){
 			$wgOut->setPageTitle( wfMsg( 'searchresults') );
 			$wgOut->setHTMLTitle( wfMsg( 'pagetitle', wfMsg( 'searchresults-title', $term) ) );
 		}			
+		$subtitlemsg = ( Title::newFromText( $term ) ? 'searchsubtitle' : 'searchsubtitleinvalid' );
+		$wgOut->setSubtitle( $wgOut->parse( wfMsg( $subtitlemsg, wfEscapeWikiText($term) ) ) );
 		$wgOut->setArticleRelated( false );
 		$wgOut->setRobotPolicy( 'noindex,nofollow' );
 	}
@@ -313,8 +297,9 @@
 	 *
 	 * @param WebRequest $request
 	 * @return array
+	 * @private
 	 */
-	protected function powerSearch( &$request ) {
+	function powerSearch( &$request ) {
 		$arr = array();
 		foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
 			if( $request->getCheck( 'ns' . $ns ) ) {
@@ -327,15 +312,14 @@
 	/**
 	 * Reconstruct the 'power search' options for links
 	 * @return array
+	 * @private
 	 */
-	protected function powerSearchOptions() {
+	function powerSearchOptions() {
 		$opt = array();
 		foreach( $this->namespaces as $n ) {
 			$opt['ns' . $n] = 1;
 		}
 		$opt['redirs'] = $this->searchRedirects ? 1 : 0;
-		if( $this->searchAdvanced )
-			$opt['advanced'] = $this->searchAdvanced;
 		return $opt;
 	}
 
@@ -344,11 +328,11 @@
 	 * 
 	 * @param SearchResultSet $matches
 	 */
-	protected function showMatches( &$matches ) {
-		global $wgContLang;
+	function showMatches( &$matches ) {
 		$fname = 'SpecialSearch::showMatches';
 		wfProfileIn( $fname );
 
+		global $wgContLang;
 		$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
 		$out = "";
@@ -360,12 +344,14 @@
 		
 		$off = $this->offset + 1;
 		$out .= "<ul class='mw-search-results'>\n";
+
 		while( $result = $matches->next() ) {
 			$out .= $this->showHit( $result, $terms );
 		}
 		$out .= "</ul>\n";
 
 		// convert the whole thing to desired language variant
+		global $wgContLang;
 		$out = $wgContLang->convert( $out );
 		wfProfileOut( $fname );
 		return $out;
@@ -376,7 +362,7 @@
 	 * @param SearchResult $result
 	 * @param array $terms terms to highlight
 	 */
-	protected function showHit( $result, $terms ) {
+	function showHit( $result, $terms ) {
 		$fname = 'SpecialSearch::showHit';
 		wfProfileIn( $fname );
 		global $wgUser, $wgContLang, $wgLang;
@@ -394,7 +380,7 @@
 		//If page content is not readable, just return the title.
 		//This is not quite safe, but better than showing excerpts from non-readable pages
 		//Note that hiding the entry entirely would screw up paging.
-		if(!$t->userCanRead()) {
+		if (!$t->userCanRead()) {
 			wfProfileOut( $fname );
 			return "<li>{$link}</li>\n";
 		}
@@ -448,7 +434,7 @@
 
 		// link to related articles if supported
 		$related = '';
-		if( $result->hasRelated() ) {
+		if( $result->hasRelated() ){
 			$st = SpecialPage::getTitleFor( 'Search' );
 			$stParams = wfArrayToCGI( $this->powerSearchOptions(),
 				array('search'    => wfMsgForContent('searchrelated').':'.$t->getPrefixedText(),
@@ -466,13 +452,14 @@
 				if( $thumb ) {
 					$desc = $img->getShortDesc();
 					wfProfileOut( $fname );
+					// Ugly table. :D
 					// Float doesn't seem to interact well with the bullets.
-					// Table messes up vertical alignment of the bullets.
-					// Bullets are therefore disabled (didn't look great anyway).
+					// Table messes up vertical alignment of the bullet, but I'm
+					// not sure what more I can do about that. :(
 					return "<li>" .
 						'<table class="searchResultImage">' .
 						'<tr>' .
-						'<td width="120" align="center" valign="top">' .
+						'<td width="120" align="center">' .
 						$thumb->toHtml( array( 'desc-link' => true ) ) .
 						'</td>' .
 						'<td valign="top">' .
@@ -499,22 +486,21 @@
 	 * 
 	 * @param SearchResultSet $matches
 	 */
-	protected function showInterwiki( &$matches, $query ) {
+	function showInterwiki( &$matches, $query ) {
 		$fname = 'SpecialSearch::showInterwiki';
 		wfProfileIn( $fname );
 
 		global $wgContLang;
 		$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
 
-		$out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>".
-			wfMsg('search-interwiki-caption')."</div>\n";		
+		$out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>".wfMsg('search-interwiki-caption')."</div>\n";		
 		$off = $this->offset + 1;
 		$out .= "<ul start='{$off}' class='mw-search-iwresults'>\n";
 
 		// work out custom project captions
 		$customCaptions = array();
 		$customLines = explode("\n",wfMsg('search-interwiki-custom')); // format per line <iwprefix>:<caption>
-		foreach($customLines as $line) {
+		foreach($customLines as $line){
 			$parts = explode(":",$line,2);
 			if(count($parts) == 2) // validate line
 				$customCaptions[$parts[0]] = $parts[1]; 
@@ -545,7 +531,7 @@
 	 * @param string $query 
 	 * @param array $customCaptions iw prefix -> caption
 	 */
-	protected function showInterwikiHit( $result, $lastInterwiki, $terms, $query, $customCaptions) {
+	function showInterwikiHit( $result, $lastInterwiki, $terms, $query, $customCaptions){
 		$fname = 'SpecialSearch::showInterwikiHit';
 		wfProfileIn( $fname );
 		global $wgUser, $wgContLang, $wgLang;
@@ -571,7 +557,7 @@
 
 		$out = "";
 		// display project name 
-		if(is_null($lastInterwiki) || $lastInterwiki != $t->getInterwiki()) {
+		if(is_null($lastInterwiki) || $lastInterwiki != $t->getInterwiki()){
 			if( key_exists($t->getInterwiki(),$customCaptions) )
 				// captions from 'search-interwiki-custom'
 				$caption = $customCaptions[$t->getInterwiki()];
@@ -585,8 +571,7 @@
 			$searchTitle = Title::newFromText($t->getInterwiki().":Special:Search");   			
 			$searchLink = $sk->makeKnownLinkObj( $searchTitle, wfMsg('search-interwiki-more'),
 				wfArrayToCGI(array('search' => $query, 'fulltext' => 'Search'))); 
-			$out .= "</ul><div class='mw-search-interwiki-project'><span class='mw-search-interwiki-more'>
-				{$searchLink}</span>{$caption}</div>\n<ul>";
+			$out .= "</ul><div class='mw-search-interwiki-project'><span class='mw-search-interwiki-more'>{$searchLink}</span>{$caption}</div>\n<ul>";
 		}
 
 		$out .= "<li>{$link} {$redirect}</li>\n"; 
@@ -600,7 +585,7 @@
 	 * @param $term string: search term
 	 * @return $out string: HTML form
 	 */
-	protected function powerSearchBox( $term ) {
+	function powerSearchBox( $term ) {
 		global $wgScript;
 
 		$namespaces = '';
@@ -614,189 +599,61 @@
 					Xml::closeElement( 'span' ) . "\n";
 		}
 
-		if( $this->searchEngine->acceptListRedirects() ) {
-			$redirect = Xml::check( 'redirs', $this->searchRedirects, array( 'value' => '1', 'id' => 'redirs' ) );
-			$redirectLabel =  Xml::label( wfMsg( 'powersearch-redir' ), 'redirs' );
-		} else{
-			$redirect = '';
-			$redirectLabel = '';
-		}
+		$redirect = Xml::check( 'redirs', $this->searchRedirects, array( 'value' => '1', 'id' => 'redirs' ) );
+		$redirectLabel = Xml::label( wfMsg( 'powersearch-redir' ), 'redirs' );
 		$searchField = Xml::input( 'search', 50, $term, array( 'type' => 'text', 'id' => 'powerSearchText' ) );
 		$searchButton = Xml::submitButton( wfMsg( 'powersearch' ), array( 'name' => 'fulltext' ) ) . "\n";
 		$searchTitle = SpecialPage::getTitleFor( 'Search' );
 		
 		$out = Xml::openElement( 'form', array(	'id' => 'powersearch', 'method' => 'get', 'action' => $wgScript ) ) .
-			Xml::hidden( 'title', $searchTitle->getPrefixedText() ) .
-			Xml::hidden( 'advanced', 1 ) .
-			"<p>" .
-			wfMsgExt( 'powersearch-ns', array( 'parseinline' ) ) .
-			"<br />" .
-			$namespaces .
-			"</p>" .
-			"<p>" .
-			$redirect . " " . $redirectLabel .
-			"</p>" .
-			wfMsgExt( 'powersearch-field', array( 'parseinline' ) ) .
-			"&nbsp;" .
-			$searchField .
-			"&nbsp;" .
-			$searchButton .
-			' (' . wfMsgExt('searchmenu-help',array('parseinline') ) . ')' .
+			Xml::fieldset( wfMsg( 'powersearch-legend' ),
+				Xml::hidden( 'title', $searchTitle->getPrefixedText() ) .
+				"<p>" .
+				wfMsgExt( 'powersearch-ns', array( 'parseinline' ) ) .
+				"<br />" .
+				$namespaces .
+				"</p>" .
+				"<p>" .
+				$redirect . " " . $redirectLabel .
+				"</p>" .
+				wfMsgExt( 'powersearch-field', array( 'parseinline' ) ) .
+				"&nbsp;" .
+				$searchField .
+				"&nbsp;" .
+				$searchButton ) .
 			"</form>";
-		if( $term )
-			$out .= wfMsgExt( 'searchmenu-prefix', array('parseinline'), $term );
 
-		return Xml::openElement( 'fieldset', array('id' => 'mw-searchoptions','style' => 'margin:0em;') ) .
-			Xml::element( 'legend', null, wfMsg('searchmenu-legend') ) .
-			$this->formHeader($term) . $out . 
-			Xml::closeElement( 'fieldset' );
+		return $out;
 	}
 
-	protected function powerSearchFocus() {
+	function powerSearchFocus() {
 		global $wgJsMimeType;
 		return "<script type=\"$wgJsMimeType\">" .
-			"hookEvent(\"load\", function() {" .
+			"hookEvent(\"load\", function(){" .
 				"document.getElementById('powerSearchText').focus();" .
 			"});" .
 			"</script>";
 	}
-	
-	/** Make a search link with some target namespaces */
-	protected function makeSearchLink( $term, $namespaces, $label, $tooltip, $params=array() ) {
-		$opt = $params;
-		foreach( $namespaces as $n ) {
-			$opt['ns' . $n] = 1;
-		}
-		$opt['redirs'] = $this->searchRedirects ? 1 : 0;
 
-		$st = SpecialPage::getTitleFor( 'Search' );		
-		$stParams = wfArrayToCGI( array( 'search' => $term, 'fulltext' => wfMsg( 'search' ) ), $opt );
-
-		return Xml::element( 'a', 
-			array( 'href'=> $st->getLocalURL( $stParams ), 'title' => $tooltip ), 
-			$label );	
-	}
-	
-	/** Check if query starts with image: prefix */
-	protected function startsWithImage( $term ) {
-		global $wgContLang;
-		
-		$p = explode( ':', $term );
-		if( count( $p ) > 1 ) {
-			return $wgContLang->getNsIndex( $p[0] ) == NS_IMAGE;
-		}
-		return false;
-	}
-
-	protected function formHeader( $term ) {
-		global $wgContLang, $wgCanonicalNamespaceNames;
-		
-		$sep = '&nbsp;&nbsp;&nbsp;';
-		$out = Xml::openElement('div', array( 'style' => 'padding-bottom:0.5em;' ) );
-		
-		$bareterm = $term;
-		if( $this->startsWithImage( $term ) )
-			$bareterm = substr( $term, strpos( $term, ':' ) + 1 ); // delete all/image prefix
-			
-		$nsAllSet = array_keys( SearchEngine::searchableNamespaces() );
-		// figure out the active search profile header
-		if( $this->searchAdvanced )
-			$active = 'advanced';
-		else if( $this->namespaces === NS_IMAGE || $this->startsWithImage( $term ) )
-			$active = 'images';
-		elseif( $this->namespaces === $nsAllSet )
-			$active = 'all';
-		elseif( $this->namespaces === SearchEngine::defaultNamespaces() )
-			$active = 'default';
-		elseif( $this->namespaces === SearchEngine::defaultAndProjectNamespaces() )
-			$active = 'withproject';
-		elseif( $this->namespaces === SearchEngine::projectNamespaces() )
-			$active = 'project';
-		else
-			$active = 'advanced';
-		
-		
-		// search profiles headers
-		$m = wfMsg( 'searchprofile-articles' );
-		$tt = wfMsg( 'searchprofile-articles-tooltip', 
-			implode( ', ', SearchEngine::namespacesAsText( SearchEngine::defaultNamespaces() ) ) );
-		if( $active == 'default' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$out .= $this->makeSearchLink( $bareterm, SearchEngine::defaultNamespaces(), $m, $tt );
-		}
-		$out .= $sep;
-		
-		$m = wfMsg( 'searchprofile-images' );
-		$tt = wfMsg( 'searchprofile-images-tooltip' );
-		if( $active == 'images' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$imageTextForm = $wgContLang->getFormattedNsText(NS_IMAGE).':'.$bareterm;
-			$out .= $this->makeSearchLink( $imageTextForm, array( NS_IMAGE ) , $m, $tt );
-		}
-		$out .= $sep;
-			
-		$m = wfMsg( 'searchprofile-articles-and-proj' );
-		$tt = wfMsg( 'searchprofile-project-tooltip', 
-			implode( ', ', SearchEngine::namespacesAsText( SearchEngine::defaultAndProjectNamespaces() ) ) );
-		if( $active == 'withproject' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$out .= $this->makeSearchLink( $bareterm, SearchEngine::defaultAndProjectNamespaces(), $m, $tt );
-		}
-		$out .= $sep;
-		
-		$m = wfMsg( 'searchprofile-project' );
-		$tt = wfMsg( 'searchprofile-project-tooltip', 
-			implode( ', ', SearchEngine::namespacesAsText( SearchEngine::projectNamespaces() ) ) );
-		if( $active == 'project' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$out .= $this->makeSearchLink( $bareterm, SearchEngine::projectNamespaces(), $m, $tt );
-		}
-		$out .= $sep;
-			
-		$m = wfMsg( 'searchprofile-everything' );
-		$tt = wfMsg( 'searchprofile-everything-tooltip' );
-		if( $active == 'all' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$out .= $this->makeSearchLink( $bareterm, $nsAllSet, $m, $tt );
-		}
-		$out .= $sep;
-		
-		$m = wfMsg( 'searchprofile-advanced' );
-		$tt = wfMsg( 'searchprofile-advanced-tooltip' );
-		if( $active == 'advanced' ) {
-			$out .= Xml::element( 'strong', array( 'title'=>$tt ), $m );	
-		} else {
-			$out .= $this->makeSearchLink( $bareterm, $this->namespaces, $m, $tt, array( 'advanced' => '1' ) );
-		}
-		$out .= Xml::closeElement('div') ;
-		
-		return $out;
-	}
-	
-	protected function shortDialog( $term ) {
+	function shortDialog($term) {
 		global $wgScript;
-		$out = Xml::openElement( 'form', array( 'id' => 'search', 'method' => 'get', 'action' => $wgScript ) );
+
+		$out  = Xml::openElement( 'form', array(
+			'id' => 'search',
+			'method' => 'get',
+			'action' => $wgScript
+		));
 		$searchTitle = SpecialPage::getTitleFor( 'Search' );
-		$out .= Xml::hidden( 'title', $searchTitle->getPrefixedText() ) . "\n";
-		$out .= Xml::input( 'search', 50, $term, array( 'type' => 'text', 'id' => 'searchText' ) ) . "\n";
+		$out .= Xml::hidden( 'title', $searchTitle->getPrefixedText() );
+		$out .= Xml::input( 'search', 50, $term, array( 'type' => 'text', 'id' => 'searchText' ) ) . ' ';
 		foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
 			if( in_array( $ns, $this->namespaces ) ) {
 				$out .= Xml::hidden( "ns{$ns}", '1' );
 			}
 		}
 		$out .= Xml::submitButton( wfMsg( 'searchbutton' ), array( 'name' => 'fulltext' ) );
-		$out .= ' (' . wfMsgExt('searchmenu-help',array('parseinline') ) . ')';
 		$out .= Xml::closeElement( 'form' );
-		if( $term )
-			$out .= wfMsgExt( 'searchmenu-prefix', array('parseinline'), $term );
-		return Xml::openElement( 'fieldset', array('id' => 'mw-searchoptions','style' => 'margin:0em;') ) .
-			Xml::element( 'legend', null, wfMsg('searchmenu-legend') ) .
-			$this->formHeader($term) . $out .
-			Xml::closeElement( 'fieldset' );
+
+		return $out;
 	}
 }
Index: trunk/phase3/languages/messages/MessagesEn.php
===================================================================
--- trunk/phase3/languages/messages/MessagesEn.php	(revision 43498)
+++ trunk/phase3/languages/messages/MessagesEn.php	(revision 43499)
@@ -1418,61 +1418,49 @@
 'diff-strike'             => "'''strikethrough'''",
 
 # Search results
-'searchresults'                    => 'Search results',
-'searchresults-title'              => 'Search results for "$1"',
-'toomanymatches'                   => 'Too many matches were returned, please try a different query',
-'titlematches'                     => 'Page title matches',
-'notitlematches'                   => 'No page title matches',
-'textmatches'                      => 'Page text matches',
-'notextmatches'                    => 'No page text matches',
-'prevn'                            => 'previous $1',
-'nextn'                            => 'next $1',
-'viewprevnext'                     => 'View ($1) ($2) ($3)',
-'searchmenu-legend'                => 'Search options',
-'searchmenu-exists'                => "'''There is page named \"[[\$1]]\" on this wiki'''",
-'searchmenu-new'                   => "'''[[:\$1|Create]] the page \"[[\$1]]\" on this wiki!'''",
-'searchhelp-url'                   => 'Project:Searching',
-'searchmenu-prefix'                => '[[Special:PrefixIndex/$1|Browse pages with this prefix]]',
-'searchmenu-help'                  => '[[{{MediaWiki:Searchhelp-url}}|{{int:help}}]]?', # do not translate or duplicate this message to other languages
-'searchprofile-articles'           => 'Pages',
-'searchprofile-articles-and-proj'  => 'Pages & Project',
-'searchprofile-project'            => 'Project',
-'searchprofile-images'             => 'Files',
-'searchprofile-everything'         => 'Everything',
-'searchprofile-advanced'           => 'Advanced',
-'searchprofile-articles-tooltip'   => 'Search in $1',
-'searchprofile-project-tooltip'    => 'Search in $1',
-'searchprofile-images-tooltip'     => 'Search for files',
-'searchprofile-everything-tooltip' => 'Search all of content (including talk pages)',
-'searchprofile-advanced-tooltip'   => 'Search in custom namespaces',
-'prefs-search-nsdefault'           => 'Search using defaults:',
-'prefs-search-nscustom'            => 'Search custom namespaces:',
-'search-result-size'               => '$1 ({{PLURAL:$2|1 word|$2 words}})',
-'search-result-score'              => 'Relevance: $1%',
-'search-redirect'                  => '(redirect $1)',
-'search-section'                   => '(section $1)',
-'search-suggest'                   => 'Did you mean: $1',
-'search-interwiki-caption'         => 'Sister projects',
-'search-interwiki-default'         => '$1 results:',
-'search-interwiki-custom'          => '', # do not translate or duplicate this message to other languages
-'search-interwiki-more'            => '(more)',
-'search-mwsuggest-enabled'         => 'with suggestions',
-'search-mwsuggest-disabled'        => 'no suggestions',
-'search-relatedarticle'            => 'Related',
-'mwsuggest-disable'                => 'Disable AJAX suggestions',
-'searchrelated'                    => 'related',
-'searchall'                        => 'all',
-'showingresults'                   => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.",
-'showingresultsnum'                => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
-'showingresultstotal'              => "Showing below {{PLURAL:$4|result '''$1''' of '''$3'''|results '''$1 - $2''' of '''$3'''}}",
-'search-nonefound'                 => 'There were no results matching the query.',
-'powersearch'                      => 'Advanced search',
-'powersearch-legend'               => 'Advanced search',
-'powersearch-ns'                   => 'Search in namespaces:',
-'powersearch-redir'                => 'List redirects',
-'powersearch-field'                => 'Search for',
-'search-external'                  => 'External search',
-'searchdisabled'                   => '{{SITENAME}} search is disabled.
+'searchresults'             => 'Search results',
+'searchresults-title'       => 'Search results for $1',
+'searchresulttext'          => 'For more information about searching {{SITENAME}}, see [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle'            => 'You searched for \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|all pages starting with "$1"]] | [[Special:WhatLinksHere/$1|all pages that link to "$1"]])',
+'searchsubtitleinvalid'     => "You searched for '''$1'''",
+'noexactmatch'              => "'''There is no page titled \"\$1\".'''
+You can [[:\$1|create this page]].",
+'noexactmatch-nocreate'     => "'''There is no page titled \"\$1\".'''",
+'toomanymatches'            => 'Too many matches were returned, please try a different query',
+'titlematches'              => 'Page title matches',
+'notitlematches'            => 'No page title matches',
+'textmatches'               => 'Page text matches',
+'notextmatches'             => 'No page text matches',
+'prevn'                     => 'previous $1',
+'nextn'                     => 'next $1',
+'viewprevnext'              => 'View ($1) ($2) ($3)',
+'search-result-size'        => '$1 ({{PLURAL:$2|1 word|$2 words}})',
+'search-result-score'       => 'Relevance: $1%',
+'search-redirect'           => '(redirect $1)',
+'search-section'            => '(section $1)',
+'search-suggest'            => 'Did you mean: $1',
+'search-interwiki-caption'  => 'Sister projects',
+'search-interwiki-default'  => '$1 results:',
+'search-interwiki-custom'   => '', # do not translate or duplicate this message to other languages
+'search-interwiki-more'     => '(more)',
+'search-mwsuggest-enabled'  => 'with suggestions',
+'search-mwsuggest-disabled' => 'no suggestions',
+'search-relatedarticle'     => 'Related',
+'mwsuggest-disable'         => 'Disable AJAX suggestions',
+'searchrelated'             => 'related',
+'searchall'                 => 'all',
+'showingresults'            => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.",
+'showingresultsnum'         => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
+'showingresultstotal'       => "Showing below {{PLURAL:$4|result '''$1''' of '''$3'''|results '''$1 - $2''' of '''$3'''}}",
+'nonefound'                 => "'''Note''': Only some namespaces are searched by default.
+Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc), or use the desired namespace as prefix.",
+'powersearch'               => 'Advanced search',
+'powersearch-legend'        => 'Advanced search',
+'powersearch-ns'            => 'Search in namespaces:',
+'powersearch-redir'         => 'List redirects',
+'powersearch-field'         => 'Search for',
+'search-external'           => 'External search',
+'searchdisabled'            => '{{SITENAME}} search is disabled.
 You can search via Google in the meantime.
 Note that their indexes of {{SITENAME}} content may be out of date.',
 'googlesearch'                     => '<form method="get" action="http://www.google.com/search" id="googlesearch">

Follow-up revisions

Rev.Commit summaryAuthorDate
r43512Recover from r43499. Gotta love having all messages in a database :)siebrand23:59, 14 November 2008

Comments

#Comment by Aaron Schulz (Talk | contribs)   23:24, 14 November 2008

Background color mismatch would probably be a local issue. Also, the prefix link there has the same issue as the one in use now.

#Comment by Aaron Schulz (Talk | contribs)   23:29, 14 November 2008

Is 'Whatlinkshere' even useful here?

Status & tagging log

Personal tools
Namespaces
Variants
Views
Actions
Site
Support
Download
Development
Communication
Toolbox