Merge "Change 'editfont' default preference to 'monospace'"
[lhc/web/wiklou.git] / includes / content / ContentHandler.php
index 5862bf1..0509e29 100644 (file)
@@ -136,7 +136,7 @@ abstract class ContentHandler {
                        $modelId = $title->getContentModel();
                }
 
-               $handler = ContentHandler::getForModelID( $modelId );
+               $handler = self::getForModelID( $modelId );
 
                return $handler->unserializeContent( $text, $format );
        }
@@ -240,7 +240,7 @@ abstract class ContentHandler {
        public static function getForTitle( Title $title ) {
                $modelId = $title->getContentModel();
 
-               return ContentHandler::getForModelID( $modelId );
+               return self::getForModelID( $modelId );
        }
 
        /**
@@ -256,7 +256,7 @@ abstract class ContentHandler {
        public static function getForContent( Content $content ) {
                $modelId = $content->getModel();
 
-               return ContentHandler::getForModelID( $modelId );
+               return self::getForModelID( $modelId );
        }
 
        /**
@@ -293,8 +293,8 @@ abstract class ContentHandler {
        public static function getForModelID( $modelId ) {
                global $wgContentHandlers;
 
-               if ( isset( ContentHandler::$handlers[$modelId] ) ) {
-                       return ContentHandler::$handlers[$modelId];
+               if ( isset( self::$handlers[$modelId] ) ) {
+                       return self::$handlers[$modelId];
                }
 
                if ( empty( $wgContentHandlers[$modelId] ) ) {
@@ -327,9 +327,9 @@ abstract class ContentHandler {
                wfDebugLog( 'ContentHandler', 'Created handler for ' . $modelId
                        . ': ' . get_class( $handler ) );
 
-               ContentHandler::$handlers[$modelId] = $handler;
+               self::$handlers[$modelId] = $handler;
 
-               return ContentHandler::$handlers[$modelId];
+               return self::$handlers[$modelId];
        }
 
        /**
@@ -361,7 +361,9 @@ abstract class ContentHandler {
        public static function getContentModels() {
                global $wgContentHandlers;
 
-               return array_keys( $wgContentHandlers );
+               $models = array_keys( $wgContentHandlers );
+               Hooks::run( 'GetContentModels', [ &$models ] );
+               return $models;
        }
 
        public static function getAllContentFormats() {
@@ -370,7 +372,7 @@ abstract class ContentHandler {
                $formats = [];
 
                foreach ( $wgContentHandlers as $model => $class ) {
-                       $handler = ContentHandler::getForModelID( $model );
+                       $handler = self::getForModelID( $model );
                        $formats = array_merge( $formats, $handler->getSupportedFormats() );
                }
 
@@ -617,8 +619,8 @@ abstract class ContentHandler {
         */
        public function createDifferenceEngine( IContextSource $context, $old = 0, $new = 0,
                $rcid = 0, // FIXME: Deprecated, no longer used
-               $refreshCache = false, $unhide = false ) {
-
+               $refreshCache = false, $unhide = false
+       ) {
                // hook: get difference engine
                $differenceEngine = null;
                if ( !Hooks::run( 'GetDifferenceEngine',
@@ -897,7 +899,7 @@ abstract class ContentHandler {
                        $onlyAuthor = $row->rev_user_text;
                        // Try to find a second contributor
                        foreach ( $res as $row ) {
-                               if ( $row->rev_user_text != $onlyAuthor ) { // Bug 22999
+                               if ( $row->rev_user_text != $onlyAuthor ) { // T24999
                                        $onlyAuthor = false;
                                        break;
                                }
@@ -1005,22 +1007,22 @@ abstract class ContentHandler {
         * @return ParserOptions
         */
        public function makeParserOptions( $context ) {
-               global $wgContLang, $wgEnableParserLimitReporting;
+               global $wgContLang;
 
                if ( $context instanceof IContextSource ) {
-                       $options = ParserOptions::newFromContext( $context );
+                       $user = $context->getUser();
+                       $lang = $context->getLanguage();
                } elseif ( $context instanceof User ) { // settings per user (even anons)
-                       $options = ParserOptions::newFromUser( $context );
+                       $user = $context;
+                       $lang = null;
                } elseif ( $context === 'canonical' ) { // canonical settings
-                       $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+                       $user = new User;
+                       $lang = $wgContLang;
                } else {
                        throw new MWException( "Bad context for parser options: $context" );
                }
 
-               $options->enableLimitReport( $wgEnableParserLimitReporting ); // show inclusion/loop reports
-               $options->setTidy( true ); // fix bad HTML
-
-               return $options;
+               return ParserOptions::newCanonical( $user, $lang );
        }
 
        /**
@@ -1104,7 +1106,6 @@ abstract class ContentHandler {
                        'category',
                        SearchIndexField::INDEX_TYPE_TEXT
                );
-
                $fields['category']->setFlag( SearchIndexField::FLAG_CASEFOLD );
 
                $fields['external_link'] = $engine->makeSearchFieldMapping(
@@ -1121,18 +1122,22 @@ abstract class ContentHandler {
                        'template',
                        SearchIndexField::INDEX_TYPE_KEYWORD
                );
-
                $fields['template']->setFlag( SearchIndexField::FLAG_CASEFOLD );
 
+               $fields['content_model'] = $engine->makeSearchFieldMapping(
+                       'content_model',
+                       SearchIndexField::INDEX_TYPE_KEYWORD
+               );
+
                return $fields;
        }
 
        /**
         * Add new field definition to array.
-        * @param SearchIndexField[] $fields
-        * @param SearchEngine       $engine
-        * @param string             $name
-        * @param int                $type
+        * @param SearchIndexField[] &$fields
+        * @param SearchEngine $engine
+        * @param string $name
+        * @param int $type
         * @return SearchIndexField[] new field defs
         * @since 1.28
         */
@@ -1146,14 +1151,17 @@ abstract class ContentHandler {
         * as representation of this document.
         * Overriding class should call parent function or take care of calling
         * the SearchDataForIndex hook.
-        * @param WikiPage     $page Page to index
+        * @param WikiPage $page Page to index
         * @param ParserOutput $output
         * @param SearchEngine $engine Search engine for which we are indexing
         * @return array Map of name=>value for fields
         * @since 1.28
         */
-       public function getDataForSearchIndex( WikiPage $page, ParserOutput $output,
-                                              SearchEngine $engine ) {
+       public function getDataForSearchIndex(
+               WikiPage $page,
+               ParserOutput $output,
+               SearchEngine $engine
+       ) {
                $fieldData = [];
                $content = $page->getContent();
 
@@ -1170,6 +1178,7 @@ abstract class ContentHandler {
                        $fieldData['text'] = $text;
                        $fieldData['source_text'] = $text;
                        $fieldData['text_bytes'] = $content->getSize();
+                       $fieldData['content_model'] = $content->getModel();
                }
 
                Hooks::run( 'SearchDataForIndex', [ &$fieldData, $this, $page, $output, $engine ] );
@@ -1181,7 +1190,7 @@ abstract class ContentHandler {
         *
         * Specific content handlers may override it if they need different content handling.
         *
-        * @param WikiPage    $page
+        * @param WikiPage $page
         * @param ParserCache $cache
         * @return ParserOutput
         */