Namespace extension

Change-Id: I79aa319f177589d85446888289568748cd63d1c5
This commit is contained in:
Reedy
2021-11-25 20:20:18 +00:00
committed by jenkins-bot
parent 71fb08ed41
commit f9532855ad
13 changed files with 73 additions and 27 deletions

View File

@@ -0,0 +1,66 @@
<?php
/**
* Language name search API
*
* 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
*/
namespace UniversalLanguageSelector\Api;
use ApiBase;
use LanguageNameSearch;
use Wikimedia\ParamValidator\ParamValidator;
/**
* @ingroup API
*/
class ApiLanguageSearch extends ApiBase {
public function execute() {
$params = $this->extractRequestParams();
$search = $params['search'];
$typos = $params['typos'];
$searches = LanguageNameSearch::search( $search, $typos, $this->getLanguage()->getCode() );
$result = $this->getResult();
$result->addValue( null, $this->getModuleName(), $searches );
}
public function getAllowedParams() {
return [
'search' => [
ParamValidator::PARAM_REQUIRED => true
],
'typos' => [
ParamValidator::PARAM_REQUIRED => false,
ParamValidator::PARAM_TYPE => 'integer',
ParamValidator::PARAM_DEFAULT => 1
],
];
}
/**
* @inheritDoc
*/
protected function getExamplesMessages() {
return [
'action=languagesearch&search=Te'
=> 'apihelp-languagesearch-example-1',
'action=languagesearch&search=ഫി'
=> 'apihelp-languagesearch-example-2',
'action=languagesearch&search=ഫി&typos=1'
=> 'apihelp-languagesearch-example-3',
];
}
}

View File

@@ -0,0 +1,98 @@
<?php
/**
* Localization API for ULS
*
* Copyright (C) 2013 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
*/
namespace UniversalLanguageSelector\Api;
use ApiBase;
use ApiFormatRaw;
use ApiMain;
use MediaWiki\Languages\LanguageNameUtils;
use UniversalLanguageSelector\ULSJsonMessageLoader;
use Wikimedia\ParamValidator\ParamValidator;
/**
* @ingroup API
*/
class ApiULSLocalization extends ApiBase {
/** @var LanguageNameUtils */
private $languageNameUtils;
/**
* @param ApiMain $main
* @param string $action
* @param LanguageNameUtils $languageNameUtils
*/
public function __construct(
ApiMain $main,
$action,
LanguageNameUtils $languageNameUtils
) {
parent::__construct( $main, $action );
$this->languageNameUtils = $languageNameUtils;
}
public function execute() {
$this->getMain()->setCacheMode( 'public' );
$this->getMain()->setCacheMaxAge( 2419200 );
$params = $this->extractRequestParams();
$language = $params['language'];
if ( !$this->languageNameUtils->isValidCode( $language ) ) {
$this->dieWithError( [ 'apierror-invalidlang', 'language' ], 'invalidlanguage' );
}
$contents = ULSJsonMessageLoader::getMessages( $language );
// Output the file's contents raw
$this->getResult()->addValue( null, 'text', json_encode( $contents ) );
$this->getResult()->addValue( null, 'mime', 'application/json' );
}
public function getCustomPrinter() {
return new ApiFormatRaw(
$this->getMain(),
$this->getMain()->createPrinterByName( 'json' )
);
}
public function getAllowedParams() {
return [
'language' => [
ParamValidator::PARAM_REQUIRED => true,
ParamValidator::PARAM_TYPE => 'string',
],
];
}
/**
* @inheritDoc
*/
protected function getExamplesMessages() {
return [
'action=ulslocalization&language=ta'
=> 'apihelp-ulslocalization-example-1',
'action=ulslocalization&language=hi'
=> 'apihelp-ulslocalization-example-2',
];
}
public function isInternal() {
// Try to scare people away from using this externally
return true;
}
}

View File

@@ -0,0 +1,110 @@
<?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
*/
namespace UniversalLanguageSelector\Api;
use ApiBase;
use ApiMain;
use DeferredUpdates;
use MediaWiki\Languages\LanguageNameUtils;
use MediaWiki\User\UserOptionsManager;
use Wikimedia\ParamValidator\ParamValidator;
/**
* @ingroup API
*/
class ApiULSSetLanguage extends ApiBase {
/** @var UserOptionsManager */
private $userOptionsManager;
/** @var LanguageNameUtils */
private $languageNameUtils;
/**
* @param ApiMain $main
* @param string $action
* @param UserOptionsManager $userOptionsManager
* @param LanguageNameUtils $languageNameUtils
*/
public function __construct(
ApiMain $main,
$action,
UserOptionsManager $userOptionsManager,
LanguageNameUtils $languageNameUtils
) {
parent::__construct( $main, $action );
$this->userOptionsManager = $userOptionsManager;
$this->languageNameUtils = $languageNameUtils;
}
public function execute() {
$request = $this->getRequest();
if ( !$request->wasPosted() ) {
$this->dieWithError( [ 'apierror-mustbeposted', $request->getText( 'action' ) ] );
}
$languageCode = $request->getText( 'languagecode' );
if ( !$this->languageNameUtils->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();
$this->userOptionsManager->setOption( $updateUser, 'language', $languageCode );
// Sync the DB on post-send
DeferredUpdates::addCallableUpdate( static function () use ( $updateUser ) {
$updateUser->saveSettings();
} );
}
public function getAllowedParams() {
return [
'languagecode' => [
ParamValidator::PARAM_REQUIRED => true,
]
];
}
public function isInternal() {
// Try to scare people away from using this externally
return true;
}
public function needsToken() {
return 'csrf';
}
}