From: Kunal Mehta Date: Sat, 4 Oct 2014 10:22:07 +0000 (-0700) Subject: resourceloader: Add ResourceLoaderContext::getUserObj and replace use of $wgUser X-Git-Tag: 1.31.0-rc.0~13495^2 X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22suivi_revisions%22%2C%22id_auteur=%24connecte%22%29%20.%20%22?a=commitdiff_plain;h=e7a0759f2073f685106d2a2c8d0726990a04ca56;p=lhc%2Fweb%2Fwiklou.git resourceloader: Add ResourceLoaderContext::getUserObj and replace use of $wgUser 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 --- diff --git a/includes/resourceloader/DerivativeResourceLoaderContext.php b/includes/resourceloader/DerivativeResourceLoaderContext.php index d114d7edb1..5784f2a0b0 100644 --- a/includes/resourceloader/DerivativeResourceLoaderContext.php +++ b/includes/resourceloader/DerivativeResourceLoaderContext.php @@ -126,6 +126,7 @@ class DerivativeResourceLoaderContext extends ResourceLoaderContext { public function setUser( $user ) { $this->user = $user; $this->hash = null; + $this->userObj = null; } public function getDebug() { diff --git a/includes/resourceloader/ResourceLoaderContext.php b/includes/resourceloader/ResourceLoaderContext.php index 7af7b89865..02744a61b6 100644 --- a/includes/resourceloader/ResourceLoaderContext.php +++ b/includes/resourceloader/ResourceLoaderContext.php @@ -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 */ diff --git a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php index 40274c6330..9d97eea12b 100644 --- a/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php +++ b/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php @@ -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(); diff --git a/includes/resourceloader/ResourceLoaderUserGroupsModule.php b/includes/resourceloader/ResourceLoaderUserGroupsModule.php index 7cf194206e..ee350cf0b5 100644 --- a/includes/resourceloader/ResourceLoaderUserGroupsModule.php +++ b/includes/resourceloader/ResourceLoaderUserGroupsModule.php @@ -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(); diff --git a/includes/resourceloader/ResourceLoaderUserOptionsModule.php b/includes/resourceloader/ResourceLoaderUserOptionsModule.php index bd97a8e5ed..e6b07c1c09 100644 --- a/includes/resourceloader/ResourceLoaderUserOptionsModule.php +++ b/includes/resourceloader/ResourceLoaderUserOptionsModule.php @@ -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() ); } diff --git a/includes/resourceloader/ResourceLoaderUserTokensModule.php b/includes/resourceloader/ResourceLoaderUserTokensModule.php index 668467ca8c..ccd1dfd0b6 100644 --- a/includes/resourceloader/ResourceLoaderUserTokensModule.php +++ b/includes/resourceloader/ResourceLoaderUserTokensModule.php @@ -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() ); }