MediaWiki
REL1_37
ApiFormatJson.php
Go to the documentation of this file.
1
<?php
27
class
ApiFormatJson
extends
ApiFormatBase
{
28
29
private
$isRaw
;
30
31
public
function
__construct
(
ApiMain
$main, $format ) {
32
parent::__construct( $main, $format );
33
$this->isRaw = ( $format ===
'rawfm'
);
34
35
if
( $this->
getMain
()->getCheck(
'callback'
) ) {
36
# T94015: jQuery appends a useless '_' parameter in jsonp mode.
37
# Mark the parameter as used in that case to avoid a warning that's
38
# outside the control of the end user.
39
# (and do it here because ApiMain::reportUnusedParams() gets called
40
# before our ::execute())
41
$this->
getMain
()->markParamsUsed(
'_'
);
42
}
43
}
44
45
public
function
getMimeType
() {
46
$params = $this->
extractRequestParams
();
47
// callback:
48
if
( isset( $params[
'callback'
] ) ) {
49
return
'text/javascript'
;
50
}
51
52
return
'application/json'
;
53
}
54
55
public
function
execute
() {
56
$params = $this->
extractRequestParams
();
57
58
$opt = 0;
59
if
( $this->isRaw ) {
60
$opt |= FormatJson::ALL_OK;
61
$transform = [];
62
}
else
{
63
switch
( $params[
'formatversion'
] ) {
64
case
1:
65
$opt |= $params[
'utf8'
] ? FormatJson::ALL_OK : FormatJson::XMLMETA_OK;
66
$transform = [
67
'BC'
=> [],
68
'Types'
=> [
'AssocAsObject'
=>
true
],
69
'Strip'
=>
'all'
,
70
];
71
break
;
72
73
case
2:
74
case
'latest'
:
75
$opt |= $params[
'ascii'
] ? FormatJson::XMLMETA_OK : FormatJson::ALL_OK;
76
$transform = [
77
'Types'
=> [
'AssocAsObject'
=>
true
],
78
'Strip'
=>
'all'
,
79
];
80
break
;
81
82
default
:
83
// Should have been caught during parameter validation
84
// @codeCoverageIgnoreStart
85
$this->
dieDebug
( __METHOD__,
'Unknown value for \'formatversion\''
);
86
// @codeCoverageIgnoreEnd
87
}
88
}
89
$data = $this->
getResult
()->getResultData(
null
, $transform );
90
$json = FormatJson::encode( $data, $this->
getIsHtml
(), $opt );
91
if
( $json ===
false
) {
92
// This should never happen, but it's a bug which could crop up
93
// if you use ApiResult::NO_VALIDATE for instance.
94
// @codeCoverageIgnoreStart
95
$this->
dieDebug
( __METHOD__,
'Unable to encode API result as JSON'
);
96
// @codeCoverageIgnoreEnd
97
}
98
99
// T68776: OutputHandler::mangleFlashPolicy() avoids a nasty bug in
100
// Flash, but what it does isn't friendly for the API, so we need to
101
// work around it.
102
if
( preg_match(
'/<\s*cross-domain-policy(?=\s|>)/i'
, $json ) ) {
103
$json = preg_replace(
104
'/<(\s*cross-domain-policy(?=\s|>))/i'
,
'\\u003C$1'
, $json
105
);
106
}
107
108
if
( isset( $params[
'callback'
] ) ) {
109
$callback = preg_replace(
"/[^][.\\'\\\"_A-Za-z0-9]/"
,
''
, $params[
'callback'
] );
110
# Prepend a comment to try to avoid attacks against content
111
# sniffers, such as T70187.
112
$this->
printText
(
"/**/$callback($json)"
);
113
}
else
{
114
$this->
printText
( $json );
115
}
116
}
117
118
public
function
getAllowedParams
() {
119
if
( $this->isRaw ) {
120
return
parent::getAllowedParams();
121
}
122
123
return
parent::getAllowedParams() + [
124
'callback'
=> [
125
ApiBase::PARAM_HELP_MSG
=>
'apihelp-json-param-callback'
,
126
],
127
'utf8'
=> [
128
ApiBase::PARAM_DFLT
=>
false
,
129
ApiBase::PARAM_HELP_MSG
=>
'apihelp-json-param-utf8'
,
130
],
131
'ascii'
=> [
132
ApiBase::PARAM_DFLT
=>
false
,
133
ApiBase::PARAM_HELP_MSG
=>
'apihelp-json-param-ascii'
,
134
],
135
'formatversion'
=> [
136
ApiBase::PARAM_TYPE
=> [
'1'
,
'2'
,
'latest'
],
137
ApiBase::PARAM_DFLT
=>
'1'
,
138
ApiBase::PARAM_HELP_MSG
=>
'apihelp-json-param-formatversion'
,
139
ApiBase::PARAM_HELP_MSG_PER_VALUE
=> [],
140
],
141
];
142
}
143
}
ApiBase\dieDebug
static dieDebug( $method, $message)
Internal code errors should be reported with this method.
Definition
ApiBase.php:1633
ApiBase\getMain
getMain()
Get the main module.
Definition
ApiBase.php:513
ApiBase\PARAM_TYPE
const PARAM_TYPE
Definition
ApiBase.php:81
ApiBase\PARAM_DFLT
const PARAM_DFLT
Definition
ApiBase.php:73
ApiBase\PARAM_HELP_MSG_PER_VALUE
const PARAM_HELP_MSG_PER_VALUE
((string|array|Message)[]) When PARAM_TYPE is an array, this is an array mapping those values to $msg...
Definition
ApiBase.php:195
ApiBase\getResult
getResult()
Get the result object.
Definition
ApiBase.php:628
ApiBase\extractRequestParams
extractRequestParams( $options=[])
Using getAllowedParams(), this function makes an array of the values provided by the user,...
Definition
ApiBase.php:764
ApiBase\PARAM_HELP_MSG
const PARAM_HELP_MSG
(string|array|Message) Specify an alternative i18n documentation message for this parameter.
Definition
ApiBase.php:162
ApiFormatBase
This is the abstract base class for API formatters.
Definition
ApiFormatBase.php:30
ApiFormatBase\printText
printText( $text)
Append text to the output buffer.
Definition
ApiFormatBase.php:348
ApiFormatBase\getIsHtml
getIsHtml()
Returns true when the HTML pretty-printer should be used.
Definition
ApiFormatBase.php:99
ApiFormatJson
API JSON output formatter.
Definition
ApiFormatJson.php:27
ApiFormatJson\$isRaw
$isRaw
Definition
ApiFormatJson.php:29
ApiFormatJson\getMimeType
getMimeType()
Overriding class returns the MIME type that should be sent to the client.
Definition
ApiFormatJson.php:45
ApiFormatJson\__construct
__construct(ApiMain $main, $format)
If $format ends with 'fm', pretty-print the output in HTML.
Definition
ApiFormatJson.php:31
ApiFormatJson\getAllowedParams
getAllowedParams()
Returns an array of allowed parameters (parameter name) => (default value) or (parameter name) => (ar...
Definition
ApiFormatJson.php:118
ApiFormatJson\execute
execute()
Evaluates the parameters, performs the requested query, and sets up the result.
Definition
ApiFormatJson.php:55
ApiMain
This is the main API class, used for both external and internal processing.
Definition
ApiMain.php:49
true
return true
Definition
router.php:92
includes
api
ApiFormatJson.php
Generated on Fri Apr 5 2024 23:39:58 for MediaWiki by
1.9.8