X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/content/WikitextContentHandler.php diff --git a/includes/content/WikitextContentHandler.php b/includes/content/WikitextContentHandler.php new file mode 100644 index 00000000..9c26ae15 --- /dev/null +++ b/includes/content/WikitextContentHandler.php @@ -0,0 +1,163 @@ +getNamespace() == NS_CATEGORY ) { + $optionalColon = ':'; + } else { + $iw = $destination->getInterwiki(); + if ( $iw && Language::fetchLanguageName( $iw, null, 'mw' ) ) { + $optionalColon = ':'; + } + } + + $mwRedir = MagicWord::get( 'redirect' ); + $redirectText = $mwRedir->getSynonym( 0 ) . + ' [[' . $optionalColon . $destination->getFullText() . ']]'; + + if ( $text != '' ) { + $redirectText .= "\n" . $text; + } + + $class = $this->getContentClass(); + return new $class( $redirectText ); + } + + /** + * Returns true because wikitext supports redirects. + * + * @return bool Always true. + * + * @see ContentHandler::supportsRedirects + */ + public function supportsRedirects() { + return true; + } + + /** + * Returns true because wikitext supports sections. + * + * @return bool Always true. + * + * @see ContentHandler::supportsSections + */ + public function supportsSections() { + return true; + } + + /** + * Returns true, because wikitext supports caching using the + * ParserCache mechanism. + * + * @since 1.21 + * + * @return bool Always true. + * + * @see ContentHandler::isParserCacheSupported + */ + public function isParserCacheSupported() { + return true; + } + + /** + * Get file handler + * @return FileContentHandler + */ + protected function getFileHandler() { + return new FileContentHandler(); + } + + public function getFieldsForSearchIndex( SearchEngine $engine ) { + $fields = parent::getFieldsForSearchIndex( $engine ); + + $fields['heading'] = + $engine->makeSearchFieldMapping( 'heading', SearchIndexField::INDEX_TYPE_TEXT ); + $fields['heading']->setFlag( SearchIndexField::FLAG_SCORING ); + + $fields['auxiliary_text'] = + $engine->makeSearchFieldMapping( 'auxiliary_text', 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 + ); + // 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; + } + + public function getDataForSearchIndex( + WikiPage $page, + ParserOutput $parserOutput, + SearchEngine $engine + ) { + $fields = parent::getDataForSearchIndex( $page, $parserOutput, $engine ); + + $structure = new WikiTextStructure( $parserOutput ); + $fields['heading'] = $structure->headings(); + // text fields + $fields['opening_text'] = $structure->getOpeningText(); + $fields['text'] = $structure->getMainText(); // overwrites one from ContentHandler + $fields['auxiliary_text'] = $structure->getAuxiliaryText(); + $fields['defaultsort'] = $structure->getDefaultSort(); + + // 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; + } + +}