class clients_connection_drupal_services_7_3 in Web Service Clients 7.3
Same name and namespace in other branches
- 6.2 connections/clients_drupal/clients_drupal.inc \clients_connection_drupal_services_7_3
- 7.2 connections/clients_drupal/clients_drupal.inc \clients_connection_drupal_services_7_3
Drupal client for services on a Drupal 7 site for Services 7.x-3.x.
Hierarchy
- class \Entity implements EntityInterface
Expanded class hierarchy of clients_connection_drupal_services_7_3
File
- connections/
clients_drupal/ clients_drupal.inc, line 78 - Contains classes for Client connections handlers.
View source
class clients_connection_drupal_services_7_3 extends clients_connection_drupal_services {
// ============================================ D7-3: Connection form methods.
/**
* Extra form elements specific to a class's edit form.
*
* @param $form_state
* The form state from the main form, which you probably don't need anyway.
*
* @see clients_connection_form()
* @see clients_connection_form_submit()
*/
function connectionSettingsFormAlter(&$form, &$form_state) {
$form['endpoint']['#description'] = t('Remote service URL e.g. http://mysite.com/path/to/xmlrpc');
// There is no configuration other than the credentials.
$form['credentials']['username'] = array(
'#type' => 'textfield',
'#title' => t('Service username'),
'#size' => 30,
'#maxlength' => 60,
'#attributes' => array(
'autocomplete' => 'off',
),
'#description' => t('This should be same as the username on the server you are connecting to.'),
'#required' => TRUE,
);
$password_exists = isset($this->credentials['password']);
$password_desc = $password_exists ? t('This should be same as the password on the server you are connecting to. Leave blank unless you need to change this.') : t('This should be same as the password on the server you are connecting to.');
$form['credentials']['password'] = array(
'#type' => 'password',
'#title' => t('Service password'),
'#size' => 30,
'#maxlength' => 60,
'#attributes' => array(
'autocomplete' => 'off',
),
'#description' => $password_desc,
'#required' => !$password_exists,
);
}
// ============================================ D7-3: Connection API.
/**
* Call a remote method.
*
* @param $method
* The name of the remote method to call.
* @param $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
* Whatever is returned from the remote site.
*/
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, array(
'system.connect' => array(),
));
$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.
$this
->credentialsLoad();
$username = $this->credentials['username'];
$password = $this->credentials['password'];
$login = xmlrpc($this->endpoint, array(
'user.login' => array(
$username,
$password,
),
));
$login_session_id = $login['sessid'];
$login_session_name = $login['session_name'];
// Set our cookie for subsequent requests.
$this->cookie = $login_session_name . '=' . $login_session_id;
$this
->handleXmlrpcError();
// If the requested method is user.login, we're done.
if ($method == 'user.login') {
return $login;
}
$headers = array(
// Pass in the login cookie we received previously.
'Cookie' => $this->cookie,
// It would appear that with XMLRPC we always need the XCSRF token, no
// matter what the method.
'X-CSRF-Token' => $this
->getXCSRFToken(),
);
$xmlrpc_options = array(
'headers' => $headers,
);
$result = xmlrpc($this->endpoint, array(
$method => $method_params,
), $xmlrpc_options);
// Throw an exception for errors from the remote call.
$this
->handleXmlrpcError();
return $result;
}
/**
* Get the X-CSRF token.
*
* This calls the remote site to get the token, and caches it, so that
* multiple requests made with the same connection don't need to retrieve it
* again.
*
* This expects the 'user.token' method to be enabled on the
* endpoint. This only exists in Services 3.5 and later. We do not support
* earlier versions.
*
* @return
* The X-CSRF token.
*
* @throws
* An exception if the remote site does not return a token.
*/
function getXCSRFToken() {
if (isset($this->CSRFToken)) {
return $this->CSRFToken;
}
$headers = array(
// Pass in the login cookie we received previously.
'Cookie' => $this->cookie,
);
$options = array(
'headers' => $headers,
);
$response = xmlrpc($this->endpoint, array(
'user.token' => array(),
), $options);
$this
->handleXmlrpcError();
if (isset($response['token'])) {
$this->CSRFToken = $response['token'];
return $this->CSRFToken;
}
else {
throw new Exception(t("Unable to get a CSRF token from the remote site."));
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
clients_connection_base:: |
public | property | The connection id. Only set if this is stored in the database. | |
clients_connection_base:: |
public | property | An array of further configuration options. | |
clients_connection_base:: |
public | property | The URL this connection connects to. | |
clients_connection_base:: |
public | property | The machine name of the connection. | |
clients_connection_base:: |
function | Call a remote method. | ||
clients_connection_base:: |
function | Load the credentials into the connection. | ||
clients_connection_base:: |
function | Output debugging data. | ||
clients_connection_base:: |
function | Format the connection's endpoint as a link. | 1 | |
clients_connection_base:: |
function | Get the credentials storage plugin for this connection. | ||
clients_connection_drupal_services:: |
function |
Submit handler for saving/updating connections of this class. Overrides clients_connection_base:: |
||
clients_connection_drupal_services:: |
function |
Declare an array of properties which should be treated as credentials. Overrides clients_connection_base:: |
||
clients_connection_drupal_services:: |
function | Common helper for reacting to an error from an XMLRPC call. | ||
clients_connection_drupal_services:: |
function |
Constructor method. Overrides ClientsHandlerEntity:: |
||
clients_connection_drupal_services_7_3:: |
function |
Call a remote method. Overrides clients_connection_base:: |
||
clients_connection_drupal_services_7_3:: |
function |
Extra form elements specific to a class's edit form. Overrides clients_connection_base:: |
||
clients_connection_drupal_services_7_3:: |
function | Get the X-CSRF token. | ||
Entity:: |
protected | property | 1 | |
Entity:: |
protected | property | ||
Entity:: |
protected | property | ||
Entity:: |
protected | property | ||
Entity:: |
protected | property | ||
Entity:: |
public | function |
Builds a structured array representing the entity's content. Overrides EntityInterface:: |
1 |
Entity:: |
public | function |
Returns the bundle of the entity. Overrides EntityInterface:: |
|
Entity:: |
protected | function | Defines the entity label if the 'entity_class_label' callback is used. | 1 |
Entity:: |
protected | function | Override this in order to implement a custom default URI and specify 'entity_class_uri' as 'uri callback' hook_entity_info(). | |
Entity:: |
public | function |
Permanently deletes the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the info of the type of the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the type of the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Exports the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Gets the raw, translated value of a property or field. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Checks if the entity has a certain exportable status. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the entity identifier, i.e. the entities name or numeric id. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the internal, numeric identifier. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Checks whether the entity is the default revision. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the label of the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Permanently saves the entity. Overrides EntityInterface:: |
|
Entity:: |
protected | function | Set up the object instance on construction or unserializiation. | |
Entity:: |
public | function |
Returns the uri of the entity just as entity_uri(). Overrides EntityInterface:: |
|
Entity:: |
public | function |
Generate an array for rendering the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function |
Returns the EntityMetadataWrapper of the entity. Overrides EntityInterface:: |
|
Entity:: |
public | function | Magic method to only serialize what's necessary. | |
Entity:: |
public | function | Magic method to invoke setUp() on unserialization. |