Fix bug 14404. The articles are now always saved with the default options.
authorPlatonides <platonides@users.mediawiki.org>
Tue, 28 Dec 2010 18:44:32 +0000 (18:44 +0000)
committerPlatonides <platonides@users.mediawiki.org>
Tue, 28 Dec 2010 18:44:32 +0000 (18:44 +0000)
Most importantily, articles with {{int:X}} will now have consistent table
links no matter the language of the last saving user.
Existing articles with broken tables will be updated on a null edit (a purge is not enough).

Test added in r79121.

includes/Article.php

index a2d7b8c..5a56777 100644 (file)
@@ -41,7 +41,7 @@ class Article {
        var $mTouched = '19700101000000'; // !<
        var $mUser = -1;                  // !< Not loaded
        var $mUserText = '';              // !< username from Revision if set
-       var $mParserOptions;              // !< ParserOptions object
+       var $mParserOptions;              // !< ParserOptions object for $wgUser articles
        var $mParserOutput;               // !< ParserCache object if set
        /**@}}*/
 
@@ -3598,7 +3598,7 @@ class Article {
                $edit->revid = $revid;
                $edit->newText = $text;
                $edit->pst = $this->preSaveTransform( $text );
-               $edit->popts = $this->getParserOptions();
+               $edit->popts = $this->getParserOptions( true );
                $edit->output = $wgParser->parse( $edit->pst, $this->mTitle, $edit->popts, true, true, $revid );
                $edit->oldText = $this->getContent();
 
@@ -4439,15 +4439,23 @@ class Article {
 
        /**
         * Get parser options suitable for rendering the primary article wikitext
+        * @param $canonical boolean Determines that the generated must not depend on user preferences (see bug 14404)
         * @return mixed ParserOptions object or boolean false
         */
-       public function getParserOptions() {
-               global $wgUser;
-
-               if ( !$this->mParserOptions ) {
-                       $this->mParserOptions = new ParserOptions( $wgUser );
-                       $this->mParserOptions->setTidy( true );
-                       $this->mParserOptions->enableLimitReport();
+       public function getParserOptions( $canonical = false ) {
+               global $wgUser, $wgLanguageCode;
+
+               if ( !$this->mParserOptions || $canonical ) {
+                       $user = !$canonical ? $wgUser : new User;
+                       $parserOptions = new ParserOptions( $user );
+                       $parserOptions->setTidy( true );
+                       $parserOptions->enableLimitReport();
+                       
+                       if ( $canonical ) {
+                               $parserOptions->setUserLang( $wgLanguageCode ); # Must be set explicitely
+                               return $parserOptions;
+                       }
+                       $this->mParserOptions = $parserOptions;
                }
 
                // Clone to allow modifications of the return value without affecting