diff options
Diffstat (limited to 'MLEB/UniversalLanguageSelector/includes/api/ApiULSSetLanguage.php')
-rw-r--r-- | MLEB/UniversalLanguageSelector/includes/api/ApiULSSetLanguage.php | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/MLEB/UniversalLanguageSelector/includes/api/ApiULSSetLanguage.php b/MLEB/UniversalLanguageSelector/includes/api/ApiULSSetLanguage.php new file mode 100644 index 00000000..715c6dd8 --- /dev/null +++ b/MLEB/UniversalLanguageSelector/includes/api/ApiULSSetLanguage.php @@ -0,0 +1,79 @@ +<?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. + // Use a cookie that also can changed by JavaScript. + $request->response()->setCookie( + 'language', + $languageCode, + 0, + [ 'httpOnly' => false ] + ); + 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'; + } +} |