_credential = new Zend_Service_DeveloperGarden_Credential(); while (list($name, $value) = each($options)) { switch (ucfirst($name)) { case 'Username' : $this->_credential->setUsername($value); break; case 'Password' : $this->_credential->setPassword($value); break; case 'Realm' : $this->_credential->setRealm($value); break; case 'Environment' : $this->setEnvironment($value); } } if (empty($this->_wsdlFile)) { require_once 'Zend/Service/DeveloperGarden/Exception.php'; throw new Zend_Service_DeveloperGarden_Exception('_wsdlFile not set for this service.'); } if (!empty($this->_wsdlFileLocal)) { $this->_wsdlFileLocal = realpath(dirname(__FILE__) . '/../' . $this->_wsdlFileLocal); } if (empty($this->_wsdlFileLocal) || $this->_wsdlFileLocal === false) { require_once 'Zend/Service/DeveloperGarden/Exception.php'; throw new Zend_Service_DeveloperGarden_Exception('_wsdlFileLocal not set for this service.'); } } /** * Set an option * * @param string $name * @param mixed $value * @throws Zend_Service_DeveloperGarden_Client_Exception * @return Zend_Service_DeveloperGarden_Client_ClientAbstract */ public function setOption($name, $value) { if (!is_string($name)) { require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; throw new Zend_Service_DeveloperGarden_Client_Exception('Incorrect option name: ' . $name); } $name = strtolower($name); if (array_key_exists($name, $this->_options)) { $this->_options[$name] = $value; } return $this; } /** * get an option value from the internal options object * * @param string $name * @return mixed */ public function getOption($name) { $name = strtolower($name); if (array_key_exists($name, $this->_options)) { return $this->_options[$name]; } return null; } /** * returns the internal soap client * if not allready exists we create an instance of * Zend_Soap_Client * * @final * @return Zend_Service_DeveloperGarden_Client_Soap */ final public function getSoapClient() { if ($this->_soapClient === null) { /** * init the soapClient */ $this->_soapClient = new Zend_Service_DeveloperGarden_Client_Soap( $this->getWsdl(), $this->getClientOptions() ); $this->_soapClient->setCredential($this->_credential); $tokenService = new Zend_Service_DeveloperGarden_SecurityTokenServer( array( 'username' => $this->_credential->getUsername(), 'password' => $this->_credential->getPassword(), 'environment' => $this->getEnvironment(), 'realm' => $this->_credential->getRealm(), ) ); $this->_soapClient->setTokenService($tokenService); } return $this->_soapClient; } /** * sets new environment * * @param int $environment * @return Zend_Service_DeveloperGarden_Client_ClientAbstract */ public function setEnvironment($environment) { self::checkEnvironment($environment); $this->_serviceEnvironment = $environment; return $this; } /** * returns the current configured environemnt * * @return int */ public function getEnvironment() { return $this->_serviceEnvironment; } /** * returns the wsdl file path, a uri or the local path * * @return string */ public function getWsdl() { if ($this->_useLocalWsdl) { $retVal = $this->_wsdlFileLocal; } else { $retVal = $this->_wsdlFile; } return $retVal; } /** * switch to the local wsdl file usage * * @param boolen $use * @return Zend_Service_DeveloperGarden_Client_ClientAbstract */ public function setUseLocalWsdl($use = true) { $this->_useLocalWsdl = (boolean) $use; return $this; } /** * sets a new wsdl file * * @param string $wsdlFile * @return Zend_Service_DeveloperGarden_Client_ClientAbstract */ public function setWsdl($wsdlFile = null) { if (empty($wsdlFile)) { require_once 'Zend/Service/DeveloperGarden/Exception.php'; throw new Zend_Service_DeveloperGarden_Exception('_wsdlFile not set for this service.'); } $this->_wsdlFile = $wsdlFile; return $this; } /** * sets a new local wsdl file * * @param string $wsdlFile * @return Zend_Service_DeveloperGarden_Client_ClientAbstract */ public function setLocalWsdl($wsdlFile = null) { if (empty($wsdlFile)) { require_once 'Zend/Service/DeveloperGarden/Exception.php'; throw new Zend_Service_DeveloperGarden_Exception('_wsdlFileLocal not set for this service.'); } $this->_wsdlFileLocal = $wsdlFile; return $this; } /** * returns an array with configured options for this client * * @return array */ public function getClientOptions() { $options = array( 'soap_version' => SOAP_1_1, ); if (!empty($this->_classMap)) { $options['classmap'] = $this->_classMap; } $wsdlCache = Zend_Service_DeveloperGarden_SecurityTokenServer_Cache::getWsdlCache(); if (!is_null($wsdlCache)) { $options['cache_wsdl'] = $wsdlCache; } return $options; } /** * returns the internal credential object * * @return Zend_Service_DeveloperGarden_Credential */ public function getCredential() { return $this->_credential; } /** * helper method to create const arrays * @return null */ static protected function _buildConstArray() { $r = new ReflectionClass(__CLASS__); foreach ($r->getConstants() as $k => $v) { $s = explode('_', $k, 2); if (!isset(self::$_consts[$s[0]])) { self::$_consts[$s[0]] = array(); } self::$_consts[$s[0]][$v] = $k; } } /** * returns an array of all available environments * * @return array */ static public function getParticipantActions() { if (empty(self::$_consts)) { self::_buildConstArray(); } return self::$_consts['PARTICIPANT']; } /** * checks if the given action is valid * otherwise it @throws Zend_Service_DeveloperGarden_Exception * * @param int $action * @throws Zend_Service_DeveloperGarden_Client_Exception * @return void */ static public function checkParticipantAction($action) { if (!array_key_exists($action, self::getParticipantActions())) { require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; throw new Zend_Service_DeveloperGarden_Client_Exception( 'Wrong Participant Action ' . $action . ' supplied.' ); } } /** * returns an array of all available environments * * @return array */ static public function getEnvironments() { if (empty(self::$_consts)) { self::_buildConstArray(); } return self::$_consts['ENV']; } /** * checks if the given environemnt is valid * otherwise it @throws Zend_Service_DeveloperGarden_Client_Exception * * @param int $environment * @throws Zend_Service_DeveloperGarden_Client_Exception * @return void */ static public function checkEnvironment($environment) { if (!array_key_exists($environment, self::getEnvironments())) { require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; throw new Zend_Service_DeveloperGarden_Client_Exception( 'Wrong environment ' . $environment . ' supplied.' ); } } }