From bde3b1f926a8788a12d07f0c00d74c5feab6f372 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Thu, 30 Jul 2009 17:36:20 +0000 Subject: [PATCH] Removed $wgUseOldSearchUI and old search ui class --- includes/DefaultSettings.php | 3 - includes/specials/SpecialSearch.php | 722 +--------------------------- 2 files changed, 1 insertion(+), 724 deletions(-) diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 2c981eb85d..3ccddcdc82 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -2101,9 +2101,6 @@ $wgNamespacesToBeSearchedHelp = array( NS_HELP => true, ); - -$wgUseOldSearchUI = true; // temp testing variable - /** * If set to true the 'searcheverything' preference will be effective only for logged-in users. * Useful for big wikis to maintain different search profiles for anonymous and logged-in users. diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index 8acb8df101..b4ac3abf60 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -35,8 +35,7 @@ function wfSpecialSearch( $par = '' ) { $titleParam = str_replace( '_', ' ', $par ); // Fetch the search term $search = str_replace( "\n", " ", $wgRequest->getText( 'search', $titleParam ) ); - $class = $wgUseOldSearchUI ? 'SpecialSearchOld' : 'SpecialSearch'; - $searchPage = new $class( $wgRequest, $wgUser ); + $searchPage = new SpecialSearch( $wgRequest, $wgUser ); if( $wgRequest->getVal( 'fulltext' ) || !is_null( $wgRequest->getVal( 'offset' )) || !is_null( $wgRequest->getVal( 'searchx' )) ) @@ -973,722 +972,3 @@ class SpecialSearch { } } -/** - * implements Special:Search - Run text & title search and display the output - * @ingroup SpecialPage - */ -class SpecialSearchOld { - - /** - * Set up basic search parameters from the request and user settings. - * Typically you'll pass $wgRequest and $wgUser. - * - * @param WebRequest $request - * @param User $user - * @public - */ - function __construct( &$request, &$user ) { - list( $this->limit, $this->offset ) = $request->getLimitOffset( 20, 'searchlimit' ); - $this->mPrefix = $request->getVal('prefix', ''); - $this->namespaces = $this->powerSearch( $request ); - if( empty( $this->namespaces ) ) { - $this->namespaces = SearchEngine::userNamespaces( $user ); - } - - $this->searchRedirects = $request->getcheck( 'redirs' ) ? true : false; - $this->fulltext = $request->getVal('fulltext'); - } - - /** - * If an exact title match can be found, jump straight ahead to it. - * @param string $term - * @public - */ - function goResult( $term ) { - global $wgOut; - global $wgGoToEdit; - - $this->setupPage( $term ); - - # Try to go to page as entered. - $t = Title::newFromText( $term ); - - # If the string cannot be used to create a title - if( is_null( $t ) ){ - return $this->showResults( $term ); - } - - # If there's an exact or very near match, jump right there. - $t = SearchEngine::getNearMatch( $term ); - if( !is_null( $t ) ) { - $wgOut->redirect( $t->getFullURL() ); - return; - } - - # No match, generate an edit URL - $t = Title::newFromText( $term ); - if( ! is_null( $t ) ) { - wfRunHooks( 'SpecialSearchNogomatch', array( &$t ) ); - # If the feature is enabled, go straight to the edit page - if ( $wgGoToEdit ) { - $wgOut->redirect( $t->getFullURL( array( 'action' => 'edit' ) ) ); - return; - } - } - - $extra = $wgOut->parse( '=='.wfMsgNoTrans( 'notitlematches' )."==\n" ); - if( $t->quickUserCan( 'create' ) && $t->quickUserCan( 'edit' ) ) { - $extra .= wfMsgExt( 'noexactmatch', 'parse', wfEscapeWikiText( $term ) ); - } else { - $extra .= wfMsgExt( 'noexactmatch-nocreate', 'parse', wfEscapeWikiText( $term ) ); - } - - $this->showResults( $term, $extra ); - } - - /** - * @param string $term - * @param string $extra Extra HTML to add after "did you mean" - */ - public function showResults( $term, $extra = '' ) { - wfProfileIn( __METHOD__ ); - global $wgOut, $wgUser; - $sk = $wgUser->getSkin(); - - $search = SearchEngine::create(); - $search->setLimitOffset( $this->limit, $this->offset ); - $search->setNamespaces( $this->namespaces ); - $search->showRedirects = $this->searchRedirects; - $search->prefix = $this->mPrefix; - $term = $search->transformSearchTerm($term); - - $this->setupPage( $term ); - - $rewritten = $search->replacePrefixes($term); - $titleMatches = $search->searchTitle( $rewritten ); - $textMatches = $search->searchText( $rewritten ); - - // did you mean... suggestions - if($textMatches && $textMatches->hasSuggestion()){ - $st = SpecialPage::getTitleFor( 'Search' ); - - # mirror Go/Search behaviour of original request - $didYouMeanParams = array( 'search' => $textMatches->getSuggestionQuery() ); - if($this->fulltext != NULL) - $didYouMeanParams['fulltext'] = $this->fulltext; - $stParams = array_merge( - $didYouMeanParams, - $this->powerSearchOptions() - ); - - $suggestionSnippet = $textMatches->getSuggestionSnippet(); - - if( $suggestionSnippet == '' ) - $suggestionSnippet = null; - - $suggestLink = $sk->linkKnown( - $st, - $suggestionSnippet, - array(), - $stParams - ); - - $wgOut->addHTML('
'.wfMsg('search-suggest',$suggestLink).'
'); - } - - $wgOut->addHTML( $extra ); - - $wgOut->wrapWikiMsg( "
\n$1
", 'searchresulttext' ); - - if( '' === trim( $term ) ) { - // Empty query -- straight view of search form - $wgOut->setSubtitle( '' ); - $wgOut->addHTML( $this->powerSearchBox( $term ) ); - $wgOut->addHTML( $this->powerSearchFocus() ); - wfProfileOut( __METHOD__ ); - return; - } - - global $wgDisableTextSearch; - if ( $wgDisableTextSearch ) { - global $wgSearchForwardUrl; - if( $wgSearchForwardUrl ) { - $url = str_replace( '$1', urlencode( $term ), $wgSearchForwardUrl ); - $wgOut->redirect( $url ); - wfProfileOut( __METHOD__ ); - return; - } - global $wgInputEncoding; - $wgOut->addHTML( - Xml::openElement( 'fieldset' ) . - Xml::element( 'legend', null, wfMsg( 'search-external' ) ) . - Xml::element( 'p', array( 'class' => 'mw-searchdisabled' ), wfMsg( 'searchdisabled' ) ) . - wfMsg( 'googlesearch', - htmlspecialchars( $term ), - htmlspecialchars( $wgInputEncoding ), - htmlspecialchars( wfMsg( 'searchbutton' ) ) - ) . - Xml::closeElement( 'fieldset' ) - ); - wfProfileOut( __METHOD__ ); - return; - } - - $wgOut->addHTML( $this->shortDialog( $term ) ); - - // Sometimes the search engine knows there are too many hits - if ($titleMatches instanceof SearchResultTooMany) { - $wgOut->addWikiText( '==' . wfMsg( 'toomanymatches' ) . "==\n" ); - $wgOut->addHTML( $this->powerSearchBox( $term ) ); - $wgOut->addHTML( $this->powerSearchFocus() ); - wfProfileOut( __METHOD__ ); - return; - } - - // show number of results - $num = ( $titleMatches ? $titleMatches->numRows() : 0 ) - + ( $textMatches ? $textMatches->numRows() : 0); - $totalNum = 0; - if($titleMatches && !is_null($titleMatches->getTotalHits())) - $totalNum += $titleMatches->getTotalHits(); - if($textMatches && !is_null($textMatches->getTotalHits())) - $totalNum += $textMatches->getTotalHits(); - if ( $num > 0 ) { - if ( $totalNum > 0 ){ - $top = wfMsgExt('showingresultstotal', array( 'parseinline' ), - $this->offset+1, $this->offset+$num, $totalNum, $num ); - } elseif ( $num >= $this->limit ) { - $top = wfShowingResults( $this->offset, $this->limit ); - } else { - $top = wfShowingResultsNum( $this->offset, $this->limit, $num ); - } - $wgOut->addHTML( "

