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; } 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 ); // 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 ); 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() ) { $handler = $file->getHandler(); if ( !$handler ) { return null; } return $handler->getEntireText( $file ); } return null; } 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(); $title = $page->getTitle(); if ( NS_FILE == $title->getNamespace() ) { $fileText = $this->getFileText( $title ); if ( $fileText ) { $fields['file_text'] = $fileText; } } return $fields; } }