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

merge-requests/26/head
Dries Buytaert 2009-12-13 13:06:45 +00:00
parent ab6f592cd7
commit a1e08d9353
2 changed files with 39 additions and 1 deletions

View File

@ -1128,6 +1128,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
*

View File

@ -17,5 +17,5 @@ include_once DRUPAL_ROOT . '/includes/xmlrpc.inc';
include_once DRUPAL_ROOT . '/includes/xmlrpcs.inc';
$services = module_invoke_all('xmlrpc');
drupal_alter('xmlrpc_alter', $services);
drupal_alter('xmlrpc', $services);
xmlrpc_server($services);