Seditio Source
Root |
./othercms/wordpress-6.0/wp-includes/IXR/class-IXR-value.php
<?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;
    }
}