diff options
Diffstat (limited to 'modules/pearxmlrpc/Dump.php')
-rw-r--r-- | modules/pearxmlrpc/Dump.php | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/modules/pearxmlrpc/Dump.php b/modules/pearxmlrpc/Dump.php new file mode 100644 index 00000000..97c30e27 --- /dev/null +++ b/modules/pearxmlrpc/Dump.php @@ -0,0 +1,187 @@ +<?php + +/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ + +/** + * Function and class to dump XML_RPC_Value objects in a nice way + * + * Should be helpful as a normal var_dump(..) displays all internals which + * doesn't really give you an overview due to too much information. + * + * @category Web Services + * @package XML_RPC + * @author Christian Weiske <cweiske@php.net> + * @version CVS: $Id: Dump.php,v 1.7 2005/01/24 03:47:55 danielc Exp $ + * @link http://pear.php.net/package/XML_RPC + */ + + +/** + * Pull in the XML_RPC class + */ +require_once 'XML/RPC.php'; + + +/** + * Generates the dump of the XML_RPC_Value and echoes it + * + * @param object $value the XML_RPC_Value object to dump + * + * @return void + */ +function XML_RPC_Dump($value) +{ + $dumper = new XML_RPC_Dump(); + echo $dumper->generateDump($value); +} + + +/** + * Class which generates a dump of a XML_RPC_Value object + * + * @category Web Services + * @package XML_RPC + * @author Christian Weiske <cweiske@php.net> + * @version Release: 1.5.1 + * @link http://pear.php.net/package/XML_RPC + */ +class XML_RPC_Dump +{ + /** + * The indentation array cache + * @var array + */ + var $arIndent = array(); + + /** + * The spaces used for indenting the XML + * @var string + */ + var $strBaseIndent = ' '; + + /** + * Returns the dump in XML format without printing it out + * + * @param object $value the XML_RPC_Value object to dump + * @param int $nLevel the level of indentation + * + * @return string the dump + */ + function generateDump($value, $nLevel = 0) + { + if (!is_object($value) && get_class($value) != 'xml_rpc_value') { + require_once 'PEAR.php'; + PEAR::raiseError('Tried to dump non-XML_RPC_Value variable' . "\r\n", + 0, PEAR_ERROR_PRINT); + if (is_object($value)) { + $strType = get_class($value); + } else { + $strType = gettype($value); + } + return $this->getIndent($nLevel) . 'NOT A XML_RPC_Value: ' + . $strType . "\r\n"; + } + + switch ($value->kindOf()) { + case 'struct': + $ret = $this->genStruct($value, $nLevel); + break; + case 'array': + $ret = $this->genArray($value, $nLevel); + break; + case 'scalar': + $ret = $this->genScalar($value->scalarval(), $nLevel); + break; + default: + require_once 'PEAR.php'; + PEAR::raiseError('Illegal type "' . $value->kindOf() + . '" in XML_RPC_Value' . "\r\n", 0, + PEAR_ERROR_PRINT); + } + + return $ret; + } + + /** + * Returns the scalar value dump + * + * @param object $value the scalar XML_RPC_Value object to dump + * @param int $nLevel the level of indentation + * + * @return string Dumped version of the scalar value + */ + function genScalar($value, $nLevel) + { + if (gettype($value) == 'object') { + $strClass = ' ' . get_class($value); + } else { + $strClass = ''; + } + return $this->getIndent($nLevel) . gettype($value) . $strClass + . ' ' . $value . "\r\n"; + } + + /** + * Returns the dump of a struct + * + * @param object $value the struct XML_RPC_Value object to dump + * @param int $nLevel the level of indentation + * + * @return string Dumped version of the scalar value + */ + function genStruct($value, $nLevel) + { + $value->structreset(); + $strOutput = $this->getIndent($nLevel) . 'struct' . "\r\n"; + while (list($key, $keyval) = $value->structeach()) { + $strOutput .= $this->getIndent($nLevel + 1) . $key . "\r\n"; + $strOutput .= $this->generateDump($keyval, $nLevel + 2); + } + return $strOutput; + } + + /** + * Returns the dump of an array + * + * @param object $value the array XML_RPC_Value object to dump + * @param int $nLevel the level of indentation + * + * @return string Dumped version of the scalar value + */ + function genArray($value, $nLevel) + { + $nSize = $value->arraysize(); + $strOutput = $this->getIndent($nLevel) . 'array' . "\r\n"; + for($nA = 0; $nA < $nSize; $nA++) { + $strOutput .= $this->getIndent($nLevel + 1) . $nA . "\r\n"; + $strOutput .= $this->generateDump($value->arraymem($nA), + $nLevel + 2); + } + return $strOutput; + } + + /** + * Returns the indent for a specific level and caches it for faster use + * + * @param int $nLevel the level + * + * @return string the indented string + */ + function getIndent($nLevel) + { + if (!isset($this->arIndent[$nLevel])) { + $this->arIndent[$nLevel] = str_repeat($this->strBaseIndent, $nLevel); + } + return $this->arIndent[$nLevel]; + } +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * c-hanging-comment-ender-p: nil + * End: + */ + +?> |