Fix bug 14404. The articles are now always saved with the default options.
[lhc/web/wiklou.git] / includes / Article.php
index a01f40c..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
        /**@}}*/
 
@@ -1499,7 +1499,7 @@ class Article {
        public function tryDirtyCache() {
                global $wgOut;
                $parserCache = ParserCache::singleton();
-               $options = clone $this->getParserOptions();
+               $options = $this->getParserOptions();
 
                if ( $wgOut->isPrintable() ) {
                        $options->setIsPrintable( true );
@@ -1691,6 +1691,7 @@ class Article {
 
                // Invalidate the cache
                $this->mTitle->invalidateCache();
+               $this->clear();
 
                if ( $wgUseSquid ) {
                        // Commit the transaction before the purge is sent
@@ -3597,7 +3598,7 @@ class Article {
                $edit->revid = $revid;
                $edit->newText = $text;
                $edit->pst = $this->preSaveTransform( $text );
-               $edit->popts = clone $this->getParserOptions();
+               $edit->popts = $this->getParserOptions( true );
                $edit->output = $wgParser->parse( $edit->pst, $this->mTitle, $edit->popts, true, true, $revid );
                $edit->oldText = $this->getContent();
 
@@ -4405,7 +4406,7 @@ class Article {
                global $wgParser, $wgEnableParserCache, $wgUseFileCache;
 
                if ( !$parserOptions ) {
-                       $parserOptions = clone $this->getParserOptions();
+                       $parserOptions = $this->getParserOptions();
                }
 
                $time = - wfTime();
@@ -4438,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