X-Git-Url: http://git.cyclocoop.org/%28?a=blobdiff_plain;f=includes%2Fcontent%2FWikitextContentHandler.php;h=9c26ae158710599b51bb1429f90c04cdd2349dad;hb=e9d762863014c93244ac99f7c169d7ec5eee22d9;hp=5c0a9c81fe5ab878615c2d6ae07b50a1720c7935;hpb=3cfcd55011244c0767079bf4dbeb0dcc2345d34c;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/content/WikitextContentHandler.php b/includes/content/WikitextContentHandler.php index 5c0a9c81fe..9c26ae1587 100644 --- a/includes/content/WikitextContentHandler.php +++ b/includes/content/WikitextContentHandler.php @@ -35,7 +35,7 @@ class WikitextContentHandler extends TextContentHandler { } protected function getContentClass() { - return 'WikitextContent'; + return WikitextContent::class; } /** @@ -108,15 +108,16 @@ class WikitextContentHandler extends TextContentHandler { 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 ); @@ -127,60 +128,34 @@ 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 ); - - $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; }