*/
protected $namespaces;
- /**
- * @var bool
- */
- protected $searchRedirects;
-
/**
* @var string
*/
}
}
- // Redirects defaults to true, but we don't know whether it was ticked of or just missing
- $default = $request->getBool( 'profile' ) ? 0 : 1;
- $this->searchRedirects = $request->getBool( 'redirs', $default ) ? 1 : 0;
$this->didYouMeanHtml = ''; # html of did you mean... link
$this->fulltext = $request->getVal( 'fulltext' );
$this->profile = $profile;
# If the string cannot be used to create a title
if ( is_null( $t ) ) {
$this->showResults( $term );
+
return;
}
# If there's an exact or very near match, jump right there.
if ( !is_null( $t ) ) {
$this->getOutput()->redirect( $t->getFullURL() );
+
return;
}
# No match, generate an edit URL
# If the feature is enabled, go straight to the edit page
if ( $wgGoToEdit ) {
$this->getOutput()->redirect( $t->getFullURL( array( 'action' => 'edit' ) ) );
+
return;
}
}
*/
public function showResults( $term ) {
global $wgDisableTextSearch, $wgSearchForwardUrl, $wgContLang, $wgScript;
- wfProfileIn( __METHOD__ );
+ $profile = new ProfileSection( __METHOD__ );
$search = $this->getSearchEngine();
$search->setLimitOffset( $this->limit, $this->offset );
$search->setNamespaces( $this->namespaces );
- $search->showRedirects = $this->searchRedirects; // BC
- $search->setFeatureData( 'list-redirects', $this->searchRedirects );
$search->prefix = $this->mPrefix;
$term = $search->transformSearchTerm( $term );
Xml::closeElement( 'fieldset' )
);
}
- wfProfileOut( __METHOD__ );
+
return;
}
if ( !wfRunHooks( 'SpecialSearchResultsPrepend', array( $this, $out, $term ) ) ) {
# Hook requested termination
- wfProfileOut( __METHOD__ );
return;
}
// Sometimes the search engine knows there are too many hits
if ( $titleMatches instanceof SearchResultTooMany ) {
$out->wrapWikiMsg( "==$1==\n", 'toomanymatches' );
- wfProfileOut( __METHOD__ );
+
return;
}
$out->addHTML( $this->formHeader( $term, 0, 0 ) );
$out->addHtml( $this->getProfileForm( $this->profile, $term ) );
$out->addHTML( '</form>' );
+
// Empty query -- straight view of search form
- wfProfileOut( __METHOD__ );
return;
}
$out->addHTML( "<p class='mw-search-pager-bottom'>{$prevnext}</p>\n" );
}
wfRunHooks( 'SpecialSearchResultsAppend', array( $this, $out, $term ) );
- wfProfileOut( __METHOD__ );
}
/**
// show direct page/create link if applicable
// Check DBkey !== '' in case of fragment link only.
- if ( is_null( $t ) || $t->getDBkey() === '' ||
- ( $titleMatches !== null && $titleMatches->searchContainedSyntax() ) ||
- ( $textMatches !== null && $textMatches->searchContainedSyntax() ) ) {
+ if ( is_null( $t ) || $t->getDBkey() === ''
+ || ( $titleMatches !== null && $titleMatches->searchContainedSyntax() )
+ || ( $textMatches !== null && $textMatches->searchContainedSyntax() )
+ ) {
// invalid title
// preserve the paragraph for margins etc...
$this->getOutput()->addHtml( '<p></p>' );
+
return;
}
*/
protected function powerSearchOptions() {
$opt = array();
- $opt['redirs'] = $this->searchRedirects ? 1 : 0;
if ( $this->profile !== 'advanced' ) {
$opt['profile'] = $this->profile;
} else {
$opt['ns' . $n] = 1;
}
}
+
return $opt + $this->extraParams;
}
*/
protected function showMatches( &$matches ) {
global $wgContLang;
- wfProfileIn( __METHOD__ );
+ $profile = new ProfileSection( __METHOD__ );
$terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
- $out = "";
- $infoLine = $matches->getInfo();
- if ( !is_null( $infoLine ) ) {
- $out .= "\n<!-- {$infoLine} -->\n";
- }
- $out .= "<ul class='mw-search-results'>\n";
+ $out = "<ul class='mw-search-results'>\n";
$result = $matches->next();
while ( $result ) {
$out .= $this->showHit( $result, $terms );
// convert the whole thing to desired language variant
$out = $wgContLang->convert( $out );
- wfProfileOut( __METHOD__ );
+
return $out;
}
* @return string
*/
protected function showHit( $result, $terms ) {
- wfProfileIn( __METHOD__ );
+ $profile = new ProfileSection( __METHOD__ );
if ( $result->isBrokenTitle() ) {
- wfProfileOut( __METHOD__ );
return "<!-- Broken link in search result -->\n";
}
$link_t = clone $t;
wfRunHooks( 'ShowSearchHitTitle',
- array( &$link_t, &$titleSnippet, $result, $terms, $this ) );
+ array( &$link_t, &$titleSnippet, $result, $terms, $this ) );
$link = Linker::linkKnown(
$link_t,
//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->userCan( 'read', $this->getUser() ) ) {
- wfProfileOut( __METHOD__ );
return "<li>{$link}</li>\n";
}
// 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 "<!-- missing page " . htmlspecialchars( $t->getPrefixedText() ) . "-->\n";
}
$thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) );
if ( $thumb ) {
$desc = $this->msg( 'parentheses' )->rawParams( $img->getShortDesc() )->escaped();
- wfProfileOut( __METHOD__ );
// 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).
"</li>\n";
}
- wfProfileOut( __METHOD__ );
return $html;
}
/**
* Show results from other wikis
*
- * @param $matches SearchResultSet
+ * @param $matches SearchResultSet|array
* @param $query String
*
* @return string
*/
protected function showInterwiki( $matches, $query ) {
global $wgContLang;
- wfProfileIn( __METHOD__ );
- $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
+ $profile = new ProfileSection( __METHOD__ );
$out = "<div id='mw-search-interwiki'><div id='mw-search-interwiki-caption'>" .
$this->msg( 'search-interwiki-caption' )->text() . "</div>\n";
}
}
- $prev = null;
- $result = $matches->next();
- while ( $result ) {
- $out .= $this->showInterwikiHit( $result, $prev, $terms, $query, $customCaptions );
- $prev = $result->getInterwikiPrefix();
- $result = $matches->next();
+ if ( !is_array( $matches ) ) {
+ $matches = array( $matches );
+ }
+
+ foreach ( $matches as $set ) {
+ $prev = null;
+ $result = $set->next();
+ while ( $result ) {
+ $out .= $this->showInterwikiHit( $result, $prev, $query, $customCaptions );
+ $prev = $result->getInterwikiPrefix();
+ $result = $set->next();
+ }
}
+
+
// TODO: should support paging in a non-confusing way (not sure how though, maybe via ajax)..
$out .= "</ul></div>\n";
// convert the whole thing to desired language variant
$out = $wgContLang->convert( $out );
- wfProfileOut( __METHOD__ );
+
return $out;
}
*
* @param $result SearchResult
* @param $lastInterwiki String
- * @param $terms Array
* @param $query String
* @param array $customCaptions iw prefix -> caption
*
* @return string
*/
- protected function showInterwikiHit( $result, $lastInterwiki, $terms, $query, $customCaptions ) {
- wfProfileIn( __METHOD__ );
+ protected function showInterwikiHit( $result, $lastInterwiki, $query, $customCaptions ) {
+ $profile = new ProfileSection( __METHOD__ );
if ( $result->isBrokenTitle() ) {
- wfProfileOut( __METHOD__ );
return "<!-- Broken link in search result -->\n";
}
}
$out .= "<li>{$link} {$redirect}</li>\n";
- wfProfileOut( __METHOD__ );
+
return $out;
}
protected function getProfileForm( $profile, $term ) {
// Hidden stuff
$opts = array();
- $opts['redirs'] = $this->searchRedirects;
$opts['profile'] = $this->profile;
if ( $profile === 'advanced' ) {
} else {
$form = '';
wfRunHooks( 'SpecialSearchProfileForm', array( $this, &$form, $profile, $term, $opts ) );
+
return $form;
}
}
$showSections = array( 'namespaceTables' => $namespaceTables );
- // Show redirects check only if backend supports it
- if ( $this->getSearchEngine()->supports( 'list-redirects' ) ) {
- $showSections['redirects'] =
- Xml::checkLabel( $this->msg( 'powersearch-redir' )->text(), 'redirs', 'redirs', $this->searchRedirects );
- }
-
wfRunHooks( 'SpecialSearchPowerBox', array( &$showSections, $term, $opts ) );
$hidden = '';
- unset( $opts['redirs'] );
foreach ( $opts as $key => $value ) {
$hidden .= Html::hidden( $key, $value );
}
+
// Return final output
return Xml::openElement(
- 'fieldset',
- array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
- ) .
+ 'fieldset',
+ array( 'id' => 'mw-searchoptions', 'style' => 'margin:0em;' )
+ ) .
Xml::element( 'legend', null, $this->msg( 'powersearch-legend' )->text() ) .
Xml::tags( 'h4', null, $this->msg( 'powersearch-ns' )->parse() ) .
Html::element( 'div', array( 'id' => 'mw-search-togglebox' ) ) .
$this->msg( 'searchbutton' )->text(),
array( 'class' => array( 'mw-ui-button', 'mw-ui-progressive' ) )
) . "\n";
+
return $out . $this->didYouMeanHtml;
}
foreach ( $namespaces as $n ) {
$opt['ns' . $n] = 1;
}
- $opt['redirs'] = $this->searchRedirects;
$stParams = array_merge(
array(
if ( count( $p ) > 1 ) {
return $wgContLang->getNsIndex( $p[0] ) == NS_FILE;
}
+
return false;
}
if ( count( $p ) > 1 ) {
return $p[0] == $allkeyword;
}
+
return false;
}
$this->searchEngine = $this->searchEngineType ?
SearchEngine::create( $this->searchEngineType ) : SearchEngine::create();
}
+
return $this->searchEngine;
}