{$top}

\n" ); - } - - // prev/next links - if( $num || $this->offset ) { - $prevnext = wfViewPrevNext( $this->offset, $this->limit, - SpecialPage::getTitleFor( 'Search' ), - wfArrayToCGI( - $this->powerSearchOptions(), - array( 'search' => $term ) ), - ($num < $this->limit) ); - $wgOut->addHTML( "

{$prevnext}

\n" ); - wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) ); - } else { - wfRunHooks( 'SpecialSearchNoResults', array( $term ) ); - } - - if( $titleMatches ) { - if( $titleMatches->numRows() ) { - $wgOut->wrapWikiMsg( "==$1==\n", 'titlematches' ); - $wgOut->addHTML( $this->showMatches( $titleMatches ) ); - } - $titleMatches->free(); - } - - if( $textMatches ) { - // output appropriate heading - if( $textMatches->numRows() ) { - if($titleMatches) - $wgOut->wrapWikiMsg( "==$1==\n", 'textmatches' ); - else // if no title matches the heading is redundant - $wgOut->addHTML("
"); - } elseif( $num == 0 ) { - # Don't show the 'no text matches' if we received title matches - $wgOut->wrapWikiMsg( "==$1==\n", 'notextmatches' ); - } - // show interwiki results if any - if( $textMatches->hasInterwikiResults() ) - $wgOut->addHTML( $this->showInterwiki( $textMatches->getInterwikiResults(), $term )); - // show results - if( $textMatches->numRows() ) - $wgOut->addHTML( $this->showMatches( $textMatches ) ); - - $textMatches->free(); - } - - if ( $num == 0 ) { - $wgOut->addWikiMsg( 'nonefound' ); - } - if( $num || $this->offset ) { - $wgOut->addHTML( "

