| | <?php |
| | |
| | |
| | |
| | |
| | |
| | |
| | class IXR_Value { |
| | var $data; |
| | var $type; |
| |
|
| | |
| | |
| | |
| | function __construct( $data, $type = false ) |
| | { |
| | $this->data = $data; |
| | if (!$type) { |
| | $type = $this->calculateType(); |
| | } |
| | $this->type = $type; |
| | if ($type == 'struct') { |
| | |
| | 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]); |
| | } |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | 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'; |
| | } |
| |
|
| | |
| | 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 (is_object($this->data)) { |
| | $this->data = get_object_vars($this->data); |
| | return 'struct'; |
| | } |
| | if (!is_array($this->data)) { |
| | return 'string'; |
| | } |
| |
|
| | |
| | if ($this->isStruct($this->data)) { |
| | return 'struct'; |
| | } else { |
| | return 'array'; |
| | } |
| | } |
| |
|
| | function getXml() |
| | { |
| | |
| | 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; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | function isStruct($array) |
| | { |
| | $expected = 0; |
| | foreach ($array as $key => $value) { |
| | if ((string)$key !== (string)$expected) { |
| | return true; |
| | } |
| | $expected++; |
| | } |
| | return false; |
| | } |
| | } |
| |
|