Spaces:
Sleeping
Sleeping
/** | |
* IXR_Value | |
* | |
* @package IXR | |
* @since 1.5.0 | |
*/ | |
class IXR_Value { | |
var $data; | |
var $type; | |
/** | |
* PHP5 constructor. | |
*/ | |
function __construct( $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]); | |
} | |
} | |
} | |
/** | |
* PHP4 constructor. | |
*/ | |
public function IXR_Value( $data, $type = false ) { | |
self::__construct( $data, $type ); | |
} | |
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) { | |
$name = htmlspecialchars($name); | |
$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; | |
} | |
/** | |
* Checks whether or not the supplied array is a struct or not | |
* | |
* @param array $array | |
* @return bool | |
*/ | |
function isStruct($array) | |
{ | |
$expected = 0; | |
foreach ($array as $key => $value) { | |
if ((string)$key !== (string)$expected) { | |
return true; | |
} | |
$expected++; | |
} | |
return false; | |
} | |
} | |