You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.8 KiB
119 lines
3.8 KiB
<?php |
|
/* |
|
IXR - The Inutio XML-RPC Library - (c) Incutio Ltd 2002 |
|
Version 1.61 - Simon Willison, 11th July 2003 (htmlentities -> htmlspecialchars) |
|
Site: http://scripts.incutio.com/xmlrpc/ |
|
Manual: http://scripts.incutio.com/xmlrpc/manual.php |
|
Made available under the Artistic License: http://www.opensource.org/licenses/artistic-license.php |
|
*/ |
|
|
|
/** |
|
* IXR值 |
|
* |
|
* @package IXR |
|
*/ |
|
class IXR_Value { |
|
var $data; |
|
var $type; |
|
function IXR_Value ($data, $type = false) { |
|
$this->data = $data; |
|
if (!$type) { |
|
$type = $this->calculateType(); |
|
} |
|
$this->type = $type; |
|
if ($type == 'struct') { |
|
/* Turn all the values in the array in to new IXR_Value objects */ |
|
foreach ($this->data as $key => $value) { |
|
$this->data[$key] = new IXR_Value($value); |
|
} |
|
} |
|
if ($type == 'array') { |
|
for ($i = 0, $j = count($this->data); $i < $j; $i++) { |
|
$this->data[$i] = new IXR_Value($this->data[$i]); |
|
} |
|
} |
|
} |
|
function calculateType() { |
|
if ($this->data === true || $this->data === false) { |
|
return 'boolean'; |
|
} |
|
if (is_integer($this->data)) { |
|
return 'int'; |
|
} |
|
if (is_double($this->data)) { |
|
return 'double'; |
|
} |
|
// Deal with IXR object types base64 and date |
|
if (is_object($this->data) && is_a($this->data, 'IXR_Date')) { |
|
return 'date'; |
|
} |
|
if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) { |
|
return 'base64'; |
|
} |
|
// If it is a normal PHP object convert it in to a struct |
|
if (is_object($this->data)) { |
|
|
|
$this->data = get_object_vars($this->data); |
|
return 'struct'; |
|
} |
|
if (!is_array($this->data)) { |
|
return 'string'; |
|
} |
|
/* We have an array - is it an array or a struct ? */ |
|
if ($this->isStruct($this->data)) { |
|
return 'struct'; |
|
} else { |
|
return 'array'; |
|
} |
|
} |
|
function getXml() { |
|
/* Return XML for this value */ |
|
switch ($this->type) { |
|
case 'boolean': |
|
return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>'; |
|
break; |
|
case 'int': |
|
return '<int>'.$this->data.'</int>'; |
|
break; |
|
case 'double': |
|
return '<double>'.$this->data.'</double>'; |
|
break; |
|
case 'string': |
|
return '<string>'.htmlspecialchars($this->data).'</string>'; |
|
break; |
|
case 'array': |
|
$return = '<array><data>'."\n"; |
|
foreach ($this->data as $item) { |
|
$return .= ' <value>'.$item->getXml()."</value>\n"; |
|
} |
|
$return .= '</data></array>'; |
|
return $return; |
|
break; |
|
case 'struct': |
|
$return = '<struct>'."\n"; |
|
foreach ($this->data as $name => $value) { |
|
$return .= " <member><name>$name</name><value>"; |
|
$return .= $value->getXml()."</value></member>\n"; |
|
} |
|
$return .= '</struct>'; |
|
return $return; |
|
break; |
|
case 'date': |
|
case 'base64': |
|
return $this->data->getXml(); |
|
break; |
|
} |
|
return false; |
|
} |
|
function isStruct($array) { |
|
/* Nasty function to check if an array is a struct or not */ |
|
$expected = 0; |
|
foreach ($array as $key => $value) { |
|
if ((string)$key != (string)$expected) { |
|
return true; |
|
} |
|
$expected++; |
|
} |
|
return false; |
|
} |
|
}
|
|
|