PageRenderTime 37ms CodeModel.GetById 28ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/Service/LiveDocx.php

https://bitbucket.org/bigstylee/zend-framework
PHP | 415 lines | 151 code | 33 blank | 231 comment | 10 complexity | cb74e80b638ab1226ebb5492845c57b6 MD5 | raw file
  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 license@zend.com so we can send you a copy immediately.
 14 *
 15 * @category   Zend
 16 * @package    Zend_Service
 17 * @subpackage LiveDocx
 18 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 19 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 20 * @version    $Id: LiveDocx.php 25024 2012-07-30 15:08:15Z rob $
 21 */
 22
 23/**
 24 * @category   Zend
 25 * @package    Zend_Service
 26 * @subpackage LiveDocx
 27 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 28 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 29 * @since      LiveDocx 1.0
 30 */
 31class Zend_Service_LiveDocx
 32{
 33    /**
 34     * LiveDocx service version
 35     * @since LiveDocx 1.0
 36     */
 37    const VERSION = '2.0';
 38
 39    /**
 40     * SOAP client used to connect to LiveDocx service
 41     * @var   Zend_Soap_Client
 42     * @since LiveDocx 1.0
 43     */
 44    protected $_soapClient;
 45
 46    /**
 47     * WSDL of LiveDocx web service
 48     * @var   string
 49     * @since LiveDocx 1.0
 50     */
 51    protected $_wsdl;
 52
 53    /**
 54     * Array of credentials (username and password) to log into backend server
 55     * @var   array
 56     * @since LiveDocx 1.2
 57     */
 58    protected $_credentials;
 59
 60    /**
 61     * Set to true, when session is logged into backend server
 62     * @var   boolean
 63     * @since LiveDocx 1.2
 64     */
 65    protected $_loggedIn;
 66
 67    /**
 68     * Constructor
 69     *
 70     * Optionally, pass an array of options (or Zend_Config object).
 71     *
 72     * If an option with the key 'soapClient' is provided, that value will be
 73     * used to set the internal SOAP client used to connect to the LiveDocx
 74     * service.
 75     *
 76     * Use 'soapClient' in the case that you have a dedicated or (locally
 77     * installed) licensed LiveDocx server. For example:
 78     *
 79     * {code}
 80     * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
 81     *     array (
 82     *         'username'   => 'myUsername',
 83     *         'password'   => 'myPassword',
 84     *         'soapClient' => new Zend_Soap_Client('https://api.example.com/path/mailmerge.asmx?WSDL')
 85     *     )
 86     * );
 87     * {code}
 88     *
 89     * Replace the URI of the WSDL in the constructor of Zend_Soap_Client with
 90     * that of your dedicated or licensed LiveDocx server.
 91     *
 92     * If you are using the public LiveDocx server, simply pass 'username' and
 93     * 'password'. For example:
 94     *
 95     * {code}
 96     * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge(
 97     *     array (
 98     *         'username' => 'myUsername',
 99     *         'password' => 'myPassword'
100     *     )
101     * );
102     * {code}
103     *
104     * If you prefer to not pass the username and password through the
105     * constructor, you can also call the following methods:
106     *
107     * {code}
108     * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge();
109     *
110     * $phpLiveDocx->setUsername('myUsername')
111     *             ->setPassword('myPassword');
112     * {/code}
113     *
114     * Or, if you want to specify your own SoapClient:
115     *
116     * {code}
117     * $phpLiveDocx = new Zend_Service_LiveDocx_MailMerge();
118     *
119     * $phpLiveDocx->setUsername('myUsername')
120     *             ->setPassword('myPassword');
121     *
122     * $phpLiveDocx->setSoapClient(
123     *     new Zend_Soap_Client('https://api.example.com/path/mailmerge.asmx?WSDL')
124     * );
125     * {/code}
126     *
127     * @param  array|Zend_Config $options
128     * @return void
129     * @throws Zend_Service_LiveDocx_Exception
130     * @since  LiveDocx 1.0
131     */
132    public function __construct($options = null)
133    {
134        $this->_credentials = array();
135        $this->_loggedIn = false;
136
137        if ($options instanceof Zend_Config) {
138            $options = $options->toArray();
139        }
140
141        if (is_array($options)) {
142            $this->setOptions($options);
143        }
144    }
145
146    /**
147     * Set options
148     * One or more of username, password, soapClient
149     *
150     * @param  array $options
151     * @return Zend_Service_LiveDocx
152     * @since  LiveDocx 1.2
153     */
154    public function setOptions(array $options)
155    {
156        foreach ($options as $key => $value) {
157            $method = 'set' . $key;
158            if (method_exists($this, $method)) {
159                $this->$method($value);
160            }
161        }
162
163        return $this;
164    }
165
166    /**
167     * Clean up and log out of LiveDocx service
168     *
169     * @return boolean
170     * @since  LiveDocx 1.0
171     */
172    public function __destruct()
173    {
174        return $this->logOut();
175    }
176
177    /**
178     * Init Soap client - connect to SOAP service
179     *
180     * @param  string $endpoint
181     * @throws Zend_Service_LiveDocx_Exception
182     * @return void
183     * @since  LiveDocx 1.2
184     */
185    protected function _initSoapClient($endpoint)
186    {
187        try {
188            require_once 'Zend/Soap/Client.php';
189            $this->_soapClient = new Zend_Soap_Client();
190            $this->_soapClient->setWsdl($endpoint);
191        } catch (Zend_Soap_Client_Exception $e) {
192            require_once 'Zend/Service/LiveDocx/Exception.php';
193            throw new Zend_Service_LiveDocx_Exception('Cannot connect to LiveDocx service at ' . $endpoint, 0, $e);
194        }
195    }
196
197    /**
198     * Get SOAP client
199     *
200     * @return Zend_Soap_Client
201     * @since  LiveDocx 1.2
202     */
203    public function getSoapClient()
204    {
205        return $this->_soapClient;
206    }
207
208    /**
209     * Set SOAP client
210     *
211     * @param  Zend_Soap_Client $soapClient
212     * @return Zend_Service_LiveDocx
213     * @since  LiveDocx 1.2
214     */
215    public function setSoapClient(Zend_Soap_Client $soapClient)
216    {
217        $this->_soapClient = $soapClient;
218        return $this;
219    }
220
221    /**
222     * Log in to LiveDocx service
223     *
224     * @param string $username
225     * @param string $password
226     *
227     * @throws Zend_Service_LiveDocx_Exception
228     * @return boolean
229     * @since  LiveDocx 1.2
230     */
231    public function logIn()
232    {
233        if (!$this->isLoggedIn()) {
234            if (null === $this->getUsername()) {
235                require_once 'Zend/Service/LiveDocx/Exception.php';
236                throw new Zend_Service_LiveDocx_Exception(
237                    'Username has not been set. To set username specify the options array in the constructor or call setUsername($username) after instantiation'
238                );
239            }
240
241            if (null === $this->getPassword()) {
242                require_once 'Zend/Service/LiveDocx/Exception.php';
243                throw new Zend_Service_LiveDocx_Exception(
244                    'Password has not been set. To set password specify the options array in the constructor or call setPassword($password) after instantiation'
245                );
246            }
247
248            if (null === $this->getSoapClient()) {
249                $this->_initSoapClient($this->_wsdl);
250            }
251
252            try {
253                $this->getSoapClient()->LogIn(array(
254                    'username' => $this->getUsername(),
255                    'password' => $this->getPassword(),
256                ));
257                $this->_loggedIn = true;
258            } catch (Exception $e) {
259                require_once 'Zend/Service/LiveDocx/Exception.php';
260                throw new Zend_Service_LiveDocx_Exception(
261                    'Cannot login into LiveDocx service - username and/or password are invalid', 0, $e
262                );
263            }
264        }
265
266        return $this->_loggedIn;
267    }
268
269    /**
270     * Log out of the LiveDocx service
271     *
272     * @throws Zend_Service_LiveDocx_Exception
273     * @return boolean
274     * @since  LiveDocx 1.2
275     */
276    public function logOut()
277    {
278        if ($this->isLoggedIn()) {
279            try {
280                $this->getSoapClient()->LogOut();
281                $this->_loggedIn = false;
282            } catch (Exception $e) {
283                require_once 'Zend/Service/LiveDocx/Exception.php';
284                throw new Zend_Service_LiveDocx_Exception(
285                    'Cannot log out of LiveDocx service', 0, $e
286                );
287            }
288        }
289
290        return $this->_loggedIn;
291    }
292
293    /**
294     * Return true, if session is currently logged into the backend server
295     *
296     * @return boolean
297     * @since  LiveDocx 1.2
298     */
299    public function isLoggedIn()
300    {
301        return $this->_loggedIn;
302    }
303
304    /**
305     * Set username
306     *
307     * @return Zend_Service_LiveDocx
308     * @since  LiveDocx 1.0
309     */
310    public function setUsername($username)
311    {
312        $this->_credentials['username'] = $username;
313        return $this;
314    }
315
316    /**
317     * Set password
318     *
319     * @return Zend_Service_LiveDocx
320     * @since  LiveDocx 1.0
321     */
322    public function setPassword($password)
323    {
324        $this->_credentials['password'] = $password;
325        return $this;
326    }
327
328    /**
329     * Set WSDL of LiveDocx web service
330     *
331     * @return Zend_Service_LiveDocx
332     * @since  LiveDocx 1.0
333     */
334    public function setWsdl($wsdl)
335    {
336        $this->_wsdl = $wsdl;
337        return $this;
338    }
339
340    /**
341     * Return current username
342     *
343     * @return string|null
344     * @since  LiveDocx 1.0
345     */
346    public function getUsername()
347    {
348        if (isset($this->_credentials['username'])) {
349            return $this->_credentials['username'];
350        }
351
352        return null;
353    }
354
355    /**
356     * Return current password
357     *
358     * @return string|null
359     * @since  LiveDocx 1.0
360     */
361    public function getPassword()
362    {
363        if (isset($this->_credentials['password'])) {
364            return $this->_credentials['password'];
365        }
366
367        return null;
368    }
369
370    /**
371     * Return WSDL of LiveDocx web service
372     *
373     * @return Zend_Service_LiveDocx
374     * @since  LiveDocx 1.0
375     */
376    public function getWsdl()
377    {
378        return $this->_wsdl;
379    }
380
381    /**
382     * Return the document format (extension) of a filename
383     *
384     * @param  string $filename
385     * @return string
386     * @since  LiveDocx 1.0
387     */
388    public function getFormat($filename)
389    {
390        return strtolower(substr(strrchr($filename, '.'), 1));
391    }
392
393    /**
394     * Return the current API version
395     *
396     * @return string
397     * @since  LiveDocx 1.0
398     */
399    public function getVersion()
400    {
401        return self::VERSION;
402    }
403
404    /**
405     * Compare the current API version with another version
406     *
407     * @param  string $version (STRING NOT FLOAT)
408     * @return int -1 (version is less than API version), 0 (versions are equal), or 1 (version is greater than API version)
409     * @since  LiveDocx 1.0
410     */
411    public function compareVersion($version)
412    {
413        return version_compare($version, $this->getVersion());
414    }
415}