X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Fxmlrpc_wrappers.inc;h=3c2390a21506e23f139209e6e4f50812aeb466f3;hb=19b99735570521d8172f73124ade5997b9dca75d;hp=c9e34494d39b564d0404c1d222d7848a0046e59f;hpb=5481456fe553efa3dbdb90c3c05799637b595737;p=plcapi.git diff --git a/lib/xmlrpc_wrappers.inc b/lib/xmlrpc_wrappers.inc index c9e3449..3c2390a 100644 --- a/lib/xmlrpc_wrappers.inc +++ b/lib/xmlrpc_wrappers.inc @@ -2,7 +2,7 @@ /****************************************************************************** * - *** DEPRECATED *** + * *** DEPRECATED *** * * This file is only used to insure backwards compatibility * with the API of the library <= rev. 3 @@ -34,7 +34,6 @@ function xmlrpc_2_php_type($xmlrpcType) return $wrapper->xmlrpc2PhpType($xmlrpcType); } -/// @todo backwards compat: return string instead of callable /** * @see PhpXmlRpc\Wrapper::wrap_php_function * @param callable $funcName @@ -45,11 +44,21 @@ function xmlrpc_2_php_type($xmlrpcType) function wrap_php_function($funcName, $newFuncName='', $extraOptions=array()) { $wrapper = new PhpXmlRpc\Wrapper(); - return $wrapper->wrapPhpFunction($funcName, $newFuncName, $extraOptions); + if (!isset($extraOptions['return_source']) || $extraOptions['return_source'] == false) { + // backwards compat: return string instead of callable + $extraOptions['return_source'] = true; + $wrapped = $wrapper->wrapPhpFunction($funcName, $newFuncName, $extraOptions); + eval($wrapped['source']); + } else { + $wrapped = $wrapper->wrapPhpFunction($funcName, $newFuncName, $extraOptions); + } + return $wrapped; } -/// @todo backwards compat: return strings instead of callables /** + * NB: this function returns an array in a format which is unsuitable for direct use in the server dispatch map, unlike + * PhpXmlRpc\Wrapper::wrapPhpClass. This behaviour might seem like a bug, but has been kept for backwards compatibility. + * * @see PhpXmlRpc\Wrapper::wrap_php_class * @param string|object $className * @param array $extraOptions @@ -58,10 +67,22 @@ function wrap_php_function($funcName, $newFuncName='', $extraOptions=array()) function wrap_php_class($className, $extraOptions=array()) { $wrapper = new PhpXmlRpc\Wrapper(); - return $wrapper->wrapPhpClass($className, $extraOptions); + $fix = false; + if (!isset($extraOptions['return_source']) || $extraOptions['return_source'] == false) { + // backwards compat: return string instead of callable + $extraOptions['return_source'] = true; + $fix = true; + } + $wrapped = $wrapper->wrapPhpClass($className, $extraOptions); + foreach($wrapped as $name => $value) { + if ($fix) { + eval($value['source']); + } + $wrapped[$name] = $value['function']; + } + return $wrapped; } -/// @todo backwards compat: return string instead of callable /** * @see PhpXmlRpc\Wrapper::wrapXmlrpcMethod * @param xmlrpc_client $client @@ -86,10 +107,19 @@ function wrap_xmlrpc_method($client, $methodName, $extraOptions=0, $timeout=0, $ } $wrapper = new PhpXmlRpc\Wrapper(); - return $wrapper->wrapXmlrpcMethod($client, $methodName, $extraOptions); + + if (!isset($extraOptions['return_source']) || $extraOptions['return_source'] == false) { + // backwards compat: return string instead of callable + $extraOptions['return_source'] = true; + $wrapped = $wrapper->wrapXmlrpcMethod($client, $methodName, $extraOptions); + eval($wrapped['source']); + $wrapped = $wrapped['function']; + } else { + $wrapped = $wrapper->wrapXmlrpcMethod($client, $methodName, $extraOptions); + } + return $wrapped; } -/// @todo backwards compat: return strings instead of callables /** * @see PhpXmlRpc\Wrapper::wrap_xmlrpc_server * @param xmlrpc_client $client @@ -102,7 +132,6 @@ function wrap_xmlrpc_server($client, $extraOptions=array()) return $wrapper->wrapXmlrpcServer($client, $extraOptions); } -/// @todo fix dangling usage of $this-> /** * Given the necessary info, build php code that creates a new function to invoke a remote xmlrpc method. * Take care that no full checking of input parameters is done to ensure that valid php code is emitted. @@ -119,7 +148,7 @@ function build_remote_method_wrapper_code($client, $methodName, $xmlrpcFuncName, $code = "function $xmlrpcFuncName ("; if ($clientCopyMode < 2) { // client copy mode 0 or 1 == partial / full client copy in emitted code - $innerCode = $this->build_client_wrapper_code($client, $clientCopyMode, $prefix, $namespace); + $innerCode = build_client_wrapper_code($client, $clientCopyMode, $prefix, $namespace); $innerCode .= "\$client->setDebug(\$debug);\n"; $this_ = ''; } else { @@ -185,3 +214,30 @@ function build_remote_method_wrapper_code($client, $methodName, $xmlrpcFuncName, return array('source' => $code, 'docstring' => $mDesc); } + +/** + * @deprecated + */ +function build_client_wrapper_code($client, $verbatim_client_copy, $prefix='xmlrpc') +{ + $code = "\$client = new {$prefix}_client('".str_replace("'", "\'", $client->path). + "', '" . str_replace("'", "\'", $client->server) . "', $client->port);\n"; + + // copy all client fields to the client that will be generated runtime + // (this provides for future expansion or subclassing of client obj) + if ($verbatim_client_copy) + { + foreach($client as $fld => $val) + { + if($fld != 'debug' && $fld != 'return_type') + { + $val = var_export($val, true); + $code .= "\$client->$fld = $val;\n"; + } + } + } + // only make sure that client always returns the correct data type + $code .= "\$client->return_type = '{$prefix}vals';\n"; + //$code .= "\$client->setDebug(\$debug);\n"; + return $code; +}