You are here

clients.inc in Web Service Clients 6

Same filename and directory in other branches
  1. 6.2 clients.inc
  2. 7 clients.inc
  3. 7.2 clients.inc

Base class for backends. Handles XML-RPC, REST calls and caching results

@author Django Beatty - adub

File

clients.inc
View source
<?php

/**
 * @file
 * Base class for backends. Handles XML-RPC, REST calls and caching results
 *
 * @author Django Beatty - adub
 */

/**
 *
 */
abstract class ClientsServicesBase {

  /**
   * Takes variable number of params after cacheid.
   */
  protected static function doCall($method, $cacheid) {
    $args = func_get_args();
    $args = array_slice($args, 2);

    // any extra params passed to this argument
    $cache_table = 'cache_clients';
    $cache_time = variable_get('clients_api_cache_time', '0');
    if ($cache_time == '0' || !($result = cache_get($cacheid, $cache_table))) {
      if ($method == 'xmlrpc') {
        $data = call_user_func_array('xmlrpc', $args);
      }
      elseif ($method == 'rest') {
        $data = call_user_func_array('drupal_http_request', $args);
      }
      else {
        $data = t('@method not yet supported', array(
          '@method' => $method,
        ));
      }

      // @todo error handling/reporting
      if ($cache_time != '0') {
        cache_set($cacheid, $data, $cache_table, $cache_time == 'cron' ? CACHE_TEMPORARY : time() + (int) $cache_time * 60);
      }
      $result = new stdClass();
      $result->data = $data;
      $result->created = time();
    }
    return $result;
  }

  /**
   * Connection extending classes must implement the interface below:
   */

  /**
   * Sets cacheid and parameters for the service/method and calls self::doCall()
   */
  public static abstract function call($serviceConfig, $serviceOptions);

}

Classes