Fix WDDX formatted output
authorBrad Jorsch <bjorsch@wikimedia.org>
Mon, 18 Mar 2013 18:43:49 +0000 (14:43 -0400)
committerBrad Jorsch <bjorsch@wikimedia.org>
Mon, 18 Mar 2013 18:47:44 +0000 (14:47 -0400)
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.

Change-Id: I719d84c59cf25e5de6fcd6e914a50e4ba8938899

RELEASE-NOTES-1.21
includes/api/ApiFormatWddx.php

index 295eb7b..fce42ff 100644 (file)
@@ -205,6 +205,8 @@ production.
 * (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.
index 884a1dc..5685d93 100644 (file)
@@ -46,7 +46,7 @@ class ApiFormatWddx extends ApiFormatBase {
                } 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,9 +64,9 @@ class ApiFormatWddx extends ApiFormatBase {
         * @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" );
+               $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>)
@@ -95,6 +95,10 @@ class ApiFormatWddx extends ApiFormatBase {
                        $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 ) );
                }