PleaseStand has uploaded a new change for review.
https://gerrit.wikimedia.org/r/59643
Change subject: Fix WDDX formatted output
......................................................................
Fix WDDX formatted output
WDDX formatted output was blowing up if a boolean crept into the result
data.
Also, the tests for "isHtml" were backwards, so it was inserting the
whitespaces for the unformatted output and leaving them out for the
formatted output.
Conflicts:
includes/api/ApiFormatWddx.php
Change-Id: I719d84c59cf25e5de6fcd6e914a50e4ba8938899
---
M RELEASE-NOTES-1.21
M includes/api/ApiFormatWddx.php
2 files changed, 39 insertions(+), 38 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core
refs/changes/43/59643/1
diff --git a/RELEASE-NOTES-1.21 b/RELEASE-NOTES-1.21
index 43df957..d5f37aa 100644
--- a/RELEASE-NOTES-1.21
+++ b/RELEASE-NOTES-1.21
@@ -211,6 +211,8 @@
* (bug 45143) jquery.badge: Treat non-Latin variants of zero as zero as well.
* (bug 46151) mwdocgen.php should not ignore exit code of doxygen command.
* (bug 41889) Fix $.tablesorter rowspan exploding for complex cases.
+* WDDX formatted output will actually be formatted (and normal output will no
+ longer be), and will no longer choke on booleans.
=== API changes in 1.21 ===
* prop=revisions can now report the contentmodel and contentformat.
diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php
index 62b69bb..5685d93 100644
--- a/includes/api/ApiFormatWddx.php
+++ b/includes/api/ApiFormatWddx.php
@@ -46,7 +46,7 @@
} else {
// Don't do newlines and indentation if we weren't asked
// for pretty output
- $nl = ( $this->getIsHtml() ? '' : "\n" );
+ $nl = ( $this->getIsHtml() ? "\n" : '' );
$indstr = ' ';
$this->printText( "<?xml version=\"1.0\"?>$nl" );
$this->printText( "<wddxPacket version=\"1.0\">$nl" );
@@ -64,44 +64,43 @@
* @param $indent int
*/
function slowWddxPrinter( $elemValue, $indent = 0 ) {
- $indstr = ( $this->getIsHtml() ? '' : str_repeat( ' ', $indent
) );
- $indstr2 = ( $this->getIsHtml() ? '' : str_repeat( ' ', $indent
+ 2 ) );
- $nl = ( $this->getIsHtml() ? '' : "\n" );
- switch ( gettype( $elemValue ) ) {
- case 'array':
- // Check whether we've got an associative array
(<struct>)
- // or a regular array (<array>)
- $cnt = count( $elemValue );
- if ( $cnt == 0 || array_keys( $elemValue ) ===
range( 0, $cnt - 1 ) ) {
- // Regular array
- $this->printText( $indstr .
Xml::element( 'array', array(
- 'length' => $cnt ), null ) .
$nl );
- foreach ( $elemValue as $subElemValue )
{
- $this->slowWddxPrinter(
$subElemValue, $indent + 2 );
- }
- $this->printText( "$indstr</array>$nl"
);
- } else {
- // Associative array (<struct>)
- $this->printText( "$indstr<struct>$nl"
);
- foreach ( $elemValue as $subElemName =>
$subElemValue ) {
- $this->printText( $indstr2 .
Xml::element( 'var', array(
- 'name' => $subElemName
- ), null ) . $nl );
- $this->slowWddxPrinter(
$subElemValue, $indent + 4 );
- $this->printText(
"$indstr2</var>$nl" );
- }
- $this->printText( "$indstr</struct>$nl"
);
+ $indstr = ( $this->getIsHtml() ? str_repeat( ' ', $indent ) :
'' );
+ $indstr2 = ( $this->getIsHtml() ? str_repeat( ' ', $indent + 2
) : '' );
+ $nl = ( $this->getIsHtml() ? "\n" : '' );
+ if ( is_array( $elemValue ) ) {
+ // Check whether we've got an associative array
(<struct>)
+ // or a regular array (<array>)
+ $cnt = count( $elemValue );
+ if ( $cnt == 0 || array_keys( $elemValue ) === range(
0, $cnt - 1 ) ) {
+ // Regular array
+ $this->printText( $indstr . Xml::element(
'array', array(
+ 'length' => $cnt ), null ) . $nl );
+ foreach ( $elemValue as $subElemValue ) {
+ $this->slowWddxPrinter( $subElemValue,
$indent + 2 );
}
- break;
- case 'integer':
- case 'double':
- $this->printText( $indstr . Xml::element(
'number', null, $elemValue ) . $nl );
- break;
- case 'string':
- $this->printText( $indstr . Xml::element(
'string', null, $elemValue ) . $nl );
- break;
- default:
- ApiBase::dieDebug( __METHOD__, 'Unknown type '
. gettype( $elemValue ) );
+ $this->printText( "$indstr</array>$nl" );
+ } else {
+ // Associative array (<struct>)
+ $this->printText( "$indstr<struct>$nl" );
+ foreach ( $elemValue as $subElemName =>
$subElemValue ) {
+ $this->printText( $indstr2 .
Xml::element( 'var', array(
+ 'name' => $subElemName
+ ), null ) . $nl );
+ $this->slowWddxPrinter( $subElemValue,
$indent + 4 );
+ $this->printText( "$indstr2</var>$nl" );
+ }
+ $this->printText( "$indstr</struct>$nl" );
+ }
+ } elseif ( is_int( $elemValue ) || is_float( $elemValue ) ) {
+ $this->printText( $indstr . Xml::element( 'number',
null, $elemValue ) . $nl );
+ } elseif ( is_string( $elemValue ) ) {
+ $this->printText( $indstr . Xml::element( 'string',
null, $elemValue ) . $nl );
+ } elseif ( is_bool( $elemValue ) ) {
+ $this->printText( $indstr . Xml::element( 'boolean',
+ array( 'value' => $elemValue ? 'true' : 'false'
) ) . $nl
+ );
+ } else {
+ ApiBase::dieDebug( __METHOD__, 'Unknown type ' .
gettype( $elemValue ) );
}
}
--
To view, visit https://gerrit.wikimedia.org/r/59643
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I719d84c59cf25e5de6fcd6e914a50e4ba8938899
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: REL1_21
Gerrit-Owner: PleaseStand <[email protected]>
Gerrit-Reviewer: Anomie <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits