mirror of
https://github.com/Piwigo/Piwigo.git
synced 2025-04-27 11:49:56 +03:00
99 lines
2.4 KiB
PHP
99 lines
2.4 KiB
PHP
<?php
|
|
// +-----------------------------------------------------------------------+
|
|
// | This file is part of Piwigo. |
|
|
// | |
|
|
// | For copyright and license information, please view the COPYING.txt |
|
|
// | file that was distributed with this source code. |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
function xmlrpc_encode($data)
|
|
{
|
|
switch (gettype($data))
|
|
{
|
|
case 'boolean':
|
|
return '<boolean>'.($data ? '1' : '0').'</boolean>';
|
|
case 'integer':
|
|
return '<int>'.$data.'</int>';
|
|
case 'double':
|
|
return '<double>'.$data.'</double>';
|
|
case 'string':
|
|
return '<string>'.htmlspecialchars($data).'</string>';
|
|
case 'object':
|
|
case 'array':
|
|
$is_array = range(0, count($data) - 1) === array_keys($data);
|
|
if ($is_array)
|
|
{
|
|
$return = '<array><data>'."\n";
|
|
foreach ($data as $item)
|
|
{
|
|
$return .= ' <value>'.xmlrpc_encode($item)."</value>\n";
|
|
}
|
|
$return .= '</data></array>';
|
|
}
|
|
else
|
|
{
|
|
$return = '<struct>'."\n";
|
|
foreach ($data as $name => $value)
|
|
{
|
|
$name = htmlspecialchars($name);
|
|
$return .= " <member><name>$name</name><value>";
|
|
$return .= xmlrpc_encode($value)."</value></member>\n";
|
|
}
|
|
$return .= '</struct>';
|
|
}
|
|
return $return;
|
|
}
|
|
}
|
|
|
|
class PwgXmlRpcEncoder extends PwgResponseEncoder
|
|
{
|
|
function encodeResponse($response)
|
|
{
|
|
if ($response instanceof PwgError)
|
|
{
|
|
$code = $response->code();
|
|
$msg = htmlspecialchars($response->message());
|
|
$ret = <<<EOD
|
|
<methodResponse>
|
|
<fault>
|
|
<value>
|
|
<struct>
|
|
<member>
|
|
<name>faultCode</name>
|
|
<value><int>{$code}</int></value>
|
|
</member>
|
|
<member>
|
|
<name>faultString</name>
|
|
<value><string>{$msg}</string></value>
|
|
</member>
|
|
</struct>
|
|
</value>
|
|
</fault>
|
|
</methodResponse>
|
|
EOD;
|
|
return $ret;
|
|
}
|
|
|
|
parent::flattenResponse($response);
|
|
$ret = xmlrpc_encode($response);
|
|
$ret = <<<EOD
|
|
<methodResponse>
|
|
<params>
|
|
<param>
|
|
<value>
|
|
$ret
|
|
</value>
|
|
</param>
|
|
</params>
|
|
</methodResponse>
|
|
EOD;
|
|
return $ret;
|
|
}
|
|
|
|
function getContentType()
|
|
{
|
|
return 'text/xml';
|
|
}
|
|
}
|
|
|
|
?>
|