[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/zend/Zend/Service/StrikeIron/ -> Base.php (source)

   1  <?php
   2  /**
   3   * Zend Framework
   4   *
   5   * LICENSE
   6   *
   7   * This source file is subject to the new BSD license that is bundled
   8   * with this package in the file LICENSE.txt.
   9   * It is also available through the world-wide-web at this URL:
  10   * http://framework.zend.com/license/new-bsd
  11   * If you did not receive a copy of the license and are unable to
  12   * obtain it through the world-wide-web, please send an email
  13   * to [email protected] so we can send you a copy immediately.
  14   *
  15   * @category   Zend
  16   * @package    Zend_Service
  17   * @subpackage StrikeIron
  18   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  19   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  20   * @version    $Id$
  21   */
  22  
  23  
  24  /**
  25   * @see Zend_Service_StrikeIron_Decorator
  26   */
  27  require_once 'Zend/Service/StrikeIron/Decorator.php';
  28  
  29  
  30  /**
  31   * @category   Zend
  32   * @package    Zend_Service
  33   * @subpackage StrikeIron
  34   * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
  35   * @license    http://framework.zend.com/license/new-bsd     New BSD License
  36   */
  37  class Zend_Service_StrikeIron_Base
  38  {
  39      /**
  40       * Configuration options
  41       * @param array
  42       */
  43      protected $_options = array('username' => null,
  44                                  'password' => null,
  45                                  'client'   => null,
  46                                  'options'  => null,
  47                                  'headers'  => null,
  48                                  'wsdl'     => null);
  49  
  50      /**
  51       * Output headers returned by the last call to SOAPClient->__soapCall()
  52       * @param array
  53       */
  54      protected $_outputHeaders = array();
  55  
  56      /**
  57       * Class constructor
  58       *
  59       * @param  array  $options  Key/value pair options
  60       * @throws Zend_Service_StrikeIron_Exception
  61       */
  62      public function __construct($options = array())
  63      {
  64          if (!extension_loaded('soap')) {
  65              /**
  66               * @see Zend_Service_StrikeIron_Exception
  67               */
  68              require_once 'Zend/Service/StrikeIron/Exception.php';
  69              throw new Zend_Service_StrikeIron_Exception('SOAP extension is not enabled');
  70          }
  71  
  72          $this->_options  = array_merge($this->_options, $options);
  73  
  74          $this->_initSoapHeaders();
  75          $this->_initSoapClient();
  76      }
  77  
  78      /**
  79       * Proxy method calls to the SOAPClient instance, transforming method
  80       * calls and responses for convenience.
  81       *
  82       * @param  string  $method  Method name
  83       * @param  array   $params  Parameters for method
  84       * @return mixed            Result
  85       * @throws Zend_Service_StrikeIron_Exception
  86       */
  87      public function __call($method, $params)
  88      {
  89          // prepare method name and parameters for soap call
  90          list($method, $params) = $this->_transformCall($method, $params);
  91          $params = isset($params[0]) ? array($params[0]) : array();
  92  
  93          // make soap call, capturing the result and output headers
  94          try {
  95              $result = $this->_options['client']->__soapCall($method,
  96                                                              $params,
  97                                                              $this->_options['options'],
  98                                                              $this->_options['headers'],
  99                                                              $this->_outputHeaders);
 100          } catch (Exception $e) {
 101              $message = get_class($e) . ': ' . $e->getMessage();
 102              /**
 103               * @see Zend_Service_StrikeIron_Exception
 104               */
 105              require_once 'Zend/Service/StrikeIron/Exception.php';
 106              throw new Zend_Service_StrikeIron_Exception($message, $e->getCode(), $e);
 107          }
 108  
 109          // transform/decorate the result and return it
 110          $result = $this->_transformResult($result, $method, $params);
 111          return $result;
 112      }
 113  
 114      /**
 115       * Initialize the SOAPClient instance
 116       *
 117       * @return void
 118       */
 119      protected function _initSoapClient()
 120      {
 121          if (! isset($this->_options['options'])) {
 122              $this->_options['options'] = array();
 123          }
 124  
 125          if (! isset($this->_options['client'])) {
 126              $this->_options['client'] = new SoapClient($this->_options['wsdl'],
 127                                                         $this->_options['options']);
 128          }
 129      }
 130  
 131      /**
 132       * Initialize the headers to pass to SOAPClient->__soapCall()
 133       *
 134       * @return void
 135       * @throws Zend_Service_StrikeIron_Exception
 136       */
 137      protected function _initSoapHeaders()
 138      {
 139          // validate headers and check if LicenseInfo was given
 140          $foundLicenseInfo = false;
 141          if (isset($this->_options['headers'])) {
 142              if (! is_array($this->_options['headers'])) {
 143                  $this->_options['headers'] = array($this->_options['headers']);
 144              }
 145  
 146              foreach ($this->_options['headers'] as $header) {
 147                  if (! $header instanceof SoapHeader) {
 148                      /**
 149                       * @see Zend_Service_StrikeIron_Exception
 150                       */
 151                      require_once 'Zend/Service/StrikeIron/Exception.php';
 152                      throw new Zend_Service_StrikeIron_Exception('Header must be instance of SoapHeader');
 153                  } else if ($header->name == 'LicenseInfo') {
 154                      $foundLicenseInfo = true;
 155                      break;
 156                  }
 157              }
 158          } else {
 159              $this->_options['headers'] = array();
 160          }
 161  
 162          // add default LicenseInfo header if a custom one was not supplied
 163          if (! $foundLicenseInfo) {
 164              $this->_options['headers'][] = new SoapHeader('http://ws.strikeiron.com',
 165                              'LicenseInfo',
 166                              array('RegisteredUser' => array('UserID'   => $this->_options['username'],
 167                                                              'Password' => $this->_options['password'])));
 168          }
 169      }
 170  
 171      /**
 172       * Transform a method name or method parameters before sending them
 173       * to the remote service.  This can be useful for inflection or other
 174       * transforms to give the method call a more PHP-like interface.
 175       *
 176       * @see    __call()
 177       * @param  string  $method  Method name called from PHP
 178       * @param  mixed   $param   Parameters passed from PHP
 179       * @return array            [$method, $params] for SOAPClient->__soapCall()
 180       */
 181      protected function _transformCall($method, $params)
 182      {
 183          return array(ucfirst($method), $params);
 184      }
 185  
 186      /**
 187       * Transform the result returned from a method before returning
 188       * it to the PHP caller.  This can be useful for transforming
 189       * the SOAPClient returned result to be more PHP-like.
 190       *
 191       * The $method name and $params passed to the method are provided to
 192       * allow decisions to be made about how to transform the result based
 193       * on what was originally called.
 194       *
 195       * @see    __call()
 196       * @param  $result  Raw result returned from SOAPClient_>__soapCall()
 197       * @param  $method  Method name that was passed to SOAPClient->__soapCall()
 198       * @param  $params  Method parameters that were passed to SOAPClient->__soapCall()
 199       * @return mixed    Transformed result
 200       */
 201      protected function _transformResult($result, $method, $params)
 202      {
 203          $resultObjectName = "{$method}Result";
 204          if (isset($result->$resultObjectName)) {
 205              $result = $result->$resultObjectName;
 206          }
 207          if (is_object($result)) {
 208              $result = new Zend_Service_StrikeIron_Decorator($result, $resultObjectName);
 209          }
 210          return $result;
 211      }
 212  
 213      /**
 214       * Get the WSDL URL for this service.
 215       *
 216       * @return string
 217       */
 218      public function getWsdl()
 219      {
 220          return $this->_options['wsdl'];
 221      }
 222  
 223      /**
 224       * Get the SOAP Client instance for this service.
 225       */
 226      public function getSoapClient()
 227      {
 228          return $this->_options['client'];
 229      }
 230  
 231      /**
 232       * Get the StrikeIron output headers returned with the last method response.
 233       *
 234       * @return array
 235       */
 236      public function getLastOutputHeaders()
 237      {
 238          return $this->_outputHeaders;
 239      }
 240  
 241      /**
 242       * Get the StrikeIron subscription information for this service.
 243       * If any service method was recently called, the subscription info
 244       * should have been returned in the SOAP headers so it is cached
 245       * and returned from the cache.  Otherwise, the getRemainingHits()
 246       * method is called as a dummy to get the subscription info headers.
 247       *
 248       * @param  boolean  $now          Force a call to getRemainingHits instead of cache?
 249       * @param  string   $queryMethod  Method that will cause SubscriptionInfo header to be sent
 250       * @return Zend_Service_StrikeIron_Decorator  Decorated subscription info
 251       * @throws Zend_Service_StrikeIron_Exception
 252       */
 253      public function getSubscriptionInfo($now = false, $queryMethod = 'GetRemainingHits')
 254      {
 255          if ($now || empty($this->_outputHeaders['SubscriptionInfo'])) {
 256              $this->$queryMethod();
 257          }
 258  
 259          // capture subscription info if returned in output headers
 260          if (isset($this->_outputHeaders['SubscriptionInfo'])) {
 261              $info = (object)$this->_outputHeaders['SubscriptionInfo'];
 262              $subscriptionInfo = new Zend_Service_StrikeIron_Decorator($info, 'SubscriptionInfo');
 263          } else {
 264              $msg = 'No SubscriptionInfo header found in last output headers';
 265              /**
 266               * @see Zend_Service_StrikeIron_Exception
 267               */
 268              require_once 'Zend/Service/StrikeIron/Exception.php';
 269              throw new Zend_Service_StrikeIron_Exception($msg);
 270          }
 271  
 272          return $subscriptionInfo;
 273      }
 274  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1