6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 * http://www.gnu.org/copyleft/gpl.html
22 use MediaWiki\MediaWikiServices
;
23 use MediaWiki\Title\Title
;
28 class SearchSuggestion
{
30 * @var string the suggestion
35 * @var string the suggestion URL
42 private $suggestedTitle;
45 * NOTE: even if suggestedTitle is a redirect suggestedTitleID
46 * is the ID of the target page.
47 * @var int|null the suggested title ID
49 private $suggestedTitleID;
52 * @var float|null The suggestion score
57 * @param float $score the suggestion score
58 * @param string|null $text the suggestion text
59 * @param Title|null $suggestedTitle
60 * @param int|null $suggestedTitleID
62 public function __construct( $score, $text = null, ?Title
$suggestedTitle = null,
63 $suggestedTitleID = null ) {
64 $this->score
= $score;
66 if ( $suggestedTitle ) {
67 $this->setSuggestedTitle( $suggestedTitle );
69 $this->suggestedTitleID
= $suggestedTitleID;
76 public function getText() {
81 * Set the suggestion text.
83 * @param bool $setTitle Should we also update the title?
85 public function setText( $text, $setTitle = true ) {
87 if ( $setTitle && $text !== '' && $text !== null ) {
88 $this->setSuggestedTitle( Title
::makeTitle( 0, $text ) );
93 * Title object in the case this suggestion is based on a title.
94 * May return null if the suggestion is not a Title.
97 public function getSuggestedTitle() {
98 return $this->suggestedTitle
;
102 * @param Title|null $title
104 public function setSuggestedTitle( ?Title
$title = null ) {
105 $this->suggestedTitle
= $title;
106 if ( $title !== null ) {
107 $urlUtils = MediaWikiServices
::getInstance()->getUrlUtils();
108 $this->url
= $urlUtils->expand( $title->getFullURL(), PROTO_CURRENT
) ??
false;
113 * Title ID in the case this suggestion is based on a title.
114 * May return null if the suggestion is not a Title.
117 public function getSuggestedTitleID() {
118 return $this->suggestedTitleID
;
122 * @param int|null $suggestedTitleID
124 public function setSuggestedTitleID( $suggestedTitleID = null ) {
125 $this->suggestedTitleID
= $suggestedTitleID;
130 * @return float Suggestion score
132 public function getScore() {
137 * Set the suggestion score
138 * @param float $score
140 public function setScore( $score ) {
141 $this->score
= $score;
145 * Suggestion URL, can be the link to the Title or maybe in the
146 * future a link to the search results for this search suggestion.
147 * @return string Suggestion URL
149 public function getURL() {
154 * Set the suggestion URL
157 public function setURL( $url ) {
162 * Create suggestion from Title
163 * @param float $score Suggestions score
164 * @param Title $title
165 * @return SearchSuggestion
167 public static function fromTitle( $score, Title
$title ) {
168 return new self( $score, $title->getPrefixedText(), $title, $title->getArticleID() );
172 * Create suggestion from text
173 * Will also create a title if text if not empty.
174 * @param float $score Suggestions score
175 * @param string $text
176 * @return SearchSuggestion
178 public static function fromText( $score, $text ) {
179 $suggestion = new self( $score, $text );
181 $suggestion->setSuggestedTitle( Title
::newFromText( $text ) );