You are here

function clients_connection_drupal_services_7_3::callMethodArray in Web Service Clients 6.2

Same name and namespace in other branches
  1. 7.3 connections/clients_drupal/clients_drupal.inc \clients_connection_drupal_services_7_3::callMethodArray()
  2. 7.2 connections/clients_drupal/clients_drupal.inc \clients_connection_drupal_services_7_3::callMethodArray()

Call a remote method.

Parameters

$method: The name of the remote method to call.

$method_params: An array of parameters to passed to the remote method. Note that the D5 version of Services does not seem to respect optional parameters; you should pass in defaults (eg an empty string or 0) instead of omitting a parameter.

Return value

Whatever is returned from the remote site.

Overrides clients_connection_base::callMethodArray

1 call to clients_connection_drupal_services_7_3::callMethodArray()
clients_connection_drupal_services_7_3::testConnectionNodeLoad in connections/clients_drupal/clients_drupal.inc
Connection test button handler: loading a node: Services 7.x-3.x.

File

connections/clients_drupal/clients_drupal.inc, line 284
Contains classes for Client connections handlers.

Class

clients_connection_drupal_services_7_3
Drupal client for services on a Drupal 7 site for Services 7.x-3.x.

Code

function callMethodArray($method, $method_params = array()) {
  $this->method = $method;

  // Connect to the remote system service to get an initial session id to log in with.
  $connect = xmlrpc($this->endpoint, 'system.connect');
  $session_id = $connect['sessid'];
  $this
    ->handleXmlrpcError();

  // We may want to call only system.connect for testing purposes.
  if ($method == 'system.connect') {
    return $connect;
  }

  // Log in and get the user's session ID.
  $username = $this->configuration['username'];
  $password = $this->configuration['password'];
  $login = xmlrpc($this->endpoint, 'user.login', $username, $password);
  $login_session_id = $login['sessid'];
  $this
    ->handleXmlrpcError();

  // If the requested method is user.login, we're done.
  if ($method == 'user.login') {
    return $login;
  }

  // Build the array of connection arguments for the method we want to call.
  $xmlrpc_args = array_merge(array(
    $this->endpoint,
    $method,
  ), $method_params);

  // Call the xmlrpc method with our array of arguments.
  $result = call_user_func_array('xmlrpc', $xmlrpc_args);

  // Throw an exception for errors from the remote call.
  $this
    ->handleXmlrpcError();
  return $result;
}