MediaWiki REL1_41
BasicSearchResultSetWidget.php
Go to the documentation of this file.
1<?php
2
4
9use Message;
10
17 protected $specialPage;
19 protected $resultWidget;
21 protected $sidebarWidget;
22
23 public function __construct(
27 ) {
28 $this->specialPage = $specialPage;
29 $this->resultWidget = $resultWidget;
30 $this->sidebarWidget = $sidebarWidget;
31 }
32
40 public function render(
41 $term,
42 $offset,
43 ISearchResultSet $titleResultSet = null,
44 ISearchResultSet $textResultSet = null
45 ) {
46 $hasTitle = $titleResultSet && $titleResultSet->numRows() > 0;
47 $hasText = $textResultSet && $textResultSet->numRows() > 0;
48 $hasSecondary =
49 $textResultSet &&
50 $textResultSet->hasInterwikiResults( ISearchResultSet::SECONDARY_RESULTS );
51 $hasSecondaryInline =
52 $textResultSet &&
53 $textResultSet->hasInterwikiResults( ISearchResultSet::INLINE_RESULTS );
54
55 if ( !$hasTitle && !$hasText && !$hasSecondary && !$hasSecondaryInline ) {
56 return '';
57 }
58
59 $out = '<div class="mw-search-results-container">';
60
61 if ( $hasTitle ) {
62 $out .= $this->header( $this->specialPage->msg( 'titlematches' ) )
63 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable titleResultSet is set when used here
64 . $this->renderResultSet( $titleResultSet, $offset );
65 }
66
67 if ( $hasText ) {
68 if ( $hasTitle ) {
69 $out .= "<div class='mw-search-visualclear'></div>" .
70 $this->header( $this->specialPage->msg( 'textmatches' ) );
71 }
72 // @phan-suppress-next-line PhanTypeMismatchArgumentNullable textResultSet is set when used
73 $out .= $this->renderResultSet( $textResultSet, $offset );
74 }
75
76 if ( $hasSecondaryInline ) {
77 $iwResults = $textResultSet->getInterwikiResults( ISearchResultSet::INLINE_RESULTS );
78 foreach ( $iwResults as $interwiki => $results ) {
79 if ( $results instanceof Status || $results->numRows() === 0 ) {
80 // ignore bad interwikis for now
81 continue;
82 }
83 $out .=
84 "<h2 class='mw-search-interwiki-header mw-search-visualclear'>" .
85 $this->specialPage->msg( "search-interwiki-results-{$interwiki}" )->parse() .
86 "</h2>";
87 $out .=
88 "<div class='mw-search-interwiki-results'>" .
89 $this->renderResultSet( $results, $offset ) .
90 "</div>";
91 }
92 }
93
94 // Close <div class='mw-search-results-container'>
95 $out .= '</div>';
96
97 if ( $hasSecondary ) {
98 $out .= $this->sidebarWidget->render(
99 $term,
100 $textResultSet->getInterwikiResults( ISearchResultSet::SECONDARY_RESULTS )
101 );
102 }
103
104 // Convert the whole thing to desired language variant
105 // TODO: Move this up to Special:Search?
106 $converter = MediaWikiServices::getInstance()->getLanguageConverterFactory()
107 ->getLanguageConverter();
108 return $converter->convert( $out );
109 }
110
119 protected function header( Message $msg ) {
120 return "<h2>" . $msg->escaped() . "</h2>";
121 }
122
128 protected function renderResultSet( ISearchResultSet $resultSet, $offset ) {
129 $hits = [];
130 foreach ( $resultSet as $result ) {
131 $hits[] = $this->resultWidget->render( $result, $offset++ );
132 }
133
134 return "<ul class='mw-search-results'>" . implode( '', $hits ) . "</ul>";
135 }
136}
Service locator for MediaWiki core services.
static getInstance()
Returns the global default instance of the top level service locator.
header(Message $msg)
Generate a headline for a section of the search results.
__construct(SpecialSearch $specialPage, SearchResultWidget $resultWidget, SearchResultSetWidget $sidebarWidget)
render( $term, $offset, ISearchResultSet $titleResultSet=null, ISearchResultSet $textResultSet=null)
Renders one or more ISearchResultSets into a sidebar grouped by interwiki prefix.
implements Special:Search - Run text & title search and display the output
Generic operation result class Has warning/error list, boolean status and arbitrary value.
Definition Status.php:58
The Message class deals with fetching and processing of interface message into a variety of formats.
Definition Message.php:144
escaped()
Returns the message text.
Definition Message.php:1095
A set of SearchEngine results.
Renders a single search result to HTML.