LanguageConverter: stop reading from $wgUser
Use RequestContext::getMain()->getUser() instead. Given that there is an explicit check if the user is safe to load, this should be fine - if the RequestContext doesn't already have a user, it'll create one via User::newFromSession() and then the isSafeToLoad() call will fail. Bug: T243708 Change-Id: I06906681e1c1e9ea3ef3c6e4fddcea7871bf164f
This commit is contained in:
parent
709a5add82
commit
2696c06a2b
2 changed files with 10 additions and 9 deletions
|
|
@ -286,17 +286,19 @@ abstract class LanguageConverter implements ILanguageConverter {
|
|||
* @return string The preferred language code
|
||||
*/
|
||||
public function getPreferredVariant() {
|
||||
global $wgDefaultLanguageVariant, $wgUser;
|
||||
global $wgDefaultLanguageVariant;
|
||||
|
||||
$req = $this->getURLVariant();
|
||||
|
||||
Hooks::runner()->onGetLangPreferredVariant( $req );
|
||||
|
||||
// NOTE: For calls from Setup.php, wgUser or the session might not be set yet (T235360)
|
||||
$user = RequestContext::getMain()->getUser();
|
||||
// NOTE: For some calls there may not be a context user or session that is safe
|
||||
// to use, see (T235360)
|
||||
// Use case: During autocreation, UserNameUtils::isUsable is called which uses interface
|
||||
// messages for reserved usernames.
|
||||
if ( $wgUser && $wgUser->isSafeToLoad() && $wgUser->isRegistered() && !$req ) {
|
||||
$req = $this->getUserVariant( $wgUser );
|
||||
if ( $user->isSafeToLoad() && $user->isRegistered() && !$req ) {
|
||||
$req = $this->getUserVariant( $user );
|
||||
} elseif ( !$req ) {
|
||||
$req = $this->getHeaderVariant();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,9 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
|
|||
* @param User $user
|
||||
*/
|
||||
private function setContextUser( User $user ) {
|
||||
// TODO stop using the deprecated global here, and convert
|
||||
// LanguageConverter to use RequestContext or dependency injection
|
||||
global $wgUser;
|
||||
$wgUser = $user;
|
||||
// LanguageConverter::getPreferredVariant() reads the user from
|
||||
// RequestContext::getMain(), so set it occordingly
|
||||
RequestContext::getMain()->setUser( $user );
|
||||
}
|
||||
|
||||
protected function setUp() : void {
|
||||
|
|
@ -31,8 +30,8 @@ class LanguageConverterTest extends MediaWikiLangTestCase {
|
|||
|
||||
$this->setMwGlobals( [
|
||||
'wgDefaultLanguageVariant' => false,
|
||||
'wgUser' => new User,
|
||||
] );
|
||||
$this->setContextUser( new User );
|
||||
|
||||
$this->lang = $this->createMock( Language::class );
|
||||
$this->lang->method( 'getNsText' )->with( NS_MEDIAWIKI )->willReturn( 'MediaWiki' );
|
||||
|
|
|
|||
Loading…
Reference in a new issue