X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fcontent%2FWikitextContentHandler.php;h=9c26ae158710599b51bb1429f90c04cdd2349dad;hb=52b74d44d522c2a1b67f9ccc2b8f7e44b6b52d7c;hp=978ac4400346ceafe4b168e8b02368f54f92dd67;hpb=17914cc990c375340b688900b7782f1d7d5339fc;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/content/WikitextContentHandler.php b/includes/content/WikitextContentHandler.php index 978ac44003..9c26ae1587 100644 --- a/includes/content/WikitextContentHandler.php +++ b/includes/content/WikitextContentHandler.php @@ -108,6 +108,14 @@ class WikitextContentHandler extends TextContentHandler { return true; } + /** + * Get file handler + * @return FileContentHandler + */ + protected function getFileHandler() { + return new FileContentHandler(); + } + public function getFieldsForSearchIndex( SearchEngine $engine ) { $fields = parent::getFieldsForSearchIndex( $engine ); @@ -120,38 +128,20 @@ class WikitextContentHandler extends TextContentHandler { $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 ); + $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() ) { - $handler = $file->getHandler(); - if ( !$handler ) { - return null; - } - return $handler->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 ); @@ -162,12 +152,10 @@ class WikitextContentHandler extends TextContentHandler { $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; }