diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2009-02-22 13:37:51 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2009-02-22 13:37:51 +0100 |
commit | b9b85843572bf283f48285001e276ba7e61b63f6 (patch) | |
tree | 4c6f4571552ada9ccfb4030481dcf77308f8b254 /includes/api/ApiFormatWddx.php | |
parent | d9a20acc4e789cca747ad360d87ee3f3e7aa58c1 (diff) |
updated to MediaWiki 1.14.0
Diffstat (limited to 'includes/api/ApiFormatWddx.php')
-rw-r--r-- | includes/api/ApiFormatWddx.php | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/includes/api/ApiFormatWddx.php b/includes/api/ApiFormatWddx.php index 0909539e..e741c16d 100644 --- a/includes/api/ApiFormatWddx.php +++ b/includes/api/ApiFormatWddx.php @@ -42,38 +42,62 @@ class ApiFormatWddx extends ApiFormatBase { } public function execute() { - if (function_exists('wddx_serialize_value')) { + if (function_exists('wddx_serialize_value') && !$this->getIsHtml()) { $this->printText(wddx_serialize_value($this->getResultData())); } else { - $this->printText('<?xml version="1.0" encoding="utf-8"?>'); - $this->printText('<wddxPacket version="1.0"><header/><data>'); - $this->slowWddxPrinter($this->getResultData()); - $this->printText('</data></wddxPacket>'); + // Don't do newlines and indentation if we weren't asked + // for pretty output + $nl = ($this->getIsHtml() ? "" : "\n"); + $indstr = " "; + $this->printText("<?xml version=\"1.0\"?>$nl"); + $this->printText("<wddxPacket version=\"1.0\">$nl"); + $this->printText("$indstr<header/>$nl"); + $this->printText("$indstr<data>$nl"); + $this->slowWddxPrinter($this->getResultData(), 4); + $this->printText("$indstr</data>$nl"); + $this->printText("</wddxPacket>$nl"); } } /** * Recursivelly go through the object and output its data in WDDX format. */ - function slowWddxPrinter($elemValue) { + 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' : - $this->printText('<struct>'); - foreach ($elemValue as $subElemName => $subElemValue) { - $this->printText(wfElement('var', array ( - 'name' => $subElemName - ), null)); - $this->slowWddxPrinter($subElemValue); - $this->printText('</var>'); + // 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"); } - $this->printText('</struct>'); break; case 'integer' : case 'double' : - $this->printText(wfElement('number', null, $elemValue)); + $this->printText($indstr . Xml::element('number', null, $elemValue) . $nl); break; case 'string' : - $this->printText(wfElement('string', null, $elemValue)); + $this->printText($indstr . Xml::element('string', null, $elemValue) . $nl); break; default : ApiBase :: dieDebug(__METHOD__, 'Unknown type ' . gettype($elemValue)); @@ -85,6 +109,6 @@ class ApiFormatWddx extends ApiFormatBase { } public function getVersion() { - return __CLASS__ . ': $Id: ApiFormatWddx.php 35098 2008-05-20 17:13:28Z ialex $'; + return __CLASS__ . ': $Id: ApiFormatWddx.php 44588 2008-12-14 19:14:21Z demon $'; } } |