- Patch #7458 by chx: merged the XML-RPC multicall support into xmlrpc() and use lazy-loading for the XML-RPC libraries.(performance improvement).
parent
05014a3135
commit
d6bcdafeed
|
|
@ -1826,6 +1826,34 @@ function drupal_implode_autocomplete($array) {
|
||||||
return implode('||', $output);
|
return implode('||', $output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs one or more XML-RPC request(s).
|
||||||
|
*
|
||||||
|
* @param $url
|
||||||
|
* An absolute URL of the XML-RPC endpoint.
|
||||||
|
* Example:
|
||||||
|
* http://www.domain.com/xmlrpc.php
|
||||||
|
* @param ...
|
||||||
|
* For one request:
|
||||||
|
* The method name followed by a variable number of arguments to the method.
|
||||||
|
* For multiple requests (system.multicall):
|
||||||
|
* An array of call arrays. Each call array follows the pattern of the single
|
||||||
|
* request: method name followed by the arguments to the method.
|
||||||
|
* @return
|
||||||
|
* For one request:
|
||||||
|
* Either the return value of the method on success, or FALSE.
|
||||||
|
* If FALSE is returned, see xmlrpc_errno() and xmlrpc_error_msg().
|
||||||
|
* For multiple requests:
|
||||||
|
* An array of results. Each result will either be the result
|
||||||
|
* returned by the method called, or an xmlrpc_error object if the call
|
||||||
|
* failed. See xmlrpc_error().
|
||||||
|
*/
|
||||||
|
function xmlrpc($url) {
|
||||||
|
require_once './includes/xmlrpc.inc';
|
||||||
|
$args = func_get_args();
|
||||||
|
return call_user_func_array('_xmlrpc', $args);
|
||||||
|
}
|
||||||
|
|
||||||
function _drupal_bootstrap_full() {
|
function _drupal_bootstrap_full() {
|
||||||
static $called;
|
static $called;
|
||||||
global $locale;
|
global $locale;
|
||||||
|
|
@ -1840,7 +1868,6 @@ function _drupal_bootstrap_full() {
|
||||||
require_once './includes/tablesort.inc';
|
require_once './includes/tablesort.inc';
|
||||||
require_once './includes/file.inc';
|
require_once './includes/file.inc';
|
||||||
require_once './includes/unicode.inc';
|
require_once './includes/unicode.inc';
|
||||||
require_once './includes/xmlrpc.inc';
|
|
||||||
require_once './includes/image.inc';
|
require_once './includes/image.inc';
|
||||||
// Set the Drupal custom error handler.
|
// Set the Drupal custom error handler.
|
||||||
set_error_handler('error_handler');
|
set_error_handler('error_handler');
|
||||||
|
|
|
||||||
|
|
@ -340,25 +340,21 @@ function xmlrpc_base64_get_xml($xmlrpc_base64) {
|
||||||
return '<base64>'. base64_encode($xmlrpc_base64->data) .'</base64>';
|
return '<base64>'. base64_encode($xmlrpc_base64->data) .'</base64>';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
function _xmlrpc() {
|
||||||
* Perform an XML-RPC request.
|
|
||||||
*
|
|
||||||
* @param $url
|
|
||||||
* An absolute URL of the XML-RPC server
|
|
||||||
* @param $method
|
|
||||||
* The method to be executed
|
|
||||||
* @param ...
|
|
||||||
* A variable number of arguments of the method.
|
|
||||||
* @return
|
|
||||||
* The return value of the method on success or FALSE. On FALSE, see
|
|
||||||
* xmlrpc_errno() and xmlrpc_error_msg().
|
|
||||||
*/
|
|
||||||
function xmlrpc() {
|
|
||||||
$args = func_get_args();
|
$args = func_get_args();
|
||||||
$url = array_shift($args);
|
$url = array_shift($args);
|
||||||
$method = array_shift($args);
|
if (is_array($args[0])) {
|
||||||
|
$method = 'system.multicall';
|
||||||
|
$multicall_args = array();
|
||||||
|
foreach ($args[0] as $call) {
|
||||||
|
$multicall_args[] = array('methodName' => array_shift($call),'params' => $call);
|
||||||
|
}
|
||||||
|
$args = array($multicall_args);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$method = array_shift($args);
|
||||||
|
}
|
||||||
$xmlrpc_request = xmlrpc_request($method, $args);
|
$xmlrpc_request = xmlrpc_request($method, $args);
|
||||||
// $request .= "Content-Type: text/xml$r";
|
|
||||||
$result = drupal_http_request($url, array("Content-Type" => "text/xml"), 'POST', $xmlrpc_request->xml);
|
$result = drupal_http_request($url, array("Content-Type" => "text/xml"), 'POST', $xmlrpc_request->xml);
|
||||||
if ($result->code != 200) {
|
if ($result->code != 200) {
|
||||||
xmlrpc_error(-$result->code, $result->error);
|
xmlrpc_error(-$result->code, $result->error);
|
||||||
|
|
@ -380,30 +376,6 @@ function xmlrpc() {
|
||||||
return $message->params[0];
|
return $message->params[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform multiple calls in one request if possible.
|
|
||||||
*
|
|
||||||
* @param $url
|
|
||||||
* An absolute URL of the XML-RPC server
|
|
||||||
* @param $calls
|
|
||||||
* An array of calls. Each call is an array, where the first element
|
|
||||||
* is the method name, further elements are the arguments.
|
|
||||||
* @return
|
|
||||||
* An array of results.
|
|
||||||
*/
|
|
||||||
function xmlrpc_multicall() {
|
|
||||||
$args = func_get_args();
|
|
||||||
$url = $args[0];
|
|
||||||
foreach ($args[1] as $call) {
|
|
||||||
$method = array_shift($call);
|
|
||||||
$calls[] = array(
|
|
||||||
'methodName' => $method,
|
|
||||||
'params' => $call
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return xmlrpc($url, 'system.multicall', $calls);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the last XML-RPC client error number
|
* Returns the last XML-RPC client error number
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,10 @@
|
||||||
* PHP page for handling incoming XML-RPC requests from clients.
|
* PHP page for handling incoming XML-RPC requests from clients.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
include_once 'includes/bootstrap.inc';
|
include_once './includes/bootstrap.inc';
|
||||||
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
|
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
|
||||||
include_once 'includes/xmlrpcs.inc';
|
include_once './includes/xmlrpc.inc';
|
||||||
|
include_once './includes/xmlrpcs.inc';
|
||||||
|
|
||||||
xmlrpc_server(module_invoke_all('xmlrpc'));
|
xmlrpc_server(module_invoke_all('xmlrpc'));
|
||||||
?>
|
?>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue