angelovcom.net

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

class-IXR-value.php (3790B)


      1 <?php
      2 /**
      3  * IXR_Value
      4  *
      5  * @package IXR
      6  * @since 1.5.0
      7  */
      8 class IXR_Value {
      9     var $data;
     10     var $type;
     11 
     12 	/**
     13 	 * PHP5 constructor.
     14 	 */
     15 	function __construct( $data, $type = false )
     16     {
     17         $this->data = $data;
     18         if (!$type) {
     19             $type = $this->calculateType();
     20         }
     21         $this->type = $type;
     22         if ($type == 'struct') {
     23             // Turn all the values in the array in to new IXR_Value objects
     24             foreach ($this->data as $key => $value) {
     25                 $this->data[$key] = new IXR_Value($value);
     26             }
     27         }
     28         if ($type == 'array') {
     29             for ($i = 0, $j = count($this->data); $i < $j; $i++) {
     30                 $this->data[$i] = new IXR_Value($this->data[$i]);
     31             }
     32         }
     33     }
     34 
     35 	/**
     36 	 * PHP4 constructor.
     37 	 */
     38 	public function IXR_Value( $data, $type = false ) {
     39 		self::__construct( $data, $type );
     40 	}
     41 
     42     function calculateType()
     43     {
     44         if ($this->data === true || $this->data === false) {
     45             return 'boolean';
     46         }
     47         if (is_integer($this->data)) {
     48             return 'int';
     49         }
     50         if (is_double($this->data)) {
     51             return 'double';
     52         }
     53 
     54         // Deal with IXR object types base64 and date
     55         if (is_object($this->data) && is_a($this->data, 'IXR_Date')) {
     56             return 'date';
     57         }
     58         if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) {
     59             return 'base64';
     60         }
     61 
     62         // If it is a normal PHP object convert it in to a struct
     63         if (is_object($this->data)) {
     64             $this->data = get_object_vars($this->data);
     65             return 'struct';
     66         }
     67         if (!is_array($this->data)) {
     68             return 'string';
     69         }
     70 
     71         // We have an array - is it an array or a struct?
     72         if ($this->isStruct($this->data)) {
     73             return 'struct';
     74         } else {
     75             return 'array';
     76         }
     77     }
     78 
     79     function getXml()
     80     {
     81         // Return XML for this value
     82         switch ($this->type) {
     83             case 'boolean':
     84                 return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>';
     85                 break;
     86             case 'int':
     87                 return '<int>'.$this->data.'</int>';
     88                 break;
     89             case 'double':
     90                 return '<double>'.$this->data.'</double>';
     91                 break;
     92             case 'string':
     93                 return '<string>'.htmlspecialchars($this->data).'</string>';
     94                 break;
     95             case 'array':
     96                 $return = '<array><data>'."\n";
     97                 foreach ($this->data as $item) {
     98                     $return .= '  <value>'.$item->getXml()."</value>\n";
     99                 }
    100                 $return .= '</data></array>';
    101                 return $return;
    102                 break;
    103             case 'struct':
    104                 $return = '<struct>'."\n";
    105                 foreach ($this->data as $name => $value) {
    106 					$name = htmlspecialchars($name);
    107                     $return .= "  <member><name>$name</name><value>";
    108                     $return .= $value->getXml()."</value></member>\n";
    109                 }
    110                 $return .= '</struct>';
    111                 return $return;
    112                 break;
    113             case 'date':
    114             case 'base64':
    115                 return $this->data->getXml();
    116                 break;
    117         }
    118         return false;
    119     }
    120 
    121     /**
    122      * Checks whether or not the supplied array is a struct or not
    123      *
    124      * @param array $array
    125      * @return bool
    126      */
    127     function isStruct($array)
    128     {
    129         $expected = 0;
    130         foreach ($array as $key => $value) {
    131             if ((string)$key !== (string)$expected) {
    132                 return true;
    133             }
    134             $expected++;
    135         }
    136         return false;
    137     }
    138 }