MediaWiki  master
WikitextContentHandler.php
Go to the documentation of this file.
1 <?php
27 
34 
35  public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
36  parent::__construct( $modelId, [ CONTENT_FORMAT_WIKITEXT ] );
37  }
38 
39  protected function getContentClass() {
40  return WikitextContent::class;
41  }
42 
53  public function makeRedirectContent( Title $destination, $text = '' ) {
54  $optionalColon = '';
55 
56  if ( $destination->getNamespace() == NS_CATEGORY ) {
57  $optionalColon = ':';
58  } else {
59  $iw = $destination->getInterwiki();
60  if ( $iw && Language::fetchLanguageName( $iw, null, 'mw' ) ) {
61  $optionalColon = ':';
62  }
63  }
64 
65  $mwRedir = MediaWikiServices::getInstance()->getMagicWordFactory()->get( 'redirect' );
66  $redirectText = $mwRedir->getSynonym( 0 ) .
67  ' [[' . $optionalColon . $destination->getFullText() . ']]';
68 
69  if ( $text != '' ) {
70  $redirectText .= "\n" . $text;
71  }
72 
73  $class = $this->getContentClass();
74  return new $class( $redirectText );
75  }
76 
84  public function supportsRedirects() {
85  return true;
86  }
87 
95  public function supportsSections() {
96  return true;
97  }
98 
109  public function isParserCacheSupported() {
110  return true;
111  }
112 
117  protected function getFileHandler() {
118  return new FileContentHandler();
119  }
120 
121  public function getFieldsForSearchIndex( SearchEngine $engine ) {
122  $fields = parent::getFieldsForSearchIndex( $engine );
123 
124  $fields['heading'] =
126  $fields['heading']->setFlag( SearchIndexField::FLAG_SCORING );
127 
128  $fields['auxiliary_text'] =
129  $engine->makeSearchFieldMapping( 'auxiliary_text', SearchIndexField::INDEX_TYPE_TEXT );
130 
131  $fields['opening_text'] =
132  $engine->makeSearchFieldMapping( 'opening_text', SearchIndexField::INDEX_TYPE_TEXT );
133  $fields['opening_text']->setFlag(
135  );
136  // Until we have full first-class content handler for files, we invoke it explicitly here
137  $fields = array_merge( $fields, $this->getFileHandler()->getFieldsForSearchIndex( $engine ) );
138 
139  return $fields;
140  }
141 
142  public function getDataForSearchIndex(
143  WikiPage $page,
144  ParserOutput $parserOutput,
145  SearchEngine $engine
146  ) {
147  $fields = parent::getDataForSearchIndex( $page, $parserOutput, $engine );
148 
149  $structure = new WikiTextStructure( $parserOutput );
150  $fields['heading'] = $structure->headings();
151  // text fields
152  $fields['opening_text'] = $structure->getOpeningText();
153  $fields['text'] = $structure->getMainText(); // overwrites one from ContentHandler
154  $fields['auxiliary_text'] = $structure->getAuxiliaryText();
155  $fields['defaultsort'] = $structure->getDefaultSort();
156 
157  // Until we have full first-class content handler for files, we invoke it explicitly here
158  if ( NS_FILE == $page->getTitle()->getNamespace() ) {
159  $fields = array_merge( $fields,
160  $this->getFileHandler()->getDataForSearchIndex( $page, $parserOutput, $engine ) );
161  }
162  return $fields;
163  }
164 
173  public function serializeContent( Content $content, $format = null ) {
174  $this->checkFormat( $format );
175 
176  // NOTE: MessageContent also uses CONTENT_MODEL_WIKITEXT, but it's not a TextContent!
177  // Perhaps MessageContent should use a separate ContentHandler instead.
178  if ( $content instanceof MessageContent ) {
179  return $content->getMessage()->plain();
180  }
181 
182  return parent::serializeContent( $content, $format );
183  }
184 
185 }
Language\fetchLanguageName
static fetchLanguageName( $code, $inLanguage=self::AS_AUTONYMS, $include=self::ALL)
Definition: Language.php:868
ParserOutput
Definition: ParserOutput.php:25
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:129
SearchIndexField\FLAG_SCORING
const FLAG_SCORING
This field contains secondary information, which is already present in other fields,...
Definition: SearchIndexField.php:51
WikitextContentHandler\getFileHandler
getFileHandler()
Get file handler.
Definition: WikitextContentHandler.php:117
WikiPage
Class representing a MediaWiki article and history.
Definition: WikiPage.php:45
NS_FILE
const NS_FILE
Definition: Defines.php:66
WikitextContentHandler\getFieldsForSearchIndex
getFieldsForSearchIndex(SearchEngine $engine)
Get fields definition for search index.
Definition: WikitextContentHandler.php:121
CONTENT_MODEL_WIKITEXT
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:215
WikitextContentHandler\getDataForSearchIndex
getDataForSearchIndex(WikiPage $page, ParserOutput $parserOutput, SearchEngine $engine)
Return fields to be indexed by search engine as representation of this document.
Definition: WikitextContentHandler.php:142
Title\getNamespace
getNamespace()
Get the namespace index, i.e.
Definition: Title.php:1035
Title\getInterwiki
getInterwiki()
Get the interwiki prefix.
Definition: Title.php:924
WikiPage\getTitle
getTitle()
Get the title object of the article.
Definition: WikiPage.php:296
Title\getFullText
getFullText()
Get the prefixed title with spaces, plus any fragment (part beginning with '#')
Definition: Title.php:1877
NS_CATEGORY
const NS_CATEGORY
Definition: Defines.php:74
CONTENT_FORMAT_WIKITEXT
const CONTENT_FORMAT_WIKITEXT
Definition: Defines.php:230
SearchIndexField\FLAG_NO_HIGHLIGHT
const FLAG_NO_HIGHLIGHT
This field does not need highlight handling.
Definition: SearchIndexField.php:56
$content
$content
Definition: router.php:78
WikitextContentHandler
Content handler for wiki text pages.
Definition: WikitextContentHandler.php:33
WikitextContentHandler\isParserCacheSupported
isParserCacheSupported()
Returns true, because wikitext supports caching using the ParserCache mechanism.
Definition: WikitextContentHandler.php:109
WikitextContentHandler\__construct
__construct( $modelId=CONTENT_MODEL_WIKITEXT)
Definition: WikitextContentHandler.php:35
FileContentHandler
Content handler for File: files TODO: this handler s not used directly now, but instead manually call...
Definition: FileContentHandler.php:11
TextContentHandler
Base content handler implementation for flat text contents.
Definition: TextContentHandler.php:31
SearchEngine
Contain a class for special pages.
Definition: SearchEngine.php:34
Content
Base interface for content objects.
Definition: Content.php:34
SearchEngine\makeSearchFieldMapping
makeSearchFieldMapping( $name, $type)
Create a search field definition.
Definition: SearchEngine.php:744
Title
Represents a title within MediaWiki.
Definition: Title.php:42
ContentHandler\checkFormat
checkFormat( $format)
Convenient for checking whether a format provided as a parameter is actually supported.
Definition: ContentHandler.php:548
MessageContent
Wrapper allowing us to handle a system message as a Content object.
Definition: MessageContent.php:36
WikitextContentHandler\supportsRedirects
supportsRedirects()
Returns true because wikitext supports redirects.
Definition: WikitextContentHandler.php:84
WikiTextStructure
Class allowing to explore structure of parsed wikitext.
Definition: WikiTextStructure.php:8
WikitextContentHandler\supportsSections
supportsSections()
Returns true because wikitext supports sections.
Definition: WikitextContentHandler.php:95
WikitextContentHandler\makeRedirectContent
makeRedirectContent(Title $destination, $text='')
Returns a WikitextContent object representing a redirect to the given destination page.
Definition: WikitextContentHandler.php:53
WikitextContentHandler\serializeContent
serializeContent(Content $content, $format=null)
Returns the content's text as-is.
Definition: WikitextContentHandler.php:173
WikitextContentHandler\getContentClass
getContentClass()
Returns the name of the associated Content class, to be used when creating new objects.
Definition: WikitextContentHandler.php:39
SearchIndexField\INDEX_TYPE_TEXT
const INDEX_TYPE_TEXT
TEXT fields are suitable for natural language and may be subject to analysis such as stemming.
Definition: SearchIndexField.php:18