Add User::isSafeToLoad() and ParserOptions::newFromAnon()
authorBrad Jorsch <bjorsch@wikimedia.org>
Wed, 3 Feb 2016 20:41:00 +0000 (15:41 -0500)
committerAnomie <bjorsch@wikimedia.org>
Wed, 3 Feb 2016 21:45:56 +0000 (21:45 +0000)
Useful for avoiding "User::loadFromSession called before the end of
Setup.php".

Bug: T124367
Change-Id: I0b018a623fc833ca95d249ee21667a8f5690d50e

includes/cache/MessageCache.php
includes/parser/ParserOptions.php
includes/user/User.php

index 6b938f1..2fae4e3 100644 (file)
@@ -168,14 +168,14 @@ class MessageCache {
         * @return ParserOptions
         */
        function getParserOptions() {
-               global $wgFullyInitialised, $wgContLang;
+               global $wgUser;
 
                if ( !$this->mParserOptions ) {
-                       if ( !$wgFullyInitialised ) {
+                       if ( !$wgUser->isSafeToLoad() ) {
                                // $wgUser isn't unstubbable yet, so don't try to get a
                                // ParserOptions for it. And don't cache this ParserOptions
                                // either.
-                               $po = new ParserOptions( new User, $wgContLang );
+                               $po = ParserOptions::newFromAnon();
                                $po->setEditSection( false );
                                return $po;
                        }
index e6d5274..0e8d76d 100644 (file)
@@ -599,6 +599,15 @@ class ParserOptions {
                $this->initialiseFromUser( $user, $lang );
        }
 
+       /**
+        * Get a ParserOptions object for an anonymous user
+        * @return ParserOptions
+        */
+       public static function newFromAnon() {
+               global $wgContLang;
+               return new ParserOptions( new User, $wgContLang );
+       }
+
        /**
         * Get a ParserOptions object from a given user.
         * Language will be taken from $wgLang.
index 0fa7d59..8e3b2ec 100644 (file)
@@ -309,6 +309,15 @@ class User implements IDBAccessObject {
                return $this->getName();
        }
 
+       /**
+        * Test if it's safe to load this User object
+        * @return bool
+        */
+       public function isSafeToLoad() {
+               global $wgFullyInitialised;
+               return $wgFullyInitialised || $this->mLoadedItems === true || $this->mFrom !== 'session';
+       }
+
        /**
         * Load the user table data for this object from the source given by mFrom.
         *
@@ -327,7 +336,7 @@ class User implements IDBAccessObject {
                $this->queryFlagsUsed = $flags;
 
                // If this is called too early, things are likely to break.
-               if ( $this->mFrom === 'session' && empty( $wgFullyInitialised ) ) {
+               if ( !$wgFullyInitialised && $this->mFrom === 'session' ) {
                        \MediaWiki\Logger\LoggerFactory::getInstance( 'session' )
                                ->warning( 'User::loadFromSession called before the end of Setup.php', array(
                                        'exception' => new Exception( 'User::loadFromSession called before the end of Setup.php' ),