File indexing completed on 2024-12-22 05:37:06

0001 <?php
0002 /**
0003  * Zend Framework
0004  *
0005  * LICENSE
0006  *
0007  * This source file is subject to the new BSD license that is bundled
0008  * with this package in the file LICENSE.txt.
0009  * It is also available through the world-wide-web at this URL:
0010  * http://framework.zend.com/license/new-bsd
0011  * If you did not receive a copy of the license and are unable to
0012  * obtain it through the world-wide-web, please send an email
0013  * to license@zend.com so we can send you a copy immediately.
0014  *
0015  * @category   Zend
0016  * @package    Zend_Service
0017  * @subpackage LiveDocx
0018  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0019  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0020  * @version    $Id$
0021  */
0022 
0023 /**
0024  * @category   Zend
0025  * @package    Zend_Service
0026  * @subpackage LiveDocx
0027  * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
0028  * @license    http://framework.zend.com/license/new-bsd     New BSD License
0029  * @since      LiveDocx 1.0
0030  */
0031 class Zend_Service_LiveDocx
0032 {
0033     /**
0034      * LiveDocx service version
0035      * @since LiveDocx 1.0
0036      */
0037     const VERSION = '2.0';
0038 
0039     /**
0040      * SOAP client used to connect to LiveDocx service
0041      * @var   Zend_Soap_Client
0042      * @since LiveDocx 1.0
0043      */
0044     protected $_soapClient;
0045 
0046     /**
0047      * WSDL of LiveDocx web service
0048      * @var   string
0049      * @since LiveDocx 1.0
0050      */
0051     protected $_wsdl;
0052 
0053     /**
0054      * Array of credentials (username and password) to log into backend server
0055      * @var   array
0056      * @since LiveDocx 1.2
0057      */
0058     protected $_credentials;
0059 
0060     /**
0061      * Set to true, when session is logged into backend server
0062      * @var   boolean
0063      * @since LiveDocx 1.2
0064      */
0065     protected $_loggedIn;
0066 
0067     /**
0068      * Constructor
0069      *
0070      * Optionally, pass an array of options (or Zend_Config object).
0071      *
0072      * If an option with the key 'soapClient' is provided, that value will be
0073      * used to set the internal SOAP client used to connect to the LiveDocx
0074      * service.
0075      *
0076      * Use 'soapClient' in the case that you have a dedicated or (locally
0077      * installed) licensed LiveDocx server. For example:
0078      *
0079      * {code}
0080      * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
0081      *     array (
0082      *         'username'   => 'myUsername',
0083      *         'password'   => 'myPassword',
0084      *         'soapClient' => new Zend_Soap_Client('https://api.example.com/path/mailmerge.asmx?WSDL')
0085      *     )
0086      * );
0087      * {code}
0088      *
0089      * Replace the URI of the WSDL in the constructor of Zend_Soap_Client with
0090      * that of your dedicated or licensed LiveDocx server.
0091      *
0092      * If you are using the public LiveDocx server, simply pass 'username' and
0093      * 'password'. For example:
0094      *
0095      * {code}
0096      * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
0097      *     array (
0098      *         'username' => 'myUsername',
0099      *         'password' => 'myPassword'
0100      *     )
0101      * );
0102      * {code}
0103      *
0104      * If you prefer to not pass the username and password through the
0105      * constructor, you can also call the following methods:
0106      *
0107      * {code}
0108      * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge();
0109      *
0110      * $phpLiveDocx->setUsername('myUsername')
0111      *             ->setPassword('myPassword');
0112      * {/code}
0113      *
0114      * Or, if you want to specify your own SoapClient:
0115      *
0116      * {code}
0117      * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge();
0118      *
0119      * $phpLiveDocx->setUsername('myUsername')
0120      *             ->setPassword('myPassword');
0121      *
0122      * $phpLiveDocx->setSoapClient(
0123      *     new Zend_Soap_Client('https://api.example.com/path/mailmerge.asmx?WSDL')
0124      * );
0125      * {/code}
0126      *
0127      * @param  array|Zend_Config $options
0128      * @throws Zend_Service_LiveDocx_Exception
0129      * @since  LiveDocx 1.0
0130      */
0131     public function __construct($options = null)
0132     {
0133         $this->_credentials = array();
0134         $this->_loggedIn = false;
0135 
0136         if ($options instanceof Zend_Config) {
0137             $options = $options->toArray();
0138         }
0139 
0140         if (is_array($options)) {
0141             $this->setOptions($options);
0142         }
0143     }
0144 
0145     /**
0146      * Set options
0147      * One or more of username, password, soapClient
0148      *
0149      * @param  array $options
0150      * @return Zend_Service_LiveDocx
0151      * @since  LiveDocx 1.2
0152      */
0153     public function setOptions(array $options)
0154     {
0155         foreach ($options as $key => $value) {
0156             $method = 'set' . $key;
0157             if (method_exists($this, $method)) {
0158                 $this->$method($value);
0159             }
0160         }
0161 
0162         return $this;
0163     }
0164 
0165     /**
0166      * Clean up and log out of LiveDocx service
0167      *
0168      * @return boolean
0169      * @since  LiveDocx 1.0
0170      */
0171     public function __destruct()
0172     {
0173         return $this->logOut();
0174     }
0175 
0176     /**
0177      * Init Soap client - connect to SOAP service
0178      *
0179      * @param  string $endpoint
0180      * @throws Zend_Service_LiveDocx_Exception
0181      * @return void
0182      * @since  LiveDocx 1.2
0183      */
0184     protected function _initSoapClient($endpoint)
0185     {
0186         try {
0187             // require_once 'Zend/Soap/Client.php';
0188             $this->_soapClient = new Zend_Soap_Client();
0189             $this->_soapClient->setWsdl($endpoint);
0190         } catch (Zend_Soap_Client_Exception $e) {
0191             // require_once 'Zend/Service/LiveDocx/Exception.php';
0192             throw new Zend_Service_LiveDocx_Exception('Cannot connect to LiveDocx service at ' . $endpoint, 0, $e);
0193         }
0194     }
0195 
0196     /**
0197      * Get SOAP client
0198      *
0199      * @return Zend_Soap_Client
0200      * @since  LiveDocx 1.2
0201      */
0202     public function getSoapClient()
0203     {
0204         return $this->_soapClient;
0205     }
0206 
0207     /**
0208      * Set SOAP client
0209      *
0210      * @param  Zend_Soap_Client $soapClient
0211      * @return Zend_Service_LiveDocx
0212      * @since  LiveDocx 1.2
0213      */
0214     public function setSoapClient(Zend_Soap_Client $soapClient)
0215     {
0216         $this->_soapClient = $soapClient;
0217         return $this;
0218     }
0219 
0220     /**
0221      * Log in to LiveDocx service
0222      *
0223      * @throws Zend_Service_LiveDocx_Exception
0224      * @return boolean
0225      * @since  LiveDocx 1.2
0226      */
0227     public function logIn()
0228     {
0229         if (!$this->isLoggedIn()) {
0230             if (null === $this->getUsername()) {
0231                 // require_once 'Zend/Service/LiveDocx/Exception.php';
0232                 throw new Zend_Service_LiveDocx_Exception(
0233                     'Username has not been set. To set username specify the options array in the constructor or call setUsername($username) after instantiation'
0234                 );
0235             }
0236 
0237             if (null === $this->getPassword()) {
0238                 // require_once 'Zend/Service/LiveDocx/Exception.php';
0239                 throw new Zend_Service_LiveDocx_Exception(
0240                     'Password has not been set. To set password specify the options array in the constructor or call setPassword($password) after instantiation'
0241                 );
0242             }
0243 
0244             if (null === $this->getSoapClient()) {
0245                 $this->_initSoapClient($this->_wsdl);
0246             }
0247 
0248             try {
0249                 $this->getSoapClient()->LogIn(array(
0250                     'username' => $this->getUsername(),
0251                     'password' => $this->getPassword(),
0252                 ));
0253                 $this->_loggedIn = true;
0254             } catch (Exception $e) {
0255                 // require_once 'Zend/Service/LiveDocx/Exception.php';
0256                 throw new Zend_Service_LiveDocx_Exception(
0257                     'Cannot login into LiveDocx service - username and/or password are invalid', 0, $e
0258                 );
0259             }
0260         }
0261 
0262         return $this->_loggedIn;
0263     }
0264 
0265     /**
0266      * Log out of the LiveDocx service
0267      *
0268      * @throws Zend_Service_LiveDocx_Exception
0269      * @return boolean
0270      * @since  LiveDocx 1.2
0271      */
0272     public function logOut()
0273     {
0274         if ($this->isLoggedIn()) {
0275             try {
0276                 $this->getSoapClient()->LogOut();
0277                 $this->_loggedIn = false;
0278             } catch (Exception $e) {
0279                 // require_once 'Zend/Service/LiveDocx/Exception.php';
0280                 throw new Zend_Service_LiveDocx_Exception(
0281                     'Cannot log out of LiveDocx service', 0, $e
0282                 );
0283             }
0284         }
0285 
0286         return $this->_loggedIn;
0287     }
0288 
0289     /**
0290      * Return true, if session is currently logged into the backend server
0291      *
0292      * @return boolean
0293      * @since  LiveDocx 1.2
0294      */
0295     public function isLoggedIn()
0296     {
0297         return $this->_loggedIn;
0298     }
0299 
0300     /**
0301      * Set username
0302      *
0303      * @param string $username
0304      * @return Zend_Service_LiveDocx
0305      * @since  LiveDocx 1.0
0306      */
0307     public function setUsername($username)
0308     {
0309         $this->_credentials['username'] = $username;
0310         return $this;
0311     }
0312 
0313     /**
0314      * Set password
0315      *
0316      * @param string $password
0317      * @return Zend_Service_LiveDocx
0318      * @since  LiveDocx 1.0
0319      */
0320     public function setPassword($password)
0321     {
0322         $this->_credentials['password'] = $password;
0323         return $this;
0324     }
0325 
0326     /**
0327      * Set WSDL of LiveDocx web service
0328      *
0329      * @param string $wsdl
0330      * @return Zend_Service_LiveDocx
0331      * @since  LiveDocx 1.0
0332      */
0333     public function setWsdl($wsdl)
0334     {
0335         $this->_wsdl = $wsdl;
0336         return $this;
0337     }
0338 
0339     /**
0340      * Return current username
0341      *
0342      * @return string|null
0343      * @since  LiveDocx 1.0
0344      */
0345     public function getUsername()
0346     {
0347         if (isset($this->_credentials['username'])) {
0348             return $this->_credentials['username'];
0349         }
0350 
0351         return null;
0352     }
0353 
0354     /**
0355      * Return current password
0356      *
0357      * @return string|null
0358      * @since  LiveDocx 1.0
0359      */
0360     public function getPassword()
0361     {
0362         if (isset($this->_credentials['password'])) {
0363             return $this->_credentials['password'];
0364         }
0365 
0366         return null;
0367     }
0368 
0369     /**
0370      * Return WSDL of LiveDocx web service
0371      *
0372      * @return string
0373      * @since  LiveDocx 1.0
0374      */
0375     public function getWsdl()
0376     {
0377         return $this->_wsdl;
0378     }
0379 
0380     /**
0381      * Return the document format (extension) of a filename
0382      *
0383      * @param  string $filename
0384      * @return string
0385      * @since  LiveDocx 1.0
0386      */
0387     public function getFormat($filename)
0388     {
0389         return strtolower(substr(strrchr($filename, '.'), 1));
0390     }
0391 
0392     /**
0393      * Return the current API version
0394      *
0395      * @return string
0396      * @since  LiveDocx 1.0
0397      */
0398     public function getVersion()
0399     {
0400         return self::VERSION;
0401     }
0402 
0403     /**
0404      * Compare the current API version with another version
0405      *
0406      * @param  string $version (STRING NOT FLOAT)
0407      * @return int -1 (version is less than API version), 0 (versions are equal), or 1 (version is greater than API version)
0408      * @since  LiveDocx 1.0
0409      */
0410     public function compareVersion($version)
0411     {
0412         return version_compare($version, $this->getVersion());
0413     }
0414 }