Permalink
Browse files

- Patch #656266 by fgm: fixed the hook and added documentation.

  • Loading branch information...
1 parent 3147580 commit 98bb10040960d49e610b1b26152ffb7df8c0d3be dries committed Dec 13, 2009
Showing with 41 additions and 3 deletions.
  1. +39 −1 modules/system/system.api.php
  2. +2 −2 xmlrpc.php
@@ -1,5 +1,5 @@
<?php
-// $Id: system.api.php,v 1.108 2009-12-04 22:46:28 dries Exp $
+// $Id: system.api.php,v 1.109 2009-12-13 13:06:45 dries Exp $
/**
* @file
@@ -1129,6 +1129,44 @@ function hook_xmlrpc() {
}
/**
+ * Alter the definition of XML-RPC methods before they are called.
+ *
+ * This hook lets at module modify the callback definition for already
+ * declared XML-RPC methods, when they are being invoked by a client.
+ *
+ * This hook is invoked by xmlrpc.php. The method definitions are
+ * passed in by reference. Each element of the $methods array is one
+ * callback definition returned by a module from hook_xmlrpc. Additional
+ * methods may be added, or existing items altered.
+ *
+ * Modules implementing this hook must take care of the fact that
+ * hook_xmlrpc allows two distinct and incompatible formats for callback
+ * definition, so module must be prepared to handle either format for
+ * each callback being altered.
+ *
+ * @see hook_xmlrpc()
+ *
+ * @param $methods
+ * Associative array of method callback definitions returned from
+ * hook_xmlrpc.
+ */
+function hook_xmlrpc_alter(&$methods) {
+
+ // Direct update for methods defined the simple way
+ $methods['drupal.login'] = 'mymodule_login';
+
+ // Lookup update for methods defined the complex way
+ foreach ($methods as $key => &$method) {
+ if (!is_int($key)) {
+ continue;
+ }
+ if ($method[0] == 'drupal.site.ping') {
+ $method[1] = 'mymodule_directory_ping';
+ }
+ }
+}
+
+/**
* Log an event message
*
* This hook allows modules to route log events to custom destinations, such as
View
@@ -1,5 +1,5 @@
<?php
-// $Id: xmlrpc.php,v 1.18 2009-12-12 19:20:52 dries Exp $
+// $Id: xmlrpc.php,v 1.19 2009-12-13 13:06:45 dries Exp $
/**
* @file
@@ -17,5 +17,5 @@
include_once DRUPAL_ROOT . '/includes/xmlrpcs.inc';
$services = module_invoke_all('xmlrpc');
-drupal_alter('xmlrpc_alter', $services);
+drupal_alter('xmlrpc', $services);
xmlrpc_server($services);

0 comments on commit 98bb100

Please sign in to comment.