7a31fa4d1e3c8ba2421f597158634ddc26d027e7
[tine20] / tine20 / library / zf1ext / Zend / Service / Tine20.php
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  * @author     Lars Kneschke <l.kneschke@metaways.de>
18  * @copyright  Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
19  * @license    http://framework.zend.com/license/new-bsd     New BSD License
20  */
21
22 /**
23  * @category   Zend
24  * @package    Zend_Service
25  * @author     Lars Kneschke <l.kneschke@metaways.de>
26  * @copyright  Copyright (c) 2009-2012 Metaways Infosystems GmbH (http://www.metaways.de)
27  * @license    http://framework.zend.com/license/new-bsd     New BSD License
28  */
29 class Zend_Service_Tine20 extends Zend_Json_Client
30 {
31     /**
32      * @var string json key required to send with any request
33      */
34     protected $_jsonKey;
35     
36     /**
37      * the url of the Tine 2.0 installation
38      * 
39      * @var string (for example http://demo.tine20.org/index.php)
40      */
41     protected $_url;
42     
43     /**
44      * @var array stores information about the account logged in
45      */
46     protected $_account;
47     
48     /**
49      * @var Zend_Cache_Core
50      */
51     protected $_cache;
52     
53     /**
54      * constructor for Zend_Service_Tine20
55      * @param string           $url         the url of the Tine 2.0 installation
56      * @param Zend_Http_Client $httpClient
57      * @return void
58      */
59     public function __construct($url, $httpClient = null)
60     {
61         $this->_url = $url;
62         
63         if(!$httpClient instanceof Zend_Http_Client) {
64             $httpClient = new Zend_Http_Client();
65         }
66         
67         if(!$httpClient->getCookieJar() instanceof Zend_Http_CookieJar) {
68             $httpClient->setCookieJar();
69         }
70         
71         parent::__construct($url, $httpClient);
72     }    
73
74     public function setCache(Zend_Cache_Core $_cache)
75     {
76         $this->_cache = $_cache;
77     }
78
79     /**
80      * login to Tine 2.0 installation 
81      * 
82      * @param string $loginname
83      * @param string $password
84      * @return array decoded JSON responce
85      * @throws Zend_Service_Exception
86      */
87     public function login($loginname, $password)
88     {
89         $this->setSkipSystemLookup(true);
90         
91         $response = $this->call('Tinebase.login', array(
92             'username'  => $loginname,
93             'password'  => $password
94         ));
95         
96         if($response['success'] !== true) {
97             throw new Zend_Service_Exception($response['errorMessage']);
98         }
99         
100         $this->_jsonKey = $response['jsonKey'];
101         $this->_account = $response['account'];
102         $this->getHttpClient()->setHeaders('X-Tine20-JsonKey', $this->_jsonKey);
103         
104         if($this->_cache instanceof Zend_Cache_Core) {
105             if($this->_cache->test('tine20PrivateSMD')) {
106                 $smd = $this->_cache->load('tine20PrivateSMD');
107                 $this->getIntrospector()->setSMD($smd);
108             } else {
109                 $smd = $this->getIntrospector()->fetchSMD();
110                 $this->_cache->save($smd, 'tine20PrivateSMD');
111             }
112         } else {
113             $this->getIntrospector()->fetchSMD();
114         }
115         
116         $this->setSkipSystemLookup(false);
117         
118         return $response;
119     }
120
121     /**
122      * logout from Tine 2.0 installation
123      * 
124      * @return array decoded JSON responce
125      */
126     public function logout()
127     {
128         $this->setSkipSystemLookup(true);
129         
130         $response = $this->call('Tinebase.logout');
131         
132         $this->_jsonKey = null;
133         $this->_account = null;
134         
135         // unset header
136         $this->getHttpClient()->setHeaders('X-Tine20-JsonKey');
137         
138         $this->setSkipSystemLookup(false);
139         
140         return $response;
141     }
142     
143 }