wiki.techinc.nl/includes/api/ApiTokens.php
Brad Jorsch 4e6810e4a2 API: i18n for warnings and errors
API warnings and error messages are currently hard-coded English
strings. This patch changes that.

With a few exceptions, this patch should be compatible with non-updated
extensions:
* The change to ApiBase::$messageMap will blow up anything trying to
  mess with it.
* The changes to the 'ApiCheckCanExecute' hook will cause a wrong
  (probably unparsed) error message to be emitted for extensions not
  already using an ApiMessage. Unless they're currently broken like
  Wikibase.

Bug: T37074
Bug: T47843
Depends-On: Ia2b66b57cd4eaddc30b3ffdd7b97d6ca3e02d898
Depends-On: I2e1bb975bb0045476c03ebe6cdec00259bae22ec
Depends-On: I53987bf87c48f6c00deec17a8e957d24fcc3eaa6
Depends-On: Ibf93a459eb62d30f7c70d20e91ec9faeb80d10ed
Depends-On: I3cf889811f44a15935e454dd42f081164d4a098c
Depends-On: Ieae527de86735ddcba34724730e8730fb277b99b
Depends-On: I535344c29d51521147c2a26c341dae38cec3e931
Change-Id: Iae0e2ce3bd42dd4776a9779664086119ac188412
2016-12-06 10:20:48 -05:00

116 lines
3.1 KiB
PHP

<?php
/**
*
*
* Created on Jul 29, 2011
*
* Copyright © 2011 John Du Hart john@johnduhart.me
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
/**
* @deprecated since 1.24
* @ingroup API
*/
class ApiTokens extends ApiBase {
public function execute() {
$this->addDeprecation(
[ 'apiwarn-deprecation-withreplacement', 'action=tokens', 'action=query&meta=tokens' ],
'action=tokens'
);
$params = $this->extractRequestParams();
$res = [
ApiResult::META_TYPE => 'assoc',
];
$types = $this->getTokenTypes();
foreach ( $params['type'] as $type ) {
$val = call_user_func( $types[$type], null, null );
if ( $val === false ) {
$this->addWarning( [ 'apiwarn-tokennotallowed', $type ] );
} else {
$res[$type . 'token'] = $val;
}
}
$this->getResult()->addValue( null, $this->getModuleName(), $res );
}
private function getTokenTypes() {
// If we're in a mode that breaks the same-origin policy, no tokens can
// be obtained
if ( $this->lacksSameOriginSecurity() ) {
return [];
}
static $types = null;
if ( $types ) {
return $types;
}
$types = [ 'patrol' => [ 'ApiQueryRecentChanges', 'getPatrolToken' ] ];
$names = [ 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
'email', 'import', 'watch', 'options' ];
foreach ( $names as $name ) {
$types[$name] = [ 'ApiQueryInfo', 'get' . ucfirst( $name ) . 'Token' ];
}
Hooks::run( 'ApiTokensGetTokenTypes', [ &$types ] );
// For forwards-compat, copy any token types from ApiQueryTokens that
// we don't already have something for.
$user = $this->getUser();
$request = $this->getRequest();
foreach ( ApiQueryTokens::getTokenTypeSalts() as $name => $salt ) {
if ( !isset( $types[$name] ) ) {
$types[$name] = function () use ( $salt, $user, $request ) {
return ApiQueryTokens::getToken( $user, $request->getSession(), $salt )->toString();
};
}
}
ksort( $types );
return $types;
}
public function isDeprecated() {
return true;
}
public function getAllowedParams() {
return [
'type' => [
ApiBase::PARAM_DFLT => 'edit',
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenTypes() ),
],
];
}
protected function getExamplesMessages() {
return [
'action=tokens'
=> 'apihelp-tokens-example-edit',
'action=tokens&type=email|move'
=> 'apihelp-tokens-example-emailmove',
];
}
}