Go to the documentation of this file.
3 use Wikimedia\TestingAccessWrapper;
109 if ( !self::$main ) {
111 self::$main->getContext()->setLanguage(
'en' );
112 self::$main->getContext()->setTitle(
127 $this->assertTrue( $msg->exists(),
"$what message {$msg->getKey()} exists" );
143 foreach ( $globals
as $k => $v ) {
151 foreach ( $module->getHelpFlags()
as $flag ) {
152 $this->
checkMessage(
"api-help-flag-$flag",
"Flag $flag" );
156 $this->
checkMessage( $module->getSummaryMessage(),
'Module summary' );
157 $this->
checkMessage( $module->getExtendedDescription(),
'Module help top text' );
163 if ( !is_array( $settings ) ) {
171 $msg =
"apihelp-{$path}-param-{$name}";
173 $this->
checkMessage( $msg,
"Parameter $name description" );
178 "Parameter $name PARAM_HELP_MSG_PER_VALUE is array" );
180 "Parameter $name PARAM_TYPE is array for msg-per-value mode" );
183 if ( isset( $valueMsgs[
$value] ) ) {
184 $msg = $valueMsgs[
$value];
186 $msg =
"apihelp-{$path}-paramvalue-{$name}-{$value}";
188 $this->
checkMessage( $msg,
"Parameter $name value $value" );
195 "Parameter $name PARAM_HELP_MSG_APPEND is array" );
197 $this->
checkMessage( $msg,
"Parameter $name HELP_MSG_APPEND #$i" );
205 $tags[array_shift( $i )] = 1;
211 foreach ( $tags
as $tag => $dummy ) {
212 $this->
checkMessage(
"apihelp-{$path}-paraminfo-{$tag}",
"HELP_MSG_INFO tag $tag" );
216 foreach ( $module->getExamplesMessages()
as $qs => $msg ) {
217 $this->assertStringStartsNotWith(
'api.php?', $qs,
218 "Query string must not begin with 'api.php?'" );
230 foreach ( self::$testGlobals
as $globals ) {
232 foreach ( $globals
as $k => $v ) {
233 $g[] =
"$k=" . var_export( $v, 1 );
235 $k =
"Module $path with " . implode(
', ', $g );
250 $paramsPlain = $module->getFinalParams();
254 $this->assertTrue(
true );
256 if ( self::$constantNames ===
null ) {
257 self::$constantNames = [];
259 foreach ( (
new ReflectionClass(
'ApiBase' ) )->getConstants()
as $key => $val ) {
260 if ( substr( $key, 0, 6 ) ===
'PARAM_' ) {
261 self::$constantNames[$val] = $key;
266 foreach ( [ $paramsPlain, $paramsForHelp ]
as $params ) {
267 foreach (
$params as $param => $config ) {
268 if ( !is_array( $config ) ) {
277 foreach ( self::$paramTypes
as $key => $types ) {
278 if ( !isset( $config[$key] ) ) {
281 $keyName = self::$constantNames[$key];
282 $this->
validateType( $types, $config[$key], $param, $keyName );
285 foreach ( self::$paramRequirements
as $key => $required ) {
286 if ( !isset( $config[$key] ) ) {
289 foreach ( $required
as $requireKey => $requireVal ) {
290 $this->assertArrayHasKey( $requireKey, $config,
291 "$param: When " . self::$constantNames[$key] .
" is set, " .
292 self::$constantNames[$requireKey] .
" must also be set" );
293 if ( $requireVal !==
null ) {
294 $this->assertSame( $requireVal, $config[$requireKey],
295 "$param: When " . self::$constantNames[$key] .
" is set, " .
296 self::$constantNames[$requireKey] .
" must equal " .
297 var_export( $requireVal,
true ) );
302 foreach ( self::$paramAllowedTypes
as $key => $allowedTypes ) {
303 if ( !isset( $config[$key] ) ) {
310 $this->assertContains(
312 (
array)$allowedTypes,
313 "$param: " . self::$constantNames[$key] .
314 " can only be used with PARAM_TYPE " .
315 implode(
', ', (
array)$allowedTypes )
319 foreach ( self::$paramProhibitedTypes
as $key => $prohibitedTypes ) {
320 if ( !isset( $config[$key] ) ) {
327 $this->assertNotContains(
329 (
array)$prohibitedTypes,
330 "$param: " . self::$constantNames[$key] .
331 " cannot be used with PARAM_TYPE " .
332 implode(
', ', (
array)$prohibitedTypes )
340 "$param: A required parameter cannot have a default" );
349 "$param: PARAM_MAX and PARAM_MAX2 are required for limits"
351 $this->assertGreaterThanOrEqual(
354 "$param: PARAM_MAX cannot be greater than PARAM_MAX2"
362 $this->assertGreaterThanOrEqual(
365 "$param: PARAM_MIN cannot be greater than PARAM_MAX"
373 "$param: PARAM_RANGE_ENFORCE can only be set together with " .
374 "PARAM_MIN or PARAM_MAX"
381 "$param: Deprecated value \"$key\" is not allowed, " .
382 "how can it be deprecated?" );
391 "$param: PARAM_ISMULTI_LIMIT1 cannot be negative" );
395 "$param: PARAM_ISMULTI_LIMIT2 cannot be negative or zero" );
396 $this->assertGreaterThanOrEqual(
399 "$param: PARAM_ISMULTI limit cannot be smaller for users with " .
400 "apihighlimits rights" );
405 "$param: PARAM_MAX_BYTES cannot be negative or zero" );
410 "$param: PARAM_MAX_CHARS cannot be negative or zero" );
419 $this->assertGreaterThanOrEqual(
422 "$param: PARAM_MAX_BYTES cannot be less than PARAM_MAX_CHARS"
438 if (
count( $types ) === 1 ) {
440 if ( is_string( $types[0] ) ) {
444 $this->assertInternalType(
'array',
$value,
"$param: $desc type" );
446 $this->
validateType( $types[0], $subvalue, $param,
"$desc value" );
452 if ( is_string(
$type ) ) {
453 if ( class_exists(
$type ) || interface_exists(
$type ) ) {
468 }
catch ( Exception $unused ) {
473 $this->fail(
"$param: $desc has incorrect type" );
488 if ( $default ===
'' ) {
492 $defaults = explode(
'|', $default );
494 foreach ( $defaults
as $defaultValue ) {
497 if (
$type ===
'integer' && $defaultValue === (
string)(
int)$defaultValue ) {
498 $defaultValue = (int)$defaultValue;
507 $this->assertFalse( $default,
508 "$param: Boolean params may only default to false" );
512 $this->assertInternalType(
'integer', $default,
513 "$param: Default $default is not an integer" );
517 if ( $default ===
'max' ) {
520 $this->assertInternalType(
'integer', $default,
521 "$param: Default $default is neither an integer nor \"max\"" );
530 $validValues = array_merge(
535 $this->assertContains( $default, $validValues,
536 "$param: Default $default is not a valid namespace" );
545 $this->assertInternalType(
'string', $default,
546 "$param: Default $default is not a string" );
550 if ( $default ===
'now' ) {
553 $this->assertNotFalse(
wfTimestamp( TS_MW, $default ),
554 "$param: Default $default is not a valid timestamp" );
561 $wrapper = TestingAccessWrapper::newFromObject(
new ApiMain() );
563 $wrapper->validateUser( $default,
'' );
565 $this->fail(
"$param: Default $default is not a valid username/IP address" );
570 if ( is_array(
$type ) ) {
571 $this->assertContains( $default,
$type,
572 "$param: Default $default is not any of " .
573 implode(
', ',
$type ) );
575 $this->fail(
"Unrecognized type $type" );
604 $paths[] = $module->getModulePath();
605 $subManager = $module->getModuleManager();
607 $paths = array_merge( $paths, self::getSubModulePaths( $subManager ) );
This is the main API class, used for both external and internal processing.
const PARAM_SUBMODULE_MAP
(string[]) When PARAM_TYPE is 'submodule', map parameter values to submodule paths.
Exception used to abort API execution with an error.
getContext()
Get the base IContextSource object.
static getValidNamespaces()
Returns an array of the namespaces (by integer id) that exist on the wiki.
const PARAM_REQUIRED
(boolean) Is the parameter required?
Provides a fallback sequence for Config objects.
A Config instance which stores all settings as a member variable.
const PARAM_HELP_MSG
(string|array|Message) Specify an alternative i18n documentation message for this parameter.
const PARAM_ALL
(boolean|string) When PARAM_TYPE has a defined set of values and PARAM_ISMULTI is true,...
wfTimestamp( $outputtype=TS_UNIX, $ts=0)
Get a timestamp string in one of various formats.
const PARAM_TYPE
(string|string[]) Either an array of allowed value strings, or a string type as described below.
as see the revision history and available at free of to any person obtaining a copy of this software and associated documentation to deal in the Software without including without limitation the rights to use
static $paramAllowedTypes
static getMain()
Initialize/fetch the ApiMain instance for testing.
const PARAM_ISMULTI_LIMIT1
(integer) Maximum number of values, for normal users.
static makeMessage( $msg, IContextSource $context, array $params=null)
Create a Message from a string or array.
Allows to change the fields on the form that will be generated $name
const PARAM_ALLOW_DUPLICATES
(boolean) Allow the same value to be set more than once when PARAM_ISMULTI is true?
testParameterConsistency( $path)
provideParameterConsistency
const PARAM_DEPRECATED_VALUES
(array) When PARAM_TYPE is an array, this indicates which of the values are deprecated.
const PARAM_HELP_MSG_APPEND
((string|array|Message)[]) Specify additional i18n messages to append to the normal message for this ...
injection txt This is an overview of how MediaWiki makes use of dependency injection The design described here grew from the discussion of RFC T384 The term dependency this means that anything an object needs to operate should be injected from the the object itself should only know narrow no concrete implementation of the logic it relies on The requirement to inject everything typically results in an architecture that based on two main types of and essentially stateless service objects that use other service objects to operate on the value objects As of the beginning MediaWiki is only starting to use the DI approach Much of the code still relies on global state or direct resulting in a highly cyclical dependency which acts as the top level factory for services in MediaWiki which can be used to gain access to default instances of various services MediaWikiServices however also allows new services to be defined and default services to be redefined Services are defined or redefined by providing a callback the instantiator that will return a new instance of the service When it will create an instance of MediaWikiServices and populate it with the services defined in the files listed by thereby bootstrapping the DI framework Per $wgServiceWiringFiles lists includes ServiceWiring php
getModuleFromPath( $path)
Get a module from its module path.
static array $testGlobals
Sets of globals to test.
const PARAM_SENSITIVE
(boolean) Is the parameter sensitive? Note 'password'-type fields are always sensitive regardless of ...
static $paramProhibitedTypes
const PARAM_ISMULTI_LIMIT2
(integer) Maximum number of values, for users with the apihighimits right.
const PARAM_DEPRECATED
(boolean) Is the parameter deprecated (will show a warning)?
const PARAM_MIN
(integer) Lowest value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
static $paramRequirements
getModulePath()
Get the path to this module.
Checks that all API modules, core and extensions, conform to the conventions:
const PARAM_MAX
(integer) Max value allowed for the parameter, for PARAM_TYPE 'integer' and 'limit'.
getModuleManager()
Overrides to return this instance's module manager.
static makeTitle( $ns, $title, $fragment='', $interwiki='')
Create a new Title from a namespace index and a DB key.
const PARAM_EXTRA_NAMESPACES
(int[]) When PARAM_TYPE is 'namespace', include these as additional possible values.
getNames( $group=null)
Get an array of modules in a specific group or all if no group is set.
validateDefault( $param, $config)
Asserts that $default is a valid default for $type.
This class holds a list of modules and handles instantiation.
div flags Integer display flags(NO_ACTION_LINK, NO_EXTRA_USER_LINKS) 'LogException' returning false will NOT prevent logging $e
const GET_VALUES_FOR_HELP
getAllowedParams() flag: When set, the result could take longer to generate, but should be more thoro...
static getSubModulePaths(ApiModuleManager $manager)
Return paths of all submodules in an ApiModuleManager, recursively.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
const PARAM_HELP_MSG_INFO
(array) Specify additional information tags for the parameter.
static getMain()
Get the RequestContext object associated with the main request.
const PARAM_RANGE_ENFORCE
(boolean) For PARAM_TYPE 'integer', enforce PARAM_MIN and PARAM_MAX?
const PARAM_VALUE_LINKS
(string[]) When PARAM_TYPE is an array, this may be an array mapping those values to page titles whic...
static provideDocumentationExists()
static $paramTypes
Values are an array, where each array value is a permitted type.
validateType( $types, $value, $param, $desc)
Throws if $value does not match one of the types specified in $types.
checkMessage( $msg, $what)
Test a message.
const PARAM_DFLT
(null|boolean|integer|string) Default value of the parameter.
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
const PARAM_ISMULTI
(boolean) Accept multiple pipe-separated values for this parameter (e.g.
const PARAM_MAX2
(integer) Max value allowed for the parameter for users with the apihighlimits right,...
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return true
const PARAM_MAX_CHARS
(integer) Maximum length of a string in characters (unicode codepoints).
you have access to all of the normal MediaWiki so you can get a DB use the etc For full docs on the Maintenance class
static provideParameterConsistency()
testDocumentationExists( $path, array $globals)
provideDocumentationExists
getModule( $moduleName, $group=null, $ignoreCache=false)
Get module instance by name, or instantiate it if it does not exist.
const PARAM_HELP_MSG_PER_VALUE
((string|array|Message)[]) When PARAM_TYPE is an array, this is an array mapping those values to $msg...
const PARAM_SUBMODULE_PARAM_PREFIX
(string) When PARAM_TYPE is 'submodule', used to indicate the 'g' prefix added by ApiQueryGeneratorBa...
const PARAM_MAX_BYTES
(integer) Maximum length of a string in bytes (in UTF-8 encoding).
the array() calling protocol came about after MediaWiki 1.4rc1.