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 }
supportsSections()
Returns true because wikitext supports sections.
const CONTENT_MODEL_WIKITEXT
Definition: Defines.php:215
getDataForSearchIndex(WikiPage $page, ParserOutput $parserOutput, SearchEngine $engine)
Wrapper allowing us to handle a system message as a Content object.
Class allowing to explore structure of parsed wikitext.
getFileHandler()
Get file handler.
const INDEX_TYPE_TEXT
TEXT fields are suitable for natural language and may be subject to analysis such as stemming...
getFieldsForSearchIndex(SearchEngine $engine)
Content handler for File: files TODO: this handler s not used directly now, but instead manually call...
getTitle()
Get the title object of the article.
Definition: WikiPage.php:298
const FLAG_NO_HIGHLIGHT
This field does not need highlight handling.
const NS_CATEGORY
Definition: Defines.php:74
__construct( $modelId=CONTENT_MODEL_WIKITEXT)
makeSearchFieldMapping( $name, $type)
Create a search field definition.
getFullText()
Get the prefixed title with spaces, plus any fragment (part beginning with &#39;#&#39;)
Definition: Title.php:1882
getNamespace()
Get the namespace index, i.e.
Definition: Title.php:1040
serializeContent(Content $content, $format=null)
Returns the content&#39;s text as-is.
const NS_FILE
Definition: Defines.php:66
getInterwiki()
Get the interwiki prefix.
Definition: Title.php:926
supportsRedirects()
Returns true because wikitext supports redirects.
static fetchLanguageName( $code, $inLanguage=self::AS_AUTONYMS, $include=self::ALL)
Definition: Language.php:828
checkFormat( $format)
Convenient for checking whether a format provided as a parameter is actually supported.
isParserCacheSupported()
Returns true, because wikitext supports caching using the ParserCache mechanism.
makeRedirectContent(Title $destination, $text='')
Returns a WikitextContent object representing a redirect to the given destination page...
const FLAG_SCORING
This field contains secondary information, which is already present in other fields, but can be used for scoring.
Content handler for wiki text pages.
Base content handler implementation for flat text contents.
const CONTENT_FORMAT_WIKITEXT
Definition: Defines.php:230
$content
Definition: router.php:78