• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • Examples
  • File List

system/classes/xmlrpcutils.php

00001 <?php
00002 namespace Habari;
00012 class XMLRPCUtils
00013 {
00014 
00021   public static function encode_arg( $params, $arg )
00022   {
00023     switch ( true ) {
00024       case is_array( $arg ):
00025         $data = $params->addchild( 'value' )->addchild( 'array' )->addchild( 'data' );
00026         foreach ( $arg as $element ) {
00027           self::encode_arg( $data, $element );
00028         }
00029         break;
00030       case ( $arg instanceof XMLRPCDate ):
00031         $params->addchild( 'value' )->addchild( 'dateTime.iso8601', date( 'c', $arg->date ) );
00032         break;
00033       case ( $arg instanceof XMLRPCBinary ):
00034         $params->addchild( 'value' )->addchild( 'base64', base64_encode( $arg->data ) );
00035         break;
00036       case ( $arg instanceof XMLRPCStruct ):
00037         $struct = $params->addchild( 'value' )->addchild( 'struct' );
00038         $object_vars = $arg->get_fields();
00039         foreach ( $object_vars as $field ) {
00040           $member = $struct->addchild( 'member' );
00041           $member->addchild( 'name', $field );
00042           self::encode_arg( $member, $arg->$field );
00043         }
00044         break;
00045       case is_object( $arg ):
00046         $struct = $params->addchild( 'value' )->addchild( 'struct' );
00047         $object_vars = get_object_vars( $arg );
00048         foreach ( $object_vars as $key=>$value ) {
00049           $member = $struct->addchild( 'member' );
00050           $member->addchild( 'name', $key );
00051           self::encode_arg( $member, $value );
00052         }
00053         break;
00054       case is_integer( $arg ):
00055         $params->addchild( 'value' )->addchild( 'i4', $arg );
00056         break;
00057       case is_bool( $arg ):
00058         $params->addchild( 'value' )->addchild( 'boolean', $arg ? '1' : '0' );
00059         break;
00060       case is_string( $arg ):
00061         $params->addchild( 'value' )->addchild( 'string', $arg );
00062         break;
00063       case is_float( $arg ):
00064         $params->addchild( 'value' )->addchild( 'double', $arg );
00065         break;
00066     }
00067   }
00068   
00075   public static function decode_args( $value )
00076   {
00077     if ( count( $value->children() ) ) {
00078       $value = $value->xpath( '*' );
00079       $value = $value[0];
00080     }
00081     switch ( $value->getName() ) {
00082       case 'data':
00083       case 'array':
00084         $result_array = array();
00085         foreach ( $value->xpath( '//data/value' ) as $array_value ) {
00086           $result_array[] = self::decode_args( $array_value );
00087         }
00088         return $result_array;
00089         break;
00090       case 'struct':
00091         $result_struct = new XMLRPCStruct();
00092         foreach ( $value->xpath( '//member' ) as $struct_value ) {
00093           $property_name = (string) $struct_value->name;
00094           $children = $struct_value->value->children();
00095           if ( count( $children ) > 0 ) {
00096             $result_struct->$property_name = self::decode_args( $children[0] );
00097           }
00098           else {
00099             $result_struct->$property_name = (string) $struct_value->value;
00100           }
00101         }
00102         return $result_struct;
00103         break;
00104       case 'string':
00105         return (string) $value;
00106       case 'i4':
00107       case 'integer':
00108         return (int) $value;
00109       case 'double':
00110         return (double) $value;
00111       case 'boolean':
00112         return ( (int) $value == 1 ) ? true : false;
00113       case 'dateTime.iso8601':
00114         return strtotime( (string) $value );
00115       default:
00116         return (string) $value;
00117     }
00118   }
00119 
00120 }
00121 
00122 ?>

Generated on Sun Aug 4 2013 12:51:43 for Habari by  doxygen 1.7.1