|
- <?php
- /**
- * 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;
- }
- }
|