Merge "ObjectFactoryTest: Add tests for 'factory' option"
[lhc/web/wiklou.git] / includes / content / WikitextContentHandler.php
index 4e8f0df..3ad7665 100644 (file)
@@ -35,7 +35,7 @@ class WikitextContentHandler extends TextContentHandler {
        }
 
        protected function getContentClass() {
-               return 'WikitextContent';
+               return WikitextContent::class;
        }
 
        /**
@@ -109,7 +109,7 @@ class WikitextContentHandler extends TextContentHandler {
        }
 
        public function getFieldsForSearchIndex( SearchEngine $engine ) {
-               $fields = [];
+               $fields = parent::getFieldsForSearchIndex( $engine );
 
                $fields['category'] =
                        $engine->makeSearchFieldMapping( 'category', SearchIndexField::INDEX_TYPE_TEXT );
@@ -145,4 +145,48 @@ class WikitextContentHandler extends TextContentHandler {
                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['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();
+
+               $title = $page->getTitle();
+               if ( NS_FILE == $title->getNamespace() ) {
+                       $fileText = $this->getFileText( $title );
+                       if ( $fileText ) {
+                               $fields['file_text'] = $fileText;
+                       }
+               }
+               return $fields;
+       }
+
 }