abstract class clients_connection_base in Web Service Clients 7.3
Same name and namespace in other branches
- 6.2 clients.inc \clients_connection_base
- 7 clients.inc \clients_connection_base
- 7.2 clients.inc \clients_connection_base
Base class for client connections.
Hierarchy
- class \Entity implements EntityInterface- class \ClientsHandlerEntity- class \clients_connection_base
 
 
- class \ClientsHandlerEntity
Expanded class hierarchy of clients_connection_base
File
- includes/clients.entity.inc, line 44 
- Provides base classes for clients handler entities.
View source
abstract class clients_connection_base extends ClientsHandlerEntity {
  /**
   * The machine name of the connection.
   */
  public $name;
  /**
   * The connection id. Only set if this is stored in the database.
   */
  public $cid;
  /**
   * The URL this connection connects to.
   */
  public $endpoint;
  /**
   * An array of further configuration options.
   */
  public $configuration;
  /**
   * Declare an array of properties which should be treated as credentials.
   *
   * This lets the credentials storage plugin know which configuration
   * properties to take care of.
   *
   * @return
   *  A flat array of property names.
   */
  function credentialsProperties() {
    return array();
  }
  // ============================================ Connection UI
  /**
   * Get the credentials storage plugin for this connection.
   *
   * @param $plugin_id
   *  (Optional) The id of the plugin to retrieve. Specifying this allows the
   *  loading of the old plugin during connection form save.
   *
   * @return
   *  The instantiated plugin handler.
   */
  function get_credentials_storage_plugin($plugin_id = NULL) {
    if (!isset($plugin_id)) {
      if (isset($this->configuration['credentials_storage'])) {
        $plugin_id = $this->configuration['credentials_storage'];
      }
      else {
        // Fallback to the connection configuration plugin by default. This also
        // ensures backward compatibility.
        $plugin_id = 'connection_configuration';
      }
    }
    // Get the credentials storage plugin.
    ctools_include('plugins');
    $storage_plugin = ctools_get_plugins('clients', 'clients_credentials_storage', $plugin_id);
    $class = ctools_plugin_get_class($storage_plugin, 'handler');
    return new $class();
  }
  /**
   * Format the connection's endpoint as a link.
   *
   * @param $url
   *  The connection's endpoint.
   *
   * @return
   *  The string to display in the admin UI. Subclasses may format this as a
   *  link to the remote site.
   */
  function formatEndpoint($url) {
    return $url;
  }
  /**
   * Alter the connection settings form.
   *
   * Subclasses should add extra configuration form elements here.
   *
   * @param $form
   *  The main form array.
   * @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()
   *
   * TODO: define an interface for the admin UI
   */
  function connectionSettingsFormAlter(&$form, &$form_state) {
  }
  /**
   * Submit handler for saving/updating connections of this class.
   *
   * This base class method handles preserving the password when the connection
   * form is submitted on edit. Connection classes with a password configuration
   * option may make use of it.
   *
   * @see clients_connection_form_submit().
   */
  function connectionSettingsForm_submit($form, &$form_state) {
    // Check there is a password form element.
    if (isset($form['credentials']['password'])) {
      $old_connection = $form['#connection'];
      // Check whether we're editing or adding a new connection.
      if (isset($old_connection->is_new)) {
        // Encryption disabled for now. TODO.
        //$form_state['values']['configuration']['password'] = clients_drupal_encrypt($form_state['values']['configuration']['password']);
      }
      else {
        // Set password to original if blank.
        if (empty($form_state['values']['credentials']['password'])) {
          // Load the old credentials into the old connection, then copy the
          // password into the new one.
          $old_connection
            ->credentialsLoad();
          $this->credentials['password'] = $old_connection->credentials['password'];
        }
        // Encryption disabled for now. TODO
        //$form_state['values']['configuration']['password'] = clients_drupal_encrypt($form_state['values']['configuration']['password']);
      }
    }
    // Base class doesn't save: saving of the connection is handled by the
    // 'real' FormAPI submit handler.
  }
  // ============================================ Connection API.
  /**
   * Load the credentials into the connection.
   *
   * The credentials are loaded to a $connection->credentials array.
   *
   * Note that we don't call this in __construct() because then they would be
   * exported, which defeats the purpose.
   */
  function credentialsLoad() {
    $credentials_storage_plugin = $this
      ->get_credentials_storage_plugin();
    $credentials_storage_plugin
      ->credentialsLoad($this);
  }
  // TODO: move these to an XMLRPC client interface.
  /**
   * Call a remote method.
   *
   * This is a wrapper around callMethodArray that gives the convenience of
   * being able to pass method name and parameters as one flat list, and hence
   * is the main API for connection objects.
   *
   * @param $method
   *  The name of the remote method to call.
   * @param ...
   *  All other parameters are passed to the remote method.
   *
   * @return
   *  Whatever is returned from the remote site.
   *
   * @throws Exception on error from the remote site.
   */
  function callMethod($method) {
    // Get all the arguments this function has been passed.
    $function_args = func_get_args();
    // Slice out the ones that are arguments to the method call: everything past
    // the 1st argument.
    $method_params = array_slice($function_args, 1);
    return $this
      ->callMethodArray($method, $method_params);
  }
  /**
   * Call a remote method with an array of parameters.
   *
   * This is intended for internal use from callMethod() and
   * clients_connection_call().
   * If you need to call a method on given connection object, use callMethod
   * which has a nicer form.
   *
   * Subclasses do not necessarily have to override this method if their
   * connection type does not make sense with this.
   *
   * @param $method
   *  The name of the remote method to call.
   * @param $method_params
   *  An array of parameters to passed to the remote method.
   *
   * @return
   *  Whatever is returned from the remote site.
   *
   * @throws Exception on error from the remote site.
   *  It's up to subclasses to implement this, as the test for an error and
   *  the way to get information about it varies according to service type.
   */
  function callMethodArray($method, $method_params = array()) {
    // Up to subclasses to override this to do something.
  }
  /**
   * Output debugging data.
   *
   * This outputs debugging data if the connection is set to debug mode.
   *
   * The following channels are available:
   *  - watchdog: The usual Drupal core watchdog. This may not be suitable for
   *      large data.
   *  - dd: Devel module's dd() function.
   *  - dpm: Devel module's dpm() function.
   *  - ddl: Devel Debug Log module's ddl() function.
   *
   * The channels used can be overridden by defining an array of the above names
   * as keys in the site variable 'clients_debug_channels'.
   *
   * @param $data
   *  The data to output, such as the request data.
   * @param $variables = array()
   *  An array of variables for passing to watchdog(), if that output channel is
   *  used.
   */
  function debug($data, $variables = array()) {
    // Bail if we're not set to debug mode.
    if (empty($this->configuration['debug'])) {
      return;
    }
    // Get the channels we output debug data to.
    // Statically cache this, as we'll likely come here several times in one
    // connection request.
    static $clients_debug_channels;
    if (!isset($clients_debug_channels)) {
      $clients_debug_channels = variable_get('clients_debug_channels', array(
        'watchdog' => TRUE,
        'dpm' => module_exists('devel'),
        'ddl' => module_exists('devel_debug_log'),
      ));
    }
    // Drupal core watchdog().
    if (isset($clients_debug_channels['watchdog'])) {
      watchdog(get_class($this), $data, $variables, WATCHDOG_DEBUG);
    }
    // Devel dpm().
    if (isset($clients_debug_channels['dpm'])) {
      dpm($data, get_class($this));
    }
    // Devel dd().
    if (isset($clients_debug_channels['dd'])) {
      dd($data);
    }
    // Devel debug log ddl().
    if (isset($clients_debug_channels['dd'])) {
      ddl($data, get_class($this));
    }
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| ClientsHandlerEntity:: | function | Constructor method. Overrides Entity:: | 1 | |
| 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 | Call a remote method with an array of parameters. | 4 | |
| clients_connection_base:: | function | Alter the connection settings form. | 3 | |
| clients_connection_base:: | function | Submit handler for saving/updating connections of this class. | 2 | |
| clients_connection_base:: | function | Load the credentials into the connection. | ||
| clients_connection_base:: | function | Declare an array of properties which should be treated as credentials. | 2 | |
| 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. | ||
| 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. | 
