From cc7005a746c6c4df858c078b54ef8830dce7d92c Mon Sep 17 00:00:00 2001 From: Kyle Browning Date: Wed, 4 May 2011 12:11:40 -0700 Subject: [PATCH] issue [#1016350] voxpelli, heyrocker, kylebrowning Do not prefix actions in the xmlrpc server --- servers/xmlrpc_server/xmlrpc_server.module | 81 +++------------------- services.module | 51 ++++++++++++++ 2 files changed, 59 insertions(+), 73 deletions(-) diff --git a/servers/xmlrpc_server/xmlrpc_server.module b/servers/xmlrpc_server/xmlrpc_server.module index 603abe6..bc7f90e 100644 --- a/servers/xmlrpc_server/xmlrpc_server.module +++ b/servers/xmlrpc_server/xmlrpc_server.module @@ -3,13 +3,14 @@ * @file * Enable XML-RPC for services module. * - * Most of the work here is converting the REST-style resource definitions - * to XMLRPC-style procedure calls. These procedures are renamed as - * .. So the node resource's retrieve method has an XMLRPC - * procedure name of node.retrieve. Actions prepend 'action_' to the procedure - * name. So the login action of the user resource becomes user.action_login. + * Resource definitions get converted to RPC-style procedure names, but + * otherwise this is really just a wrapper around the core xmlrpc server. + * These procedures are renamed as .. So the node + * resource's retrieve method has an XMLRPC procedure name of node.retrieve, + * the user resource's login action has an XMLRPC procedure name of + * user.login, etc. */ - + /** * Implementation of hook_server_info(). */ @@ -42,7 +43,7 @@ function xmlrpc_server_xmlrpc() { if (!empty($resources)) { // Translate all resources foreach ($resources as $name => $def) { - foreach (_xmlrpc_server_resources_as_procedures($def) as $method) { + foreach (services_resources_as_procedures($def) as $method) { $callbacks[$method['method']] = 'xmlrpc_server_call_wrapper'; } } @@ -90,69 +91,3 @@ function xmlrpc_server_call_wrapper() { } } } - -/** - * Convert a resource to XMLRPC-style methods. - * - * @param array $resource - * A resource definition. - * - * @return array - * An array of XMLRPC method definitions - */ -function _xmlrpc_server_resources_as_procedures($resource) { - static $controllers = array( - 'create' => 'create', - 'delete' => 'delete', - 'retrieve' => 'retrieve', - 'update' => 'update', - 'index' => 'index', - ), $subcontrollers = array( - 'relationships' => 'related', - 'targeted actions' => 'targeted_action', - ); - - $methods = array(); - - foreach ($controllers as $attr => $name) { - if (isset($resource[$attr])) { - $methods[] = _xmlrpc_server_resource_controller_as_procedure($resource['name'], $name, $resource[$attr]); - } - } - - foreach ($subcontrollers as $attr => $name) { - if (isset($resource[$attr])) { - foreach ($resource[$attr] as $sc_name => $controller) { - $methods[] = _xmlrpc_server_resource_controller_as_procedure($resource['name'], $name .'_'. $sc_name, $controller); - } - } - } - - if (isset($resource['actions'])) { - foreach ($resource['actions'] as $sc_name => $controller) { - $methods[] = _xmlrpc_server_resource_controller_as_procedure($resource['name'], 'action_'. $sc_name, $controller); - } - } - - return $methods; -} - -/** - * Helper function for _xmlrpc_server_resources_as_procedures() that turns a resource - * controller into an XMLRPC method. - * - * @param $resource - * The resource being converted (node, user, etc.) - * @param $name - * The method name (retrieve, create, etc.) - * @param $controller - * Associative array defining the method's properties and callbacks. - * - */ -function _xmlrpc_server_resource_controller_as_procedure($resource, $name, $controller) { - $method = array_merge($controller, array( - 'method' => $resource .'.'. $name, - )); - - return $method; -} diff --git a/services.module b/services.module index c6200ca..6fce6be 100644 --- a/services.module +++ b/services.module @@ -366,3 +366,54 @@ function services_controller_get($name, $endpoint) { } } } + +/** + * Convert a resource to RPC-style methods. + * + * @param array $resource + * A resource definition. + * + * @return array + * An array of RPC method definitions + */ +function services_resources_as_procedures($resource) { + static $controllers = array('create', 'retrieve', 'update', 'delete', 'index'); + static $subcontrollers = array('actions', 'relationships', 'targeted actions'); + + $methods = array(); + + foreach ($controllers as $name) { + if (isset($resource[$name])) { + $methods[] = _services_resource_controller_as_procedure($resource['name'], $name, $resource[$name]); + } + } + + foreach ($subcontrollers as $name) { + if (isset($resource[$name])) { + foreach ($resource[$name] as $sc_name => $controller) { + $methods[] = _services_resource_controller_as_procedure($resource['name'], $sc_name, $controller); + } + } + } + + return $methods; +} +/** + * Helper function for _services_resources_as_procedures() that turns a resource + * controller into an RPC method. + * + * @param $resource + * The resource being converted (node, user, etc.) + * @param $name + * The method name (retrieve, create, etc.) + * @param $controller + * Associative array defining the method's properties and callbacks. + * + */ +function _services_resource_controller_as_procedure($resource, $name, $controller) { + $method = array_merge($controller, array( + 'method' => $resource . '.' . $name, + )); + + return $method; +} \ No newline at end of file