]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - Zend/Gdata/Health.php
Release 6.5.0
[Github/sugarcrm.git] / Zend / Gdata / Health.php
1 <?php
2
3 /**
4  * Zend Framework
5  *
6  * LICENSE
7  *
8  * This source file is subject to the new BSD license that is bundled
9  * with this package in the file LICENSE.txt.
10  * It is also available through the world-wide-web at this URL:
11  * http://framework.zend.com/license/new-bsd
12  * If you did not receive a copy of the license and are unable to
13  * obtain it through the world-wide-web, please send an email
14  * to license@zend.com so we can send you a copy immediately.
15  *
16  * @category   Zend
17  * @package    Zend_Gdata
18  * @subpackage Health
19  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
20  * @license    http://framework.zend.com/license/new-bsd     New BSD License
21
22  */
23
24 /**
25  * @see Zend_Gdata
26  */
27 require_once 'Zend/Gdata.php';
28
29 /**
30  * @see Zend_Gdata_Health_ProfileFeed
31  */
32 require_once 'Zend/Gdata/Health/ProfileFeed.php';
33
34 /**
35  * @see Zend_Gdata_Health_ProfileListFeed
36  */
37 require_once 'Zend/Gdata/Health/ProfileListFeed.php';
38
39 /**
40  * @see Zend_Gdata_Health_ProfileListEntry
41  */
42 require_once 'Zend/Gdata/Health/ProfileListEntry.php';
43
44 /**
45  * @see Zend_Gdata_Health_ProfileEntry
46  */
47 require_once 'Zend/Gdata/Health/ProfileEntry.php';
48
49 /**
50  * Service class for interacting with the Google Health Data API
51  *
52  * @link http://code.google.com/apis/health
53  *
54  * @category   Zend
55  * @package    Zend_Gdata
56  * @subpackage Health
57  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
58  * @license    http://framework.zend.com/license/new-bsd     New BSD License
59  */
60 class Zend_Gdata_Health extends Zend_Gdata
61 {
62     /**
63      * URIs of the AuthSub/OAuth feeds.
64      */
65     const AUTHSUB_PROFILE_FEED_URI =
66         'https://www.google.com/health/feeds/profile/default';
67     const AUTHSUB_REGISTER_FEED_URI =
68         'https://www.google.com/health/feeds/register/default';
69
70     /**
71      * URIs of the ClientLogin feeds.
72      */
73     const CLIENTLOGIN_PROFILELIST_FEED_URI =
74         'https://www.google.com/health/feeds/profile/list';
75     const CLIENTLOGIN_PROFILE_FEED_URI =
76         'https://www.google.com/health/feeds/profile/ui';
77     const CLIENTLOGIN_REGISTER_FEED_URI =
78         'https://www.google.com/health/feeds/register/ui';
79
80     /**
81      * Authentication service names for Google Health and the H9 Sandbox.
82      */
83     const HEALTH_SERVICE_NAME = 'health';
84     const H9_SANDBOX_SERVICE_NAME = 'weaver';
85
86     /**
87      * Profile ID used for all API interactions.  This can only be set when
88      * using ClientLogin for authentication.
89      *
90      * @var string
91      */
92     private $_profileID = null;
93
94     /**
95      * True if API calls should be made to the H9 developer sandbox at /h9
96      * rather than /health
97      *
98      * @var bool
99      */
100     private $_useH9Sandbox = false;
101
102     public static $namespaces =
103         array('ccr' => 'urn:astm-org:CCR',
104               'batch' => 'http://schemas.google.com/gdata/batch',
105               'h9m' => 'http://schemas.google.com/health/metadata',
106               'gAcl' => 'http://schemas.google.com/acl/2007',
107               'gd' => 'http://schemas.google.com/g/2005');
108
109     /**
110      * Create Zend_Gdata_Health object
111      *
112      * @param Zend_Http_Client $client (optional) The HTTP client to use when
113      *     when communicating with the Google Health servers.
114      * @param string $applicationId The identity of the application in the form
115      *     of Company-AppName-Version
116      * @param bool $useH9Sandbox True if the H9 Developer's Sandbox should be
117      *     used instead of production Google Health.
118      */
119     public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0', $useH9Sandbox = false)
120     {
121         $this->registerPackage('Zend_Gdata_Health');
122         $this->registerPackage('Zend_Gdata_Health_Extension_Ccr');
123         parent::__construct($client, $applicationId);
124         $this->_useH9Sandbox = $useH9Sandbox;
125     }
126
127     /**
128      * Gets the id of the user's profile
129      *
130      * @return string The profile id
131      */
132     public function getProfileID()
133     {
134         return $this->_profileID;
135     }
136
137     /**
138      * Sets which of the user's profiles will be used
139      *
140      * @param string $id The profile ID
141      * @return Zend_Gdata_Health Provides a fluent interface
142      */
143     public function setProfileID($id) {
144         $this->_profileID = $id;
145         return $this;
146     }
147
148      /**
149      * Retrieves the list of profiles associated with the user's ClientLogin
150      * credentials.
151      *
152      * @param string $query The query of the feed as a URL or Query object
153      * @return Zend_Gdata_Feed
154      */
155     public function getHealthProfileListFeed($query = null)
156     {
157         if ($this->_httpClient->getClientLoginToken() === null) {
158             require_once 'Zend/Gdata/App/AuthException.php';
159             throw new Zend_Gdata_App_AuthException(
160                 'Profiles list feed is only available when using ClientLogin');
161         }
162
163         if($query === null)  {
164             $uri = self::CLIENTLOGIN_PROFILELIST_FEED_URI;
165         } else if ($query instanceof Zend_Gdata_Query) {
166             $uri = $query->getQueryUrl();
167         } else {
168             $uri = $query;
169         }
170
171         // use correct feed for /h9 or /health
172         if ($this->_useH9Sandbox) {
173             $uri = preg_replace('/\/health\//', '/h9/', $uri);
174         }
175
176         return parent::getFeed($uri, 'Zend_Gdata_Health_ProfileListFeed');
177     }
178
179     /**
180      * Retrieve a user's profile as a feed object.  If ClientLogin is used, the
181      * profile associated with $this->_profileID is returned, otherwise
182      * the profile associated with the AuthSub token is read.
183      *
184      * @param mixed $query The query for the feed, as a URL or Query
185      * @return Zend_Gdata_Health_ProfileFeed
186      */
187     public function getHealthProfileFeed($query = null)
188     {
189         if ($this->_httpClient->getClientLoginToken() !== null &&
190             $this->getProfileID() == null) {
191             require_once 'Zend/Gdata/App/AuthException.php';
192             throw new Zend_Gdata_App_AuthException(
193                 'Profile ID must not be null. Did you call setProfileID()?');
194         }
195
196         if ($query instanceof Zend_Gdata_Query) {
197             $uri = $query->getQueryUrl();
198         } else if ($this->_httpClient->getClientLoginToken() !== null &&
199                    $query == null) {
200             $uri = self::CLIENTLOGIN_PROFILE_FEED_URI . '/' . $this->getProfileID();
201         } else if ($query === null) {
202             $uri = self::AUTHSUB_PROFILE_FEED_URI;
203         } else {
204             $uri = $query;
205         }
206
207         // use correct feed for /h9 or /health
208         if ($this->_useH9Sandbox) {
209             $uri = preg_replace('/\/health\//', '/h9/', $uri);
210         }
211
212         return parent::getFeed($uri, 'Zend_Gdata_Health_ProfileFeed');
213     }
214
215     /**
216      * Retrieve a profile entry object
217      *
218      * @param mixed $query The query for the feed, as a URL or Query
219      * @return Zend_Gdata_Health_ProfileEntry
220      */
221     public function getHealthProfileEntry($query = null)
222     {
223         if ($query === null) {
224             require_once 'Zend/Gdata/App/InvalidArgumentException.php';
225             throw new Zend_Gdata_App_InvalidArgumentException(
226                 'Query must not be null');
227         } else if ($query instanceof Zend_Gdata_Query) {
228             $uri = $query->getQueryUrl();
229         } else {
230             $uri = $query;
231         }
232         return parent::getEntry($uri, 'Zend_Gdata_Health_ProfileEntry');
233     }
234
235     /**
236      * Posts a new notice using the register feed.  This function constructs
237      * the atom profile entry.
238      *
239      * @param string $subject The subject line of the notice
240      * @param string $body The message body of the notice
241      * @param string $bodyType The (optional) type of message body
242      *     (text, xhtml, html, etc.)
243      * @param string $ccrXML The (optional) CCR to add to the user's profile
244      * @return Zend_Gdata_Health_ProfileEntry
245      */
246     public function sendHealthNotice($subject, $body, $bodyType = null, $ccrXML = null)
247     {
248         if ($this->_httpClient->getClientLoginToken()) {
249             $profileID = $this->getProfileID();
250             if ($profileID !== null) {
251                 $uri = self::CLIENTLOGIN_REGISTER_FEED_URI . '/' . $profileID;
252             } else {
253                 require_once 'Zend/Gdata/App/AuthException.php';
254                 throw new Zend_Gdata_App_AuthException(
255                     'Profile ID must not be null. Did you call setProfileID()?');
256             }
257         } else {
258             $uri = self::AUTHSUB_REGISTER_FEED_URI;
259         }
260
261         $entry = new Zend_Gdata_Health_ProfileEntry();
262         $entry->title = $this->newTitle($subject);
263         $entry->content = $this->newContent($body);
264         $entry->content->type = $bodyType ? $bodyType : 'text';
265         $entry->setCcr($ccrXML);
266
267         // use correct feed for /h9 or /health
268         if ($this->_useH9Sandbox) {
269             $uri = preg_replace('/\/health\//', '/h9/', $uri);
270         }
271
272         return $this->insertEntry($entry, $uri, 'Zend_Gdata_Health_ProfileEntry');
273     }
274 }