resourceloader: Add ResourceLoaderContext::getUserObj and replace use of $wgUser
authorKunal Mehta <legoktm@gmail.com>
Sat, 4 Oct 2014 10:22:07 +0000 (03:22 -0700)
committerKunal Mehta <legoktm@gmail.com>
Thu, 23 Oct 2014 21:09:30 +0000 (14:09 -0700)
Introduces ResourceLoaderContext::getUserObj(), which gets
a (possibly cached) User object for the context's username.

Use this instead of the $wgUser global.

Change-Id: Ifd9f634db145381625ab68067ae67791a3f494b8

includes/resourceloader/DerivativeResourceLoaderContext.php
includes/resourceloader/ResourceLoaderContext.php
includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php
includes/resourceloader/ResourceLoaderUserGroupsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php

index d114d7e..5784f2a 100644 (file)
@@ -126,6 +126,7 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext {
        public function setUser( $user ) {
                $this->user = $user;
                $this->hash = null;
+               $this->userObj = null;
        }
 
        public function getDebug() {
index 7af7b89..02744a6 100644 (file)
@@ -41,6 +41,7 @@ class ResourceLoaderContext {
        protected $version;
        protected $hash;
        protected $raw;
+       protected $userObj;
 
        /* Methods */
 
@@ -178,6 +179,31 @@ class ResourceLoaderContext {
                return $this->user;
        }
 
+       /**
+        * Get the possibly-cached User object for the specified username
+        *
+        * @since 1.25
+        * @return User|bool false if a valid object cannot be created
+        */
+       public function getUserObj() {
+               if ( $this->userObj === null ) {
+                       $username = $this->getUser();
+                       if ( $username ) {
+                               // Optimize: Avoid loading a new User object if possible
+                               global $wgUser;
+                               if ( is_object( $wgUser ) && $wgUser->getName() === $username ) {
+                                       $this->userObj = $wgUser;
+                               } else {
+                                       $this->userObj = User::newFromName( $username );
+                               }
+                       } else {
+                               $this->userObj = new User; // Anonymous user
+                       }
+               }
+
+               return $this->userObj;
+       }
+
        /**
         * @return bool
         */
index 40274c6..9d97eea 100644 (file)
@@ -42,8 +42,7 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
        public function getModifiedTime( ResourceLoaderContext $context ) {
                $hash = $context->getHash();
                if ( !isset( $this->modifiedTime[$hash] ) ) {
-                       global $wgUser;
-                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
                }
 
                return $this->modifiedTime[$hash];
@@ -54,13 +53,11 @@ class ResourceLoaderUserCSSPrefsModule extends ResourceLoaderModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
-               global $wgUser;
-
                if ( !$this->getConfig()->get( 'AllowUserCssPrefs' ) ) {
                        return array();
                }
 
-               $options = $wgUser->getOptions();
+               $options = $context->getUserObj()->getOptions();
 
                // Build CSS rules
                $rules = array();
index 7cf1942..ee350cf 100644 (file)
@@ -37,27 +37,15 @@ class ResourceLoaderUserGroupsModule extends ResourceLoaderWikiModule {
         * @return array
         */
        protected function getPages( ResourceLoaderContext $context ) {
-               global $wgUser;
-
-               $userName = $context->getUser();
-               if ( $userName === null ) {
-                       return array();
-               }
-
                $useSiteJs = $this->getConfig()->get( 'UseSiteJs' );
                $useSiteCss = $this->getConfig()->get( 'UseSiteCss' );
                if ( !$useSiteJs && !$useSiteCss ) {
                        return array();
                }
 
-               // Use $wgUser is possible; allows to skip a lot of code
-               if ( is_object( $wgUser ) && $wgUser->getName() == $userName ) {
-                       $user = $wgUser;
-               } else {
-                       $user = User::newFromName( $userName );
-                       if ( !$user instanceof User ) {
-                               return array();
-                       }
+               $user = $context->getUserObj();
+               if ( !$user || $user->isAnon() ) {
+                       return array();
                }
 
                $pages = array();
index bd97a8e..e6b07c1 100644 (file)
@@ -44,8 +44,7 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
        public function getModifiedTime( ResourceLoaderContext $context ) {
                $hash = $context->getHash();
                if ( !isset( $this->modifiedTime[$hash] ) ) {
-                       global $wgUser;
-                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
+                       $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $context->getUserObj()->getTouched() );
                }
 
                return $this->modifiedTime[$hash];
@@ -56,9 +55,8 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
         * @return string
         */
        public function getScript( ResourceLoaderContext $context ) {
-               global $wgUser;
                return Xml::encodeJsCall( 'mw.user.options.set',
-                       array( $wgUser->getOptions() ),
+                       array( $context->getUserObj()->getOptions() ),
                        ResourceLoader::inDebugMode()
                );
        }
index 668467c..ccd1dfd 100644 (file)
@@ -37,15 +37,16 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
        /**
         * Fetch the tokens for the current user.
         *
+        * @param ResourceLoaderContext $context
         * @return array List of tokens keyed by token type
         */
-       protected function contextUserTokens() {
-               global $wgUser;
+       protected function contextUserTokens( ResourceLoaderContext $context ) {
+               $user = $context->getUserObj();
 
                return array(
-                       'editToken' => $wgUser->getEditToken(),
-                       'patrolToken' => $wgUser->getEditToken( 'patrol' ),
-                       'watchToken' => $wgUser->getEditToken( 'watch' ),
+                       'editToken' => $user->getEditToken(),
+                       'patrolToken' => $user->getEditToken( 'patrol' ),
+                       'watchToken' => $user->getEditToken( 'watch' ),
                );
        }
 
@@ -55,7 +56,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall( 'mw.user.tokens.set',
-                       array( $this->contextUserTokens() ),
+                       array( $this->contextUserTokens( $context ) ),
                        ResourceLoader::inDebugMode()
                );
        }