]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/api/ApiFormatWddx.php
MediaWiki 1.14.0
[autoinstalls/mediawiki.git] / includes / api / ApiFormatWddx.php
1 <?php
2
3 /*
4  * Created on Oct 22, 2006
5  *
6  * API for MediaWiki 1.8+
7  *
8  * Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program; if not, write to the Free Software Foundation, Inc.,
22  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23  * http://www.gnu.org/copyleft/gpl.html
24  */
25
26 if (!defined('MEDIAWIKI')) {
27         // Eclipse helper - will be ignored in production
28         require_once ('ApiFormatBase.php');
29 }
30
31 /**
32  * @ingroup API
33  */
34 class ApiFormatWddx extends ApiFormatBase {
35
36         public function __construct($main, $format) {
37                 parent :: __construct($main, $format);
38         }
39
40         public function getMimeType() {
41                 return 'text/xml';
42         }
43
44         public function execute() {
45                 if (function_exists('wddx_serialize_value') && !$this->getIsHtml()) {
46                         $this->printText(wddx_serialize_value($this->getResultData()));
47                 } else {
48                         // Don't do newlines and indentation if we weren't asked
49                         // for pretty output
50                         $nl = ($this->getIsHtml() ? "" : "\n");
51                         $indstr = " ";
52                         $this->printText("<?xml version=\"1.0\"?>$nl");
53                         $this->printText("<wddxPacket version=\"1.0\">$nl");
54                         $this->printText("$indstr<header/>$nl");
55                         $this->printText("$indstr<data>$nl");
56                         $this->slowWddxPrinter($this->getResultData(), 4);
57                         $this->printText("$indstr</data>$nl");
58                         $this->printText("</wddxPacket>$nl");
59                 }
60         }
61
62         /**
63         * Recursivelly go through the object and output its data in WDDX format.
64         */
65         function slowWddxPrinter($elemValue, $indent = 0) {
66                 $indstr = ($this->getIsHtml() ? "" : str_repeat(' ', $indent));
67                 $indstr2 = ($this->getIsHtml() ? "" : str_repeat(' ', $indent + 2));
68                 $nl = ($this->getIsHtml() ? "" : "\n");
69                 switch (gettype($elemValue)) {
70                         case 'array' :
71                                 // Check whether we've got an associative array (<struct>)
72                                 // or a regular array (<array>)
73                                 $cnt = count($elemValue);
74                                 if($cnt == 0 || array_keys($elemValue) === range(0, $cnt - 1)) {
75                                         // Regular array
76                                         $this->printText($indstr . Xml::element('array', array(
77                                                 'length' => $cnt
78                                         ), null) . $nl);
79                                         foreach($elemValue as $subElemValue)
80                                                 $this->slowWddxPrinter($subElemValue, $indent + 2);
81                                         $this->printText("$indstr</array>$nl");
82                                 } else {
83                                         // Associative array (<struct>)
84                                         $this->printText("$indstr<struct>$nl");
85                                         foreach($elemValue as $subElemName => $subElemValue) {
86                                                 $this->printText($indstr2 . Xml::element('var', array(
87                                                         'name' => $subElemName
88                                                 ), null) . $nl);
89                                                 $this->slowWddxPrinter($subElemValue, $indent + 4);
90                                                 $this->printText("$indstr2</var>$nl");
91                                         }
92                                         $this->printText("$indstr</struct>$nl");
93                                 }
94                                 break;
95                         case 'integer' :
96                         case 'double' :
97                                 $this->printText($indstr . Xml::element('number', null, $elemValue) . $nl);
98                                 break;
99                         case 'string' :
100                                 $this->printText($indstr . Xml::element('string', null, $elemValue) . $nl);
101                                 break;
102                         default :
103                                 ApiBase :: dieDebug(__METHOD__, 'Unknown type ' . gettype($elemValue));
104                 }
105         }
106
107         public function getDescription() {
108                 return 'Output data in WDDX format' . parent :: getDescription();
109         }
110
111         public function getVersion() {
112                 return __CLASS__ . ': $Id: ApiFormatWddx.php 44588 2008-12-14 19:14:21Z demon $';
113         }
114 }