data.php
4.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
<?php
/**
* @package Joomla.Platform
* @subpackage Google
*
* @copyright Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved
* @license GNU General Public License version 2 or later; see LICENSE
*/
defined('JPATH_PLATFORM') or die;
use Joomla\Registry\Registry;
/**
* Google API data class for the Joomla Platform.
*
* @since 3.1.4
* @deprecated 4.0 Use the `joomla/google` package via Composer instead
*/
abstract class JGoogleData
{
/**
* @var Registry Options for the Google data object.
* @since 3.1.4
*/
protected $options;
/**
* @var JGoogleAuth Authentication client for the Google data object.
* @since 3.1.4
*/
protected $auth;
/**
* Constructor.
*
* @param Registry $options Google options object.
* @param JGoogleAuth $auth Google data http client object.
*
* @since 3.1.4
*/
public function __construct(Registry $options = null, JGoogleAuth $auth = null)
{
$this->options = isset($options) ? $options : new Registry;
$this->auth = isset($auth) ? $auth : new JGoogleAuthOauth2($this->options);
}
/**
* Method to authenticate to Google
*
* @return boolean True on success.
*
* @since 3.1.4
*/
public function authenticate()
{
return $this->auth->authenticate();
}
/**
* Check authentication
*
* @return boolean True if authenticated.
*
* @since 3.1.4
*/
public function isAuthenticated()
{
return $this->auth->isAuthenticated();
}
/**
* Method to validate XML
*
* @param string $data XML data to be parsed
*
* @return SimpleXMLElement XMLElement of parsed data
*
* @since 3.1.4
* @throws UnexpectedValueException
*/
protected static function safeXml($data)
{
try
{
return new SimpleXMLElement($data, LIBXML_NOWARNING | LIBXML_NOERROR);
}
catch (Exception $e)
{
throw new UnexpectedValueException("Unexpected data received from Google: `$data`.", $e->getCode(), $e);
}
}
/**
* Method to retrieve a list of data
*
* @param array $url URL to GET
* @param int $maxpages Maximum number of pages to return
* @param string $token Next page token
*
* @return mixed Data from Google
*
* @since 3.1.4
* @throws UnexpectedValueException
*/
protected function listGetData($url, $maxpages = 1, $token = null)
{
$qurl = $url;
if (strpos($url, '&') && isset($token))
{
$qurl .= '&pageToken=' . $token;
}
elseif (isset($token))
{
$qurl .= 'pageToken=' . $token;
}
$jdata = $this->query($qurl);
$data = json_decode($jdata->body, true);
if ($data && array_key_exists('items', $data))
{
if ($maxpages != 1 && array_key_exists('nextPageToken', $data))
{
$data['items'] = array_merge($data['items'], $this->listGetData($url, $maxpages - 1, $data['nextPageToken']));
}
return $data['items'];
}
elseif ($data)
{
return array();
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
/**
* Method to retrieve data from Google
*
* @param string $url The URL for the request.
* @param mixed $data The data to include in the request.
* @param array $headers The headers to send with the request.
* @param string $method The type of http request to send.
*
* @return mixed Data from Google.
*
* @since 3.1.4
*/
protected function query($url, $data = null, $headers = null, $method = 'get')
{
return $this->auth->query($url, $data, $headers, $method);
}
/**
* Get an option from the JGoogleData instance.
*
* @param string $key The name of the option to get.
*
* @return mixed The option value.
*
* @since 3.1.4
*/
public function getOption($key)
{
return $this->options->get($key);
}
/**
* Set an option for the JGoogleData instance.
*
* @param string $key The name of the option to set.
* @param mixed $value The option value to set.
*
* @return JGoogleData This object for method chaining.
*
* @since 3.1.4
*/
public function setOption($key, $value)
{
$this->options->set($key, $value);
return $this;
}
}