* @ingroup Content
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Content handler for wiki text pages.
*
}
protected function getContentClass() {
- return 'WikitextContent';
+ return WikitextContent::class;
}
/**
}
}
- $mwRedir = MagicWord::get( 'redirect' );
+ $mwRedir = MediaWikiServices::getInstance()->getMagicWordFactory()->get( 'redirect' );
$redirectText = $mwRedir->getSynonym( 0 ) .
' [[' . $optionalColon . $destination->getFullText() . ']]';
return true;
}
- public function getFieldsForSearchIndex( SearchEngine $engine ) {
- $fields = [];
-
- $fields['category'] =
- $engine->makeSearchFieldMapping( 'category', SearchIndexField::INDEX_TYPE_TEXT );
- $fields['category']->setFlag( SearchIndexField::FLAG_CASEFOLD );
+ /**
+ * Get file handler
+ * @return FileContentHandler
+ */
+ protected function getFileHandler() {
+ return new FileContentHandler();
+ }
- $fields['external_link'] =
- $engine->makeSearchFieldMapping( 'external_link', SearchIndexField::INDEX_TYPE_KEYWORD );
+ public function getFieldsForSearchIndex( SearchEngine $engine ) {
+ $fields = parent::getFieldsForSearchIndex( $engine );
$fields['heading'] =
$engine->makeSearchFieldMapping( 'heading', SearchIndexField::INDEX_TYPE_TEXT );
$fields['opening_text'] =
$engine->makeSearchFieldMapping( 'opening_text', SearchIndexField::INDEX_TYPE_TEXT );
- $fields['opening_text']->setFlag( SearchIndexField::FLAG_SCORING |
- SearchIndexField::FLAG_NO_HIGHLIGHT );
-
- $fields['outgoing_link'] =
- $engine->makeSearchFieldMapping( 'outgoing_link', SearchIndexField::INDEX_TYPE_KEYWORD );
-
- $fields['template'] =
- $engine->makeSearchFieldMapping( 'template', SearchIndexField::INDEX_TYPE_KEYWORD );
- $fields['template']->setFlag( SearchIndexField::FLAG_CASEFOLD );
-
- // FIXME: this really belongs in separate file handler but files
- // do not have separate handler. Sadness.
- $fields['file_text'] =
- $engine->makeSearchFieldMapping( 'file_text', SearchIndexField::INDEX_TYPE_TEXT );
+ $fields['opening_text']->setFlag(
+ SearchIndexField::FLAG_SCORING | SearchIndexField::FLAG_NO_HIGHLIGHT
+ );
+ // Until we have full first-class content handler for files, we invoke it explicitly here
+ $fields = array_merge( $fields, $this->getFileHandler()->getFieldsForSearchIndex( $engine ) );
return $fields;
}
- /**
- * Extract text of the file
- * TODO: probably should go to file handler?
- * @param Title $title
- * @return string|null
- */
- protected function getFileText( Title $title ) {
- $file = wfLocalFile( $title );
- if ( $file && $file->exists() ) {
- return $file->getHandler()->getEntireText( $file );
- }
-
- return null;
- }
-
- public function getDataForSearchIndex( WikiPage $page, ParserOutput $parserOutput,
- SearchEngine $engine ) {
+ public function getDataForSearchIndex(
+ WikiPage $page,
+ ParserOutput $parserOutput,
+ SearchEngine $engine
+ ) {
$fields = parent::getDataForSearchIndex( $page, $parserOutput, $engine );
$structure = new WikiTextStructure( $parserOutput );
- $fields['external_link'] = array_keys( $parserOutput->getExternalLinks() );
- $fields['category'] = $structure->categories();
$fields['heading'] = $structure->headings();
- $fields['outgoing_link'] = $structure->outgoingLinks();
- $fields['template'] = $structure->templates();
// text fields
$fields['opening_text'] = $structure->getOpeningText();
$fields['text'] = $structure->getMainText(); // overwrites one from ContentHandler
$fields['auxiliary_text'] = $structure->getAuxiliaryText();
$fields['defaultsort'] = $structure->getDefaultSort();
- $title = $page->getTitle();
- if ( NS_FILE == $title->getNamespace() ) {
- $fileText = $this->getFileText( $title );
- if ( $fileText ) {
- $fields['file_text'] = $fileText;
- }
+ // Until we have full first-class content handler for files, we invoke it explicitly here
+ if ( NS_FILE == $page->getTitle()->getNamespace() ) {
+ $fields = array_merge( $fields,
+ $this->getFileHandler()->getDataForSearchIndex( $page, $parserOutput, $engine ) );
}
return $fields;
}
+ /**
+ * Returns the content's text as-is.
+ *
+ * @param Content $content
+ * @param string|null $format The serialization format to check
+ *
+ * @return mixed
+ */
+ public function serializeContent( Content $content, $format = null ) {
+ $this->checkFormat( $format );
+
+ // NOTE: MessageContent also uses CONTENT_MODEL_WIKITEXT, but it's not a TextContent!
+ // Perhaps MessageContent should use a separate ContentHandler instead.
+ if ( $content instanceof MessageContent ) {
+ return $content->getMessage()->plain();
+ }
+
+ return parent::serializeContent( $content, $format );
+ }
+
}