You've already forked joomla_test
							
							
		
			
	
	
		
			186 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			186 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | /** | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Google | ||
|  |  * | ||
|  |  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved | ||
|  |  * @license     GNU General Public License version 2 or later; see LICENSE | ||
|  |  */ | ||
|  | 
 | ||
|  | defined('JPATH_PLATFORM') or die; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Google API data class for the Joomla Platform. | ||
|  |  * | ||
|  |  * @package     Joomla.Platform | ||
|  |  * @subpackage  Google | ||
|  |  * @since       12.3 | ||
|  |  */ | ||
|  | abstract class JGoogleData | ||
|  | { | ||
|  | 	/** | ||
|  | 	 * @var    JRegistry  Options for the Google data object. | ||
|  | 	 * @since  12.3 | ||
|  | 	 */ | ||
|  | 	protected $options; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * @var    JGoogleAuth  Authentication client for the Google data object. | ||
|  | 	 * @since  12.3 | ||
|  | 	 */ | ||
|  | 	protected $auth; | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Constructor. | ||
|  | 	 * | ||
|  | 	 * @param   JRegistry    $options  Google options object. | ||
|  | 	 * @param   JGoogleAuth  $auth     Google data http client object. | ||
|  | 	 * | ||
|  | 	 * @since   12.3 | ||
|  | 	 */ | ||
|  | 	public function __construct(JRegistry $options = null, JGoogleAuth $auth = null) | ||
|  | 	{ | ||
|  | 		$this->options = isset($options) ? $options : new JRegistry; | ||
|  | 		$this->auth = isset($auth) ? $auth : new JGoogleAuthOauth2($this->options); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Method to authenticate to Google | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True on success. | ||
|  | 	 * | ||
|  | 	 * @since   12.3 | ||
|  | 	 */ | ||
|  | 	public function authenticate() | ||
|  | 	{ | ||
|  | 		return $this->auth->authenticate(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Check authentication | ||
|  | 	 * | ||
|  | 	 * @return  boolean  True if authenticated. | ||
|  | 	 * | ||
|  | 	 * @since   12.3 | ||
|  | 	 */ | ||
|  | 	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   12.3 | ||
|  | 	 * @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`."); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * 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   12.3 | ||
|  | 	 * @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   12.3 | ||
|  | 	 */ | ||
|  | 	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   12.3 | ||
|  | 	 */ | ||
|  | 	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   12.3 | ||
|  | 	 */ | ||
|  | 	public function setOption($key, $value) | ||
|  | 	{ | ||
|  | 		$this->options->set($key, $value); | ||
|  | 
 | ||
|  | 		return $this; | ||
|  | 	} | ||
|  | } |