{$prevnext}

\n" ); - } - $wgOut->addHTML( $this->powerSearchBox( $term ) ); - wfProfileOut( __METHOD__ ); - } - - #------------------------------------------------------------------ - # Private methods below this line - - /** - * - */ - function setupPage( $term ) { - global $wgOut; - 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' ); - } - - /** - * Extract "power search" namespace settings from the request object, - * returning a list of index numbers to search. - * - * @param WebRequest $request - * @return array - * @private - */ - function powerSearch( &$request ) { - $arr = array(); - foreach( SearchEngine::searchableNamespaces() as $ns => $name ) { - if( $request->getCheck( 'ns' . $ns ) ) { - $arr[] = $ns; - } - } - return $arr; - } - - /** - * Reconstruct the 'power search' options for links - * @return array - * @private - */ - function powerSearchOptions() { - $opt = array(); - foreach( $this->namespaces as $n ) { - $opt['ns' . $n] = 1; - } - $opt['redirs'] = $this->searchRedirects ? 1 : 0; - return $opt; - } - - /** - * Show whole set of results - * - * @param SearchResultSet $matches - */ - function showMatches( &$matches ) { - wfProfileIn( __METHOD__ ); - - global $wgContLang; - $terms = $wgContLang->convertForSearchResult( $matches->termMatches() ); - - $out = ""; - - $infoLine = $matches->getInfo(); - if( !is_null($infoLine) ) - $out .= "\n\n"; - - - $off = $this->offset + 1; - $out .= "\n"; - - // convert the whole thing to desired language variant - global $wgContLang; - $out = $wgContLang->convert( $out ); - wfProfileOut( __METHOD__ ); - return $out; - } - - /** - * Format a single hit result - * @param SearchResult $result - * @param array $terms terms to highlight - */ - function showHit( $result, $terms ) { - wfProfileIn( __METHOD__ ); - global $wgUser, $wgContLang, $wgLang; - - if( $result->isBrokenTitle() ) { - wfProfileOut( __METHOD__ ); - return "\n"; - } - - $t = $result->getTitle(); - $sk = $wgUser->getSkin(); - - $titleSnippet = $result->getTitleSnippet($terms); - - if( $titleSnippet == '' ) - $titleSnippet = null; - - $link = $sk->linkKnown( - $t, - $titleSnippet - ); - - //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()) { - wfProfileOut( __METHOD__ ); - return "
  • {$link}
  • \n"; - } - - // If the page doesn't *exist*... our search index is out of date. - // The least confusing at this point is to drop the result. - // You may get less results, but... oh well. :P - if( $result->isMissingRevision() ) { - wfProfileOut( __METHOD__ ); - return "\n"; - } - - // format redirects / relevant sections - $redirectTitle = $result->getRedirectTitle(); - $redirectText = $result->getRedirectSnippet($terms); - $sectionTitle = $result->getSectionTitle(); - $sectionText = $result->getSectionSnippet($terms); - $redirect = ''; - if( !is_null($redirectTitle) ) { - if( $redirectText == '' ) - $redirectText = null; - - $redirect = "" . - wfMsg( - 'search-redirect', - $sk->linkKnown( - $redirectTitle, - $redirectText - ) - ) . - ""; - } - - $section = ''; - - if( !is_null($sectionTitle) ) { - if( $sectionText == '' ) - $sectionText = null; - - $section = "" . - wfMsg( - 'search-section', - $sk->linkKnown( - $sectionTitle, - $sectionText - ) - ) . - ""; - } - - // format text extract - $extract = "
    ".$result->getTextSnippet($terms)."
    "; - - // format score - if( is_null( $result->getScore() ) ) { - // Search engine doesn't report scoring info - $score = ''; - } else { - $percent = sprintf( '%2.1f', $result->getScore() * 100 ); - $score = wfMsg( 'search-result-score', $wgLang->formatNum( $percent ) ) - . ' - '; - } - - // format description - $byteSize = $result->getByteSize(); - $wordCount = $result->getWordCount(); - $timestamp = $result->getTimestamp(); - $size = wfMsgExt( 'search-result-size', array( 'parsemag', 'escape' ), - $sk->formatSize( $byteSize ), - $wordCount ); - $date = $wgLang->timeanddate( $timestamp ); - - // link to related articles if supported - $related = ''; - if( $result->hasRelated() ){ - $st = SpecialPage::getTitleFor( 'Search' ); - $stParams = array_merge( - $this->powerSearchOptions(), - array( - 'search' => wfMsgForContent( 'searchrelated' ) . ':' . $t->getPrefixedText(), - 'fulltext' => wfMsg( 'search' ) - ) - ); - - $related = ' -- ' . $sk->linkKnown( - $st, - wfMsg('search-relatedarticle'), - array(), - $stParams - ); - } - - // Include a thumbnail for media files... - if( $t->getNamespace() == NS_FILE ) { - $img = wfFindFile( $t ); - if( $img ) { - $thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) ); - if( $thumb ) { - $desc = $img->getShortDesc(); - wfProfileOut( __METHOD__ ); - // Ugly table. :D - // Float doesn't seem to interact well with the bullets. - // Table messes up vertical alignment of the bullet, but I'm - // not sure what more I can do about that. :( - return "
  • " . - '' . - '' . - '' . - '' . - '' . - '
    ' . - $thumb->toHtml( array( 'desc-link' => true ) ) . - '' . - $link . - $extract . - "
    {$score}{$desc} - {$date}{$related}
    " . - '
    ' . - "
  • \n"; - } - } - } - - wfProfileOut( __METHOD__ ); - return "
  • {$link} {$redirect} {$section} {$extract}\n" . - "
    {$score}{$size} - {$date}{$related}
    " . - "
  • \n"; - - } - - /** - * Show results from other wikis - * - * @param SearchResultSet $matches - */ - function showInterwiki( &$matches, $query ) { - wfProfileIn( __METHOD__ ); - - global $wgContLang; - $terms = $wgContLang->convertForSearchResult( $matches->termMatches() ); - - $out = "
    ".wfMsg('search-interwiki-caption')."
    \n"; - $off = $this->offset + 1; - $out .= "
    \n"; - - // convert the whole thing to desired language variant - global $wgContLang; - $out = $wgContLang->convert( $out ); - wfProfileOut( __METHOD__ ); - return $out; - } - - /** - * Show single interwiki link - * - * @param SearchResult $result - * @param string $lastInterwiki - * @param array $terms - * @param string $query - * @param array $customCaptions iw prefix -> caption - */ - function showInterwikiHit( $result, $lastInterwiki, $terms, $query, $customCaptions) { - wfProfileIn( __METHOD__ ); - global $wgUser, $wgContLang, $wgLang; - - if( $result->isBrokenTitle() ) { - wfProfileOut( __METHOD__ ); - return "\n"; - } - - $t = $result->getTitle(); - $sk = $wgUser->getSkin(); - - $titleSnippet = $result->getTitleSnippet($terms); - - if( $titleSnippet == '' ) - $titleSnippet = null; - - $link = $sk->linkKnown( - $t, - $titleSnippet - ); - - // format redirect if any - $redirectTitle = $result->getRedirectTitle(); - $redirectText = $result->getRedirectSnippet($terms); - $redirect = ''; - if( !is_null($redirectTitle) ) { - if( $redirectText == '' ) - $redirectText = null; - - $redirect = "" . - wfMsg( - 'search-redirect', - $sk->linkKnown( - $redirectTitle, - $redirectText - ) - ) . - ""; - } - - $out = ""; - // display project name - if(is_null($lastInterwiki) || $lastInterwiki != $t->getInterwiki()){ - if( key_exists($t->getInterwiki(),$customCaptions) ) - // captions from 'search-interwiki-custom' - $caption = $customCaptions[$t->getInterwiki()]; - else{ - // default is to show the hostname of the other wiki which might suck - // if there are many wikis on one hostname - $parsed = parse_url($t->getFullURL()); - $caption = wfMsg('search-interwiki-default', $parsed['host']); - } - // "more results" link (special page stuff could be localized, but we might not know target lang) - $searchTitle = Title::newFromText($t->getInterwiki().":Special:Search"); - $searchLink = $sk->linkKnown( - $searchTitle, - wfMsg( 'search-interwiki-more' ), - array(), - array( - 'search' => $query, - 'fulltext' => 'Search' - ) - ); - $out .= "
    {$searchLink}{$caption}
    \n