X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiFormatWddx.php;h=117f2225d7e0e5d7392979c43312b4300ccabeb7;hb=3758769f0d2b244b113714da012dc1ceb95d0e22;hp=b717ef2d7ea4aa077140a074f42ebcdafcc3ccf8;hpb=b3d5508c103d50dbffc743d5c6efed505038d583;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php index b717ef2d7e..117f2225d7 100644 --- a/includes/api/ApiFormatWddx.php +++ b/includes/api/ApiFormatWddx.php @@ -23,9 +23,9 @@ * http://www.gnu.org/copyleft/gpl.html */ -if (!defined('MEDIAWIKI')) { +if ( !defined( 'MEDIAWIKI' ) ) { // Eclipse helper - will be ignored in production - require_once ('ApiFormatBase.php'); + require_once ( 'ApiFormatBase.php' ); } /** @@ -33,8 +33,8 @@ if (!defined('MEDIAWIKI')) { */ class ApiFormatWddx extends ApiFormatBase { - public function __construct($main, $format) { - parent :: __construct($main, $format); + public function __construct( $main, $format ) { + parent :: __construct( $main, $format ); } public function getMimeType() { @@ -42,65 +42,71 @@ class ApiFormatWddx extends ApiFormatBase { } public function execute() { - if (function_exists('wddx_serialize_value') && !$this->getIsHtml()) { - $this->printText(wddx_serialize_value($this->getResultData())); + // Some versions of PHP have a broken wddx_serialize_value, see + // PHP bug 45314. Test encoding an affected character (U+00A0) + // to avoid this. + $expected = "
\xc2\xa0"; + if ( function_exists( 'wddx_serialize_value' ) + && !$this->getIsHtml() + && wddx_serialize_value( "\xc2\xa0" ) == $expected ) { + $this->printText( wddx_serialize_value( $this->getResultData() ) ); } 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("$nl"); - $this->printText("$nl"); - $this->printText("$indstr
$nl"); - $this->printText("$indstr$nl"); - $this->slowWddxPrinter($this->getResultData(), 4); - $this->printText("$indstr$nl"); - $this->printText("$nl"); + $this->printText( "$nl" ); + $this->printText( "$nl" ); + $this->printText( "$indstr
$nl" ); + $this->printText( "$indstr$nl" ); + $this->slowWddxPrinter( $this->getResultData(), 4 ); + $this->printText( "$indstr$nl" ); + $this->printText( "$nl" ); } } /** - * Recursivelly go through the object and output its data in WDDX format. - */ - 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)) { + * Recursively go through the object and output its data in WDDX format. + */ + 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 () // or a regular array () - $cnt = count($elemValue); - if($cnt == 0 || array_keys($elemValue) === range(0, $cnt - 1)) { + $cnt = count( $elemValue ); + if ( $cnt == 0 || array_keys( $elemValue ) === range( 0, $cnt - 1 ) ) { // Regular array - $this->printText($indstr . wfElement('array', array( + $this->printText( $indstr . Xml::element( 'array', array( 'length' => $cnt - ), null) . $nl); - foreach($elemValue as $subElemValue) - $this->slowWddxPrinter($subElemValue, $indent + 2); - $this->printText("$indstr$nl"); + ), null ) . $nl ); + foreach ( $elemValue as $subElemValue ) + $this->slowWddxPrinter( $subElemValue, $indent + 2 ); + $this->printText( "$indstr$nl" ); } else { // Associative array () - $this->printText("$indstr$nl"); - foreach($elemValue as $subElemName => $subElemValue) { - $this->printText($indstr2 . wfElement('var', array( + $this->printText( "$indstr$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$nl"); + ), null ) . $nl ); + $this->slowWddxPrinter( $subElemValue, $indent + 4 ); + $this->printText( "$indstr2$nl" ); } - $this->printText("$indstr$nl"); + $this->printText( "$indstr$nl" ); } break; case 'integer' : case 'double' : - $this->printText($indstr . wfElement('number', null, $elemValue) . $nl); + $this->printText( $indstr . Xml::element( 'number', null, $elemValue ) . $nl ); break; case 'string' : - $this->printText($indstr . wfElement('string', null, $elemValue) . $nl); + $this->printText( $indstr . Xml::element( 'string', null, $elemValue ) . $nl ); break; default : - ApiBase :: dieDebug(__METHOD__, 'Unknown type ' . gettype($elemValue)); + ApiBase :: dieDebug( __METHOD__, 'Unknown type ' . gettype( $elemValue ) ); } }