Update setlang to display confirmation dialog to change language
setlang will now display a dialog to confirm with the user that they would like to change their interface language. The preferred language will only be updated if the user confirms. The dialog will be displayed if the setlang parameter is present in the query string and, * A user is logged in, and their preferred language is not the same as the one passed via setlang. * For an anonymous user if the wgULSAnonCanChangeLanguage is true, and the current interface language is not the same as the one passed via setlang. Bug: T63115 Change-Id: I882297d99a594fd82fd0aec3b4664e8bfd1eac3a
This commit is contained in:
73
includes/api/ApiULSSetLanguage.php
Normal file
73
includes/api/ApiULSSetLanguage.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
/**
|
||||
* Update user's preferred language.
|
||||
*
|
||||
* Copyright (C) 2012 Alolita Sharma, Amir Aharoni, Arun Ganesh, Brandon Harris,
|
||||
* Niklas Laxström, Pau Giner, Santhosh Thottingal, Siebrand Mazeland and other
|
||||
* contributors. See CREDITS for a list.
|
||||
*
|
||||
* UniversalLanguageSelector is dual licensed GPLv2 or later and MIT. You don't
|
||||
* have to do anything special to choose one license or the other and you don't
|
||||
* have to notify anyone which license you are using. You are free to use
|
||||
* UniversalLanguageSelector in commercial projects as long as the copyright
|
||||
* header is left intact. See files GPL-LICENSE and MIT-LICENSE for details.
|
||||
*
|
||||
* @file
|
||||
* @ingroup Extensions
|
||||
* @license GPL-2.0-or-later
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ingroup API
|
||||
*/
|
||||
class ApiULSSetLanguage extends ApiBase {
|
||||
public function execute() {
|
||||
$request = $this->getRequest();
|
||||
if ( !$request->wasPosted() ) {
|
||||
$this->dieWithError( [ 'apierror-mustbeposted', $request->getText( 'action' ) ] );
|
||||
}
|
||||
|
||||
$languageCode = $request->getText( 'languagecode' );
|
||||
if ( !Language::isSupportedLanguage( $languageCode ) ) {
|
||||
$this->dieWithError(
|
||||
[ 'apierror-invalidlang', $this->encodeParamName( 'languagecode' ) ]
|
||||
);
|
||||
}
|
||||
|
||||
$user = $this->getUser();
|
||||
if ( $user->isAnon() ) {
|
||||
if ( $this->getConfig()->get( 'ULSAnonCanChangeLanguage' ) ) {
|
||||
// Anonymous users can change language.
|
||||
$request->response()->setCookie( 'language', $languageCode );
|
||||
return;
|
||||
}
|
||||
|
||||
$this->dieWithError( [ 'apierror-ulssetlang-anon-notallowed' ] );
|
||||
}
|
||||
|
||||
$updateUser = $user->getInstanceForUpdate();
|
||||
$updateUser->setOption( 'language', $languageCode );
|
||||
// Sync the DB on post-send
|
||||
DeferredUpdates::addCallableUpdate( function () use ( $updateUser ) {
|
||||
$updateUser->saveSettings();
|
||||
} );
|
||||
}
|
||||
|
||||
public function getAllowedParams() {
|
||||
return [
|
||||
'languagecode' => [
|
||||
ApiBase::PARAM_REQUIRED => true,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function isInternal() {
|
||||
// Try to scare people away from using this externally
|
||||
return true;
|
||||
}
|
||||
|
||||
public function needsToken() {
|
||||
return 'csrf';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user