Commit 699df674 authored by Dries's avatar Dries

- Patch #34214 by ax:

   * xmlrpc_value_calculate_type() fails for empty arrays
   * PHPDoc for xmlrpc_value_calculate_type()
   * use is_*() instead of gettype() as advised in the PHP manual (and document this)
   * coding style
parent a3e47f1e
......@@ -30,27 +30,43 @@ function xmlrpc_value($data, $type = FALSE) {
return $xmlrpc_value;
}
/**
* Map PHP type to XML-RPC type.
*
* @param $xmlrpc_value
* Variable whose type should be mapped.
* @return
* XML-RPC type as string.
* @see
* http://www.xmlrpc.com/spec#scalars
*/
function xmlrpc_value_calculate_type(&$xmlrpc_value) {
$type = gettype($xmlrpc_value->data);
switch ($type) {
case 'boolean': case 'double':
return $type;
case 'integer':
// http://www.php.net/gettype: Never use gettype() to test for a certain type [...] Instead, use the is_* functions.
if (is_bool($xmlrpc_value->data)) {
return 'boolean';
}
if (is_double($xmlrpc_value->data)) {
return 'double';
}
if (is_int($xmlrpc_value->data)) {
return 'int';
case 'array':
return range(0, count($xmlrpc_value->data) - 1) === array_keys($xmlrpc_value->data) ? 'array' : 'struct';
case 'object':
if ($xmlrpc_value->data->is_date) {
return 'date';
}
if ($xmlrpc_value->data->is_base64) {
return 'base64';
}
$xmlrpc_value->data = get_object_vars($xmlrpc_value->data);
return 'struct';
default:
return 'string';
}
if (is_array($xmlrpc_value->data)) {
// empty or integer-indexed arrays are 'array', string-indexed arrays 'struct'
return empty($xmlrpc_value->data) || range(0, count($xmlrpc_value->data) - 1) === array_keys($xmlrpc_value->data) ? 'array' : 'struct';
}
if (is_object($xmlrpc_value->data)) {
if ($xmlrpc_value->data->is_date) {
return 'date';
}
if ($xmlrpc_value->data->is_base64) {
return 'base64';
}
$xmlrpc_value->data = get_object_vars($xmlrpc_value->data);
return 'struct';
}
// default
return 'string';
}
function xmlrpc_value_get_xml($xmlrpc_value) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment