first commit

This commit is contained in:
alazhar
2020-01-02 22:20:31 +07:00
commit 10eb3340ad
5753 changed files with 631345 additions and 0 deletions

View File

@ -0,0 +1,415 @@
<?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 Adsense data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 12.3
*/
class JGoogleDataAdsense extends JGoogleData
{
/**
* 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)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/adsense');
}
}
/**
* Method to get an Adsense account's settings from Google
*
* @param string $accountID ID of account to get
* @param boolean $subaccounts Include list of subaccounts
*
* @return mixed Data from Google
*
* @since 12.3
*/
public function getAccount($accountID, $subaccounts = true)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . ($subaccounts ? '?tree=true' : '');
$jdata = $this->query($url);
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense accounts from Google
*
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listAccounts($options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense clients from Google
*
* @param string $accountID ID of account to list the clients from
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listClients($accountID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . '/adclients?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to get an AdSense AdUnit
*
* @param string $accountID ID of account to get
* @param string $adclientID ID of client to get
* @param string $adunitID ID of adunit to get
*
* @return mixed Data from Google
*
* @since 12.3
*/
public function getUnit($accountID, $adclientID, $adunitID)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID);
$url .= '/adclients/' . urlencode($adclientID) . '/adunits/' . urlencode($adunitID);
$jdata = $this->query($url);
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense Custom Channels for a specific Adunit
*
* @param string $accountID ID of account
* @param string $adclientID ID of client
* @param string $adunitID ID of adunit to list channels from
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listUnitChannels($accountID, $adclientID, $adunitID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID);
$url .= '/adclients/' . urlencode($adclientID) . '/adunits/' . urlencode($adunitID) . '/customchannels?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to get an Adsense Channel
*
* @param string $accountID ID of account to get
* @param string $adclientID ID of client to get
* @param string $channelID ID of channel to get
*
* @return mixed Data from Google
*
* @since 12.3
*/
public function getChannel($accountID, $adclientID, $channelID)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . '/adclients/';
$url .= urlencode($adclientID) . '/customchannels/' . urlencode($channelID);
$jdata = $this->query($url);
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense Custom Channels
*
* @param string $accountID ID of account
* @param string $adclientID ID of client to list channels from
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listChannels($accountID, $adclientID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . '/adclients/' . urlencode($adclientID);
$url .= '/customchannels?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense Adunits for a specific Custom Channel
*
* @param string $accountID ID of account
* @param string $adclientID ID of client
* @param string $channelID ID of channel to list units from
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listChannelUnits($accountID, $adclientID, $channelID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . '/adclients/' . urlencode($adclientID);
$url .= '/customchannels/' . urlencode($channelID) . '/adunits?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to generate a report from Google AdSense
*
* @param string $accountID ID of account
* @param string $adclientID ID of client
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listUrlChannels($accountID, $adclientID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID);
$url .= '/adclients/' . urlencode($adclientID) . '/urlchannels?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to retrieve a list of AdSense Channel URLs
*
* @param string $accountID ID of account
* @param mixed $start Start day
* @param mixed $end End day
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of accounts to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function generateReport($accountID, $start, $end = false, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
if (is_int($start))
{
$startobj = new DateTime;
$startobj->setTimestamp($start);
}
elseif (is_string($start))
{
$startobj = new DateTime($start);
}
elseif (is_a($start, 'DateTime'))
{
$startobj = $start;
}
else
{
throw new InvalidArgumentException('Invalid start time.');
}
if (!$end)
{
$endobj = new DateTime;
}
elseif (is_int($end))
{
$endobj = new DateTime;
$endobj->setTimestamp($end);
}
elseif (is_string($end))
{
$endobj = new DateTime($end);
}
elseif (is_a($end, 'DateTime'))
{
$endobj = $end;
}
else
{
throw new InvalidArgumentException('Invalid end time.');
}
$options['startDate'] = $startobj->format('Y-m-d');
$options['endDate'] = $endobj->format('Y-m-d');
unset($options['startIndex']);
$url = 'https://www.googleapis.com/adsense/v1.1/accounts/' . urlencode($accountID) . '/reports?' . http_build_query($options);
if (strpos($url, '&'))
{
$url .= '&';
}
$i = 0;
$data['rows'] = array();
do
{
$jdata = $this->query($url . 'startIndex=' . count($data['rows']));
$newdata = json_decode($jdata->body, true);
if ($newdata && array_key_exists('rows', $newdata))
{
$newdata['rows'] = array_merge($data['rows'], $newdata['rows']);
$data = $newdata;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
$i++;
}
while (count($data['rows']) < $data['totalMatchedRows'] && $i < $maxpages);
return $data;
}
else
{
return false;
}
}
}

View File

@ -0,0 +1,620 @@
<?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 Calendar data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 12.3
*/
class JGoogleDataCalendar extends JGoogleData
{
/**
* 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)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/calendar');
}
}
/**
* Method to remove a calendar from a user's calendar list
*
* @param string $calendarID ID of calendar to delete
*
* @return boolean Success or failure
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function removeCalendar($calendarID)
{
if ($this->isAuthenticated())
{
$jdata = $this->query('https://www.googleapis.com/calendar/v3/users/me/calendarList/' . urlencode($calendarID), null, null, 'delete');
if ($jdata->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
return true;
}
else
{
return false;
}
}
/**
* Method to get a calendar's settings from Google
*
* @param string $calendarID ID of calendar to get.
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function getCalendar($calendarID)
{
if ($this->isAuthenticated())
{
$jdata = $this->query('https://www.googleapis.com/calendar/v3/users/me/calendarList/' . urlencode($calendarID));
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to add a calendar to a user's Google Calendar list
*
* @param string $calendarID New calendar ID
* @param array $options New calendar settings
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function addCalendar($calendarID, $options = array())
{
if ($this->isAuthenticated())
{
$options['id'] = $calendarID;
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendarList';
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'post');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to retrieve calendar list from Google
*
* @param array $options Search settings
* @param int $maxpages Maximum number of pages of calendars to return
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listCalendars($options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendarList?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to edit a Google Calendar's settings
*
* @param string $calendarID Calendar ID
* @param array $options Calendar settings
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function editCalendarSettings($calendarID, $options)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendarList/' . urlencode($calendarID);
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'put');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to clear a Google Calendar
*
* @param string $calendarID ID of calendar to clear
*
* @return boolean Success or failure
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function clearCalendar($calendarID)
{
if ($this->isAuthenticated())
{
$data = $this->query('https://www.googleapis.com/calendar/v3/users/me/calendars/' . urlencode($calendarID) . '/clear', null, null, 'post');
if ($data->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$data->body}`.");
}
return true;
}
else
{
return false;
}
}
/**
* Method to delete a calendar from Google
*
* @param string $calendarID ID of calendar to delete.
*
* @return boolean Success or failure
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function deleteCalendar($calendarID)
{
if ($this->isAuthenticated())
{
$data = $this->query('https://www.googleapis.com/calendar/v3/users/me/calendars/' . urlencode($calendarID), null, null, 'delete');
if ($data->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$data->body}`.");
}
return true;
}
else
{
return false;
}
}
/**
* Method to create a Google Calendar
*
* @param string $title New calendar title
* @param array $options New calendar settings
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function createCalendar($title, $options = array())
{
if ($this->isAuthenticated())
{
$options['summary'] = $title;
$url = 'https://www.googleapis.com/calendar/v3/calendars';
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'post');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to edit a Google Calendar
*
* @param string $calendarID Calendar ID.
* @param array $options Calendar settings.
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function editCalendar($calendarID, $options)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendars/' . urlencode($calendarID);
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'put');
$data = json_decode($jdata->body, true);
if ($data && array_key_exists('items', $data))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to delete an event from a Google Calendar
*
* @param string $calendarID ID of calendar to delete from
* @param string $eventID ID of event to delete.
*
* @return boolean Success or failure.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function deleteEvent($calendarID, $eventID)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendars/' . urlencode($calendarID) . '/events/' . urlencode($eventID);
$data = $this->query($url, null, null, 'delete');
if ($data->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$data->body}`.");
}
return true;
}
else
{
return false;
}
}
/**
* Method to get an event from a Google Calendar
*
* @param string $calendarID ID of calendar
* @param string $eventID ID of event to get
* @param array $options Options to send to Google
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function getEvent($calendarID, $eventID, $options = array())
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendarList/';
$url .= urlencode($calendarID) . '/events/' . urlencode($eventID) . '?' . http_build_query($options);
$jdata = $this->query($url);
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to create a Google Calendar event
*
* @param string $calendarID ID of calendar
* @param mixed $start Event start time
* @param mixed $end Event end time
* @param array $options New event settings
* @param mixed $timezone Timezone for event
* @param boolean $allday Treat event as an all-day event
* @param boolean $notify Notify participants
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws InvalidArgumentException
* @throws UnexpectedValueException
*/
public function createEvent($calendarID, $start, $end = false, $options = array(), $timezone = false, $allday = false, $notify = false)
{
if ($this->isAuthenticated())
{
if (!$start)
{
$startobj = new DateTime;
}
elseif (is_int($start))
{
$startobj = new DateTime;
$startobj->setTimestamp($start);
}
elseif (is_string($start))
{
$startobj = new DateTime($start);
}
elseif (is_a($start, 'DateTime'))
{
$startobj = $start;
}
else
{
throw new InvalidArgumentException('Invalid event start time.');
}
if (!$end)
{
$endobj = $startobj;
}
elseif (is_int($end))
{
$endobj = new DateTime;
$endobj->setTimestamp($end);
}
elseif (is_string($end))
{
$endobj = new DateTime($end);
}
elseif (is_a($end, 'DateTime'))
{
$endobj = $end;
}
else
{
throw new InvalidArgumentException('Invalid event end time.');
}
if ($allday)
{
$options['start'] = array('date' => $startobj->format('Y-m-d'));
$options['end'] = array('date' => $endobj->format('Y-m-d'));
}
else
{
$options['start'] = array('dateTime' => $startobj->format(DateTime::RFC3339));
$options['end'] = array('dateTime' => $endobj->format(DateTime::RFC3339));
}
if ($timezone === true)
{
$options['start']['timeZone'] = $startobj->getTimezone()->getName();
$options['end']['timeZone'] = $endobj->getTimezone()->getName();
}
elseif (is_a($timezone, 'DateTimeZone'))
{
$options['start']['timeZone'] = $timezone->getName();
$options['end']['timeZone'] = $timezone->getName();
}
elseif (is_string($timezone))
{
$options['start']['timeZone'] = $timezone;
$options['end']['timeZone'] = $timezone;
}
$url = 'https://www.googleapis.com/calendar/v3/calendars/' . urlencode($calendarID) . '/events' . ($notify ? '?sendNotifications=true' : '');
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'post');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to retrieve a list of events on a Google calendar
*
* @param string $calendarID Calendar ID
* @param string $eventID ID of the event to change
* @param array $options Search settings
* @param int $maxpages Minimum number of events to retrieve (more may be retrieved depending on page size)
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listRecurrences($calendarID, $eventID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/calendar/v3/users/me/calendars/' . urlencode($calendarID) . '/events/' . urlencode($eventID) . '/instances';
$url .= '?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to retrieve a list of events on a Google calendar
*
* @param string $calendarID Calendar ID
* @param array $options Calendar settings
* @param int $maxpages Cycle through pages of data to generate a complete list
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listEvents($calendarID, $options = array(), $maxpages = 1)
{
if ($this->isAuthenticated())
{
$next = array_key_exists('nextPageToken', $options) ? $options['nextPage'] : null;
unset($options['nextPageToken']);
$url = 'https://www.googleapis.com/calendar/v3/calendars/' . urlencode($calendarID) . '/events?' . http_build_query($options);
return $this->listGetData($url, $maxpages, $next);
}
else
{
return false;
}
}
/**
* Method to move an event from one calendar to another
*
* @param string $calendarID Calendar ID
* @param string $eventID ID of the event to change
* @param string $destID Calendar ID
* @param boolean $notify Notify participants of changes
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function moveEvent($calendarID, $eventID, $destID, $notify = false)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/calendars/' . urlencode($calendarID) . '/events/' . urlencode($eventID) . '/move';
$url .= '?destination=' . $destID . ($notify ? '&sendNotifications=true' : '');
$jdata = $this->query($url, null, null, 'post');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to edit a Google Calendar event
*
* @param string $calendarID Calendar ID
* @param string $eventID ID of the event to change
* @param array $options Event settings
* @param boolean $notify Notify participants of changes
*
* @return mixed Data from Google.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function editEvent($calendarID, $eventID, $options, $notify = false)
{
if ($this->isAuthenticated())
{
$url = 'https://www.googleapis.com/calendar/v3/calendars/';
$url .= urlencode($calendarID) . '/events/' . urlencode($eventID) . ($notify ? '?sendNotifications=true' : '');
$jdata = $this->query($url, json_encode($options), array('Content-type' => 'application/json'), 'put');
if ($data = json_decode($jdata->body, true))
{
return $data;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,149 @@
<?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 Picasa data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 12.3
*/
class JGoogleDataPicasa extends JGoogleData
{
/**
* 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)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://picasaweb.google.com/data/');
}
}
/**
* Method to retrieve a list of Picasa Albums
*
* @param string $userID ID of user
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listAlbums($userID = 'default')
{
if ($this->isAuthenticated())
{
$url = 'https://picasaweb.google.com/data/feed/api/user/' . urlencode($userID);
$jdata = $this->query($url, null, array('GData-Version' => 2));
$xml = $this->safeXML($jdata->body);
if (isset($xml->children()->entry))
{
$items = array();
foreach ($xml->children()->entry as $item)
{
$items[] = new JGoogleDataPicasaAlbum($item, $this->options, $this->auth);
}
return $items;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Method to create a Picasa Album
*
* @param string $userID ID of user
* @param string $title New album title
* @param string $access New album access settings
* @param string $summary New album summary
* @param string $location New album location
* @param int $time New album timestamp
* @param array $keywords New album keywords
*
* @return mixed Data from Google.
*
* @since 12.3
*/
public function createAlbum($userID = 'default', $title = '', $access = 'private', $summary = '', $location = '', $time = false, $keywords = array())
{
if ($this->isAuthenticated())
{
$time = $time ? $time : time();
$title = $title != '' ? $title : date('F j, Y');
$xml = new SimpleXMLElement('<entry></entry>');
$xml->addAttribute('xmlns', 'http://www.w3.org/2005/Atom');
$xml->addChild('title', $title);
$xml->addChild('summary', $summary);
$xml->addChild('gphoto:location', $location, 'http://schemas.google.com/photos/2007');
$xml->addChild('gphoto:access', $access);
$xml->addChild('gphoto:timestamp', $time);
$media = $xml->addChild('media:group', '', 'http://search.yahoo.com/mrss/');
$media->addChild('media:keywords', implode($keywords, ', '));
$cat = $xml->addChild('category', '');
$cat->addAttribute('scheme', 'http://schemas.google.com/g/2005#kind');
$cat->addAttribute('term', 'http://schemas.google.com/photos/2007#album');
$url = 'https://picasaweb.google.com/data/feed/api/user/' . urlencode($userID);
$jdata = $this->query($url, $xml->asXML(), array('GData-Version' => 2, 'Content-type' => 'application/atom+xml'), 'post');
$xml = $this->safeXML($jdata->body);
return new JGoogleDataPicasaAlbum($xml, $this->options, $this->auth);
}
else
{
return false;
}
}
/**
* Get Picasa Album
*
* @param string $url URL of album to get
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function getAlbum($url)
{
if ($this->isAuthenticated())
{
$jdata = $this->query($url, null, array('GData-Version' => 2));
$xml = $this->safeXML($jdata->body);
return new JGoogleDataPicasaAlbum($xml, $this->options, $this->auth);
}
else
{
return false;
}
}
}

View File

@ -0,0 +1,482 @@
<?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 Picasa data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 12.3
*/
class JGoogleDataPicasaAlbum extends JGoogleData
{
/**
* @var SimpleXMLElement The album's XML
* @since 12.3
*/
protected $xml;
/**
* Constructor.
*
* @param SimpleXMLElement $xml XML from Google
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 12.3
*/
public function __construct(SimpleXMLElement $xml, JRegistry $options = null, JGoogleAuth $auth = null)
{
$this->xml = $xml;
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://picasaweb.google.com/data/');
}
}
/**
* Method to delete a Picasa album
*
* @param mixed $match Check for most up to date album
*
* @return boolean Success or failure.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function delete($match = '*')
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
if ($match === true)
{
$match = $this->xml->xpath('./@gd:etag');
$match = $match[0];
}
try
{
$jdata = $this->query($url, null, array('GData-Version' => 2, 'If-Match' => $match), 'delete');
}
catch (Exception $e)
{
if (strpos($e->getMessage(), 'Error code 412 received requesting data: Mismatch: etags') === 0)
{
throw new RuntimeException("Etag match failed: `$match`.");
}
throw $e;
}
if ($jdata->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
$this->xml = null;
return true;
}
else
{
return false;
}
}
/**
* Method to get the album link
*
* @param string $type Type of link to return
*
* @return string Link or false on failure
*
* @since 12.3
*/
public function getLink($type = 'edit')
{
$links = $this->xml->link;
foreach ($links as $link)
{
if ($link->attributes()->rel == $type)
{
return (string) $link->attributes()->href;
}
}
return false;
}
/**
* Method to get the title of the album
*
* @return string Album title
*
* @since 12.3
*/
public function getTitle()
{
return (string) $this->xml->children()->title;
}
/**
* Method to get the summary of the album
*
* @return string Album summary
*
* @since 12.3
*/
public function getSummary()
{
return (string) $this->xml->children()->summary;
}
/**
* Method to get the location of the album
*
* @return string Album location
*
* @since 12.3
*/
public function getLocation()
{
return (string) $this->xml->children('gphoto', true)->location;
}
/**
* Method to get the access level of the album
*
* @return string Album access level
*
* @since 12.3
*/
public function getAccess()
{
return (string) $this->xml->children('gphoto', true)->access;
}
/**
* Method to get the time of the album
*
* @return double Album time
*
* @since 12.3
*/
public function getTime()
{
return (double) $this->xml->children('gphoto', true)->timestamp / 1000;
}
/**
* Method to set the title of the album
*
* @param string $title New album title
*
* @return JGoogleDataPicasaAlbum The object for method chaining
*
* @since 12.3
*/
public function setTitle($title)
{
$this->xml->children()->title = $title;
return $this;
}
/**
* Method to set the summary of the album
*
* @param string $summary New album summary
*
* @return JGoogleDataPicasaAlbum The object for method chaining
*
* @since 12.3
*/
public function setSummary($summary)
{
$this->xml->children()->summary = $summary;
return $this;
}
/**
* Method to set the location of the album
*
* @param string $location New album location
*
* @return JGoogleDataPicasaAlbum The object for method chaining
*
* @since 12.3
*/
public function setLocation($location)
{
$this->xml->children('gphoto', true)->location = $location;
return $this;
}
/**
* Method to set the access level of the album
*
* @param string $access New album access
*
* @return JGoogleDataPicasaAlbum The object for method chaining
*
* @since 12.3
*/
public function setAccess($access)
{
$this->xml->children('gphoto', true)->access = $access;
return $this;
}
/**
* Method to set the time of the album
*
* @param int $time New album time
*
* @return JGoogleDataPicasaAlbum The object for method chaining
*
* @since 12.3
*/
public function setTime($time)
{
$this->xml->children('gphoto', true)->timestamp = $time * 1000;
return $this;
}
/**
* Method to modify a Picasa Album
*
* @param string $match Optional eTag matching parameter
*
* @return mixed Data from Google.
*
* @since 12.3
*/
public function save($match = '*')
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
if ($match === true)
{
$match = $this->xml->xpath('./@gd:etag');
$match = $match[0];
}
try
{
$headers = array('GData-Version' => 2, 'Content-type' => 'application/atom+xml', 'If-Match' => $match);
$jdata = $this->query($url, $this->xml->asXML(), $headers, 'put');
}
catch (Exception $e)
{
if (strpos($e->getMessage(), 'Error code 412 received requesting data: Mismatch: etags') === 0)
{
throw new RuntimeException("Etag match failed: `$match`.");
}
throw $e;
}
$this->xml = $this->safeXML($jdata->body);
return $this;
}
else
{
return false;
}
}
/**
* Refresh Picasa Album
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function refresh()
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
$jdata = $this->query($url, null, array('GData-Version' => 2));
$this->xml = $this->safeXML($jdata->body);
return $this;
}
else
{
return false;
}
}
/**
* Method to retrieve a list of Picasa Photos
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function listPhotos()
{
if ($this->isAuthenticated())
{
$url = $this->getLink('http://schemas.google.com/g/2005#feed');
$jdata = $this->query($url, null, array('GData-Version' => 2));
$xml = $this->safeXML($jdata->body);
if (isset($xml->children()->entry))
{
$items = array();
foreach ($xml->children()->entry as $item)
{
$items[] = new JGoogleDataPicasaPhoto($item, $this->options, $this->auth);
}
return $items;
}
else
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
}
else
{
return false;
}
}
/**
* Add photo
*
* @param string $file Path of file to upload
* @param string $title Title to give to file (defaults to filename)
* @param string $summary Description of the file
*
* @return mixed Data from Google
*
* @since 12.3
* @throws RuntimeException
*/
public function upload($file, $title = '', $summary = '')
{
if ($this->isAuthenticated())
{
jimport('joomla.filesystem.file');
$title = $title != '' ? $title : JFile::getName($file);
if (!($type = $this->getMIME($file)))
{
throw new RuntimeException("Inappropriate file type.");
}
if (!($data = JFile::read($file)))
{
throw new RuntimeException("Cannot access file: `$file`");
}
$xml = new SimpleXMLElement('<entry></entry>');
$xml->addAttribute('xmlns', 'http://www.w3.org/2005/Atom');
$xml->addChild('title', $title);
$xml->addChild('summary', $summary);
$cat = $xml->addChild('category', '');
$cat->addAttribute('scheme', 'http://schemas.google.com/g/2005#kind');
$cat->addAttribute('term', 'http://schemas.google.com/photos/2007#photo');
$post = "Media multipart posting\n";
$post .= "--END_OF_PART\n";
$post .= "Content-Type: application/atom+xml\n\n";
$post .= $xml->asXML() . "\n";
$post .= "--END_OF_PART\n";
$post .= "Content-Type: {$type}\n\n";
$post .= $data;
$jdata = $this->query($this->getLink(), $post, array('GData-Version' => 2, 'Content-Type: multipart/related'), 'post');
return new JGoogleDataPicasaPhoto($this->safeXML($jdata->body), $this->options, $this->auth);
}
else
{
return false;
}
}
/**
* Add photo
*
* @param string $file Filename
*
* @return mixed Data from Google
*
* @since 12.3
* @throws UnexpectedValueException
*/
protected function getMIME($file)
{
switch (strtolower(JFile::getExt($file)))
{
case 'bmp':
case 'bm':
return 'image/bmp';
case 'gif':
return 'image/gif';
case 'jpg':
case 'jpeg':
case 'jpe':
case 'jif':
case 'jfif':
case 'jfi':
return 'image/jpeg';
case 'png':
return 'image/png';
case '3gp':
return 'video/3gpp';
case 'avi':
return 'video/avi';
case 'mov':
case 'moov':
case 'qt':
return 'video/quicktime';
case 'mp4':
case 'm4a':
case 'm4p':
case 'm4b':
case 'm4r':
case 'm4v':
return 'video/mp4';
case 'mpg':
case 'mpeg':
case 'mp1':
case 'mp2':
case 'mp3':
case 'm1v':
case 'm1a':
case 'm2a':
case 'mpa':
case 'mpv':
return 'video/mpeg';
case 'asf':
return 'video/x-ms-asf';
case 'wmv':
return 'video/x-ms-wmv';
default:
return false;
}
}
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,368 @@
<?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 Picasa data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 12.3
*/
class JGoogleDataPicasaPhoto extends JGoogleData
{
/**
* @var SimpleXMLElement The photo's XML
* @since 12.3
*/
protected $xml;
/**
* Constructor.
*
* @param SimpleXMLElement $xml XML from Google
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 12.3
*/
public function __construct(SimpleXMLElement $xml, JRegistry $options = null, JGoogleAuth $auth = null)
{
$this->xml = $xml;
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://picasaweb.google.com/data/');
}
}
/**
* Method to delete a Picasa photo
*
* @param mixed $match Check for most up to date photo
*
* @return boolean Success or failure.
*
* @since 12.3
* @throws UnexpectedValueException
*/
public function delete($match = '*')
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
if ($match === true)
{
$match = $this->xml->xpath('./@gd:etag');
$match = $match[0];
}
try
{
$jdata = $this->query($url, null, array('GData-Version' => 2, 'If-Match' => $match), 'delete');
}
catch (Exception $e)
{
if (strpos($e->getMessage(), 'Error code 412 received requesting data: Mismatch: etags') === 0)
{
throw new RuntimeException("Etag match failed: `$match`.");
}
throw $e;
}
if ($jdata->body != '')
{
throw new UnexpectedValueException("Unexpected data received from Google: `{$jdata->body}`.");
}
$this->xml = null;
return true;
}
else
{
return false;
}
}
/**
* Method to get the photo link
*
* @param string $type Type of link to return
*
* @return string Link or false on failure
*
* @since 12.3
*/
public function getLink($type = 'edit')
{
$links = $this->xml->link;
foreach ($links as $link)
{
if ($link->attributes()->rel == $type)
{
return (string) $link->attributes()->href;
}
}
return false;
}
/**
* Method to get the photo's URL
*
* @return string Link
*
* @since 12.3
*/
public function getURL()
{
return (string) $this->xml->children()->content->attributes()->src;
}
/**
* Method to get the photo's thumbnails
*
* @return array An array of thumbnails
*
* @since 12.3
*/
public function getThumbnails()
{
$thumbs = array();
foreach ($this->xml->children('media', true)->group->thumbnail as $item)
{
$url = (string) $item->attributes()->url;
$width = (int) $item->attributes()->width;
$height = (int) $item->attributes()->height;
$thumbs[$width] = array('url' => $url, 'w' => $width, 'h' => $height);
}
return $thumbs;
}
/**
* Method to get the title of the photo
*
* @return string Photo title
*
* @since 12.3
*/
public function getTitle()
{
return (string) $this->xml->children()->title;
}
/**
* Method to get the summary of the photo
*
* @return string Photo description
*
* @since 12.3
*/
public function getSummary()
{
return (string) $this->xml->children()->summary;
}
/**
* Method to get the access level of the photo
*
* @return string Photo access level
*
* @since 12.3
*/
public function getAccess()
{
return (string) $this->xml->children('gphoto', true)->access;
}
/**
* Method to get the time of the photo
*
* @return double Photo time
*
* @since 12.3
*/
public function getTime()
{
return (double) $this->xml->children('gphoto', true)->timestamp / 1000;
}
/**
* Method to get the size of the photo
*
* @return int Photo size
*
* @since 12.3
*/
public function getSize()
{
return (int) $this->xml->children('gphoto', true)->size;
}
/**
* Method to get the height of the photo
*
* @return int Photo height
*
* @since 12.3
*/
public function getHeight()
{
return (int) $this->xml->children('gphoto', true)->height;
}
/**
* Method to get the width of the photo
*
* @return int Photo width
*
* @since 12.3
*/
public function getWidth()
{
return (int) $this->xml->children('gphoto', true)->width;
}
/**
* Method to set the title of the photo
*
* @param string $title New photo title
*
* @return JGoogleDataPicasaPhoto The object for method chaining
*
* @since 12.3
*/
public function setTitle($title)
{
$this->xml->children()->title = $title;
return $this;
}
/**
* Method to set the summary of the photo
*
* @param string $summary New photo description
*
* @return JGoogleDataPicasaPhoto The object for method chaining
*
* @since 12.3
*/
public function setSummary($summary)
{
$this->xml->children()->summary = $summary;
return $this;
}
/**
* Method to set the access level of the photo
*
* @param string $access New photo access level
*
* @return JGoogleDataPicasaPhoto The object for method chaining
*
* @since 12.3
*/
public function setAccess($access)
{
$this->xml->children('gphoto', true)->access = $access;
return $this;
}
/**
* Method to set the time of the photo
*
* @param int $time New photo time
*
* @return JGoogleDataPicasaPhoto The object for method chaining
*
* @since 12.3
*/
public function setTime($time)
{
$this->xml->children('gphoto', true)->timestamp = $time * 1000;
return $this;
}
/**
* Method to modify a Picasa Photo
*
* @param string $match Optional eTag matching parameter
*
* @return mixed Data from Google.
*
* @since 12.3
*/
public function save($match = '*')
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
if ($match === true)
{
$match = $this->xml->xpath('./@gd:etag');
$match = $match[0];
}
try
{
$headers = array('GData-Version' => 2, 'Content-type' => 'application/atom+xml', 'If-Match' => $match);
$jdata = $this->query($url, $this->xml->asXML(), $headers, 'put');
}
catch (Exception $e)
{
if (strpos($e->getMessage(), 'Error code 412 received requesting data: Mismatch: etags') === 0)
{
throw new RuntimeException("Etag match failed: `$match`.");
}
throw $e;
}
$this->xml = $this->safeXML($jdata->body);
return $this;
}
else
{
return false;
}
}
/**
* Refresh photo data
*
* @return mixed Data from Google
*
* @since 12.3
*/
public function refresh()
{
if ($this->isAuthenticated())
{
$url = $this->getLink();
$jdata = $this->query($url, null, array('GData-Version' => 2));
$this->xml = $this->safeXML($jdata->body);
return $this;
}
else
{
return false;
}
}
}

View File

@ -0,0 +1,95 @@
<?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+ data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 1234
*/
class JGoogleDataPlus extends JGoogleData
{
/**
* @var JGoogleDataPlusPeople Google+ API object for people.
* @since 12.3
*/
protected $people;
/**
* @var JGoogleDataPlusActivities Google+ API object for people.
* @since 12.3
*/
protected $activities;
/**
* @var JGoogleDataPlusComments Google+ API object for people.
* @since 12.3
*/
protected $comments;
/**
* Constructor.
*
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 1234
*/
public function __construct(JRegistry $options = null, JGoogleAuth $auth = null)
{
// Setup the default API url if not already set.
$options->def('api.url', 'https://www.googleapis.com/plus/v1/');
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/plus.me');
}
}
/**
* Magic method to lazily create API objects
*
* @param string $name Name of property to retrieve
*
* @return JGoogleDataPlus Google+ API object (people, activities, comments).
*
* @since 12.3
*/
public function __get($name)
{
switch ($name)
{
case 'people':
if ($this->people == null)
{
$this->people = new JGoogleDataPlusPeople($this->options, $this->auth);
}
return $this->people;
case 'activities':
if ($this->activities == null)
{
$this->activities = new JGoogleDataPlusActivities($this->options, $this->auth);
}
return $this->activities;
case 'comments':
if ($this->comments == null)
{
$this->comments = new JGoogleDataPlusComments($this->options, $this->auth);
}
return $this->comments;
}
}
}

View File

@ -0,0 +1,197 @@
<?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+ data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 1234
*/
class JGoogleDataPlusActivities extends JGoogleData
{
/**
* Constructor.
*
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 1234
*/
public function __construct(JRegistry $options = null, JGoogleAuth $auth = null)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/plus.me');
}
}
/**
* List all of the activities in the specified collection for a particular user.
*
* @param string $userId The ID of the user to get activities for. The special value "me" can be used to indicate the authenticated user.
* @param string $collection The collection of activities to list. Acceptable values are: "public".
* @param string $fields Used to specify the fields you want returned.
* @param integer $max The maximum number of people to include in the response, used for paging.
* @param string $token The continuation token, used to page through large result sets. To get the next page of results, set this
* parameter to the value of "nextPageToken" from the previous response. This token may be of any length.
* @param string $alt Specifies an alternative representation type. Acceptable values are: "json" - Use JSON format (default)
*
* @return mixed Data from Google
*
* @since 1234
*/
public function listActivities($userId, $collection, $fields = null, $max = 10, $token = null, $alt = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'people/' . $userId . '/activities/' . $collection;
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
// Check if max is specified.
if ($max != 10)
{
$url .= (strpos($url, '?') === false) ? '?maxResults=' : '&maxResults=';
$url .= $max;
}
// Check if token is specified.
if ($token)
{
$url .= (strpos($url, '?') === false) ? '?pageToken=' : '&pageToken=';
$url .= $token;
}
// Check if alt is specified.
if ($alt)
{
$url .= (strpos($url, '?') === false) ? '?alt=' : '&alt=';
$url .= $alt;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
/**
* Get an activity.
*
* @param string $id The ID of the activity to get.
* @param string $fields Used to specify the fields you want returned.
* @param string $alt Specifies an alternative representation type. Acceptable values are: "json" - Use JSON format (default)
*
* @return mixed Data from Google
*
* @since 1234
*/
public function getActivity($id, $fields = null, $alt = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'activities/' . $id;
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
// Check if alt is specified.
if ($alt)
{
$url .= (strpos($url, '?') === false) ? '?alt=' : '&alt=';
$url .= $alt;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
/**
* Search all public activities.
*
* @param string $query Full-text search query string.
* @param string $fields Used to specify the fields you want returned.
* @param string $language Specify the preferred language to search with. https://developers.google.com/+/api/search#available-languages
* @param integer $max The maximum number of people to include in the response, used for paging.
* @param string $order Specifies how to order search results. Acceptable values are "best" and "recent".
* @param string $token The continuation token, used to page through large result sets. To get the next page of results, set this
* parameter to the value of "nextPageToken" from the previous response. This token may be of any length.
*
* @return mixed Data from Google
*
* @since 1234
*/
public function search($query, $fields = null, $language = null, $max = 10, $order = null, $token = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'activities?query=' . urlencode($query);
// Check if fields is specified.
if ($fields)
{
$url .= '&fields=' . $fields;
}
// Check if language is specified.
if ($language)
{
$url .= '&language=' . $language;
}
// Check if max is specified.
if ($max != 10)
{
$url .= '&maxResults=' . $max;
}
// Check if order is specified.
if ($order)
{
$url .= '&orderBy=' . $order;
}
// Check of token is specified.
if ($token)
{
$url .= '&pageToken=' . $token;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
}

View File

@ -0,0 +1,135 @@
<?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+ data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 1234
*/
class JGoogleDataPlusComments extends JGoogleData
{
/**
* Constructor.
*
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 1234
*/
public function __construct(JRegistry $options = null, JGoogleAuth $auth = null)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/plus.me');
}
}
/**
* List all of the comments for an activity.
*
* @param string $activityId The ID of the activity to get comments for.
* @param string $fields Used to specify the fields you want returned.
* @param integer $max The maximum number of people to include in the response, used for paging.
* @param string $order The order in which to sort the list of comments. Acceptable values are "ascending" and "descending".
* @param string $token The continuation token, used to page through large result sets. To get the next page of results, set this
* parameter to the value of "nextPageToken" from the previous response. This token may be of any length.
* @param string $alt Specifies an alternative representation type. Acceptable values are: "json" - Use JSON format (default)
*
* @return mixed Data from Google
*
* @since 1234
*/
public function listComments($activityId, $fields = null, $max = 20, $order = null, $token = null, $alt = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'activities/' . $activityId . '/comments';
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
// Check if max is specified.
if ($max != 20)
{
$url .= (strpos($url, '?') === false) ? '?maxResults=' : '&maxResults=';
$url .= $max;
}
// Check if order is specified.
if ($order)
{
$url .= (strpos($url, '?') === false) ? '?orderBy=' : '&orderBy=';
$url .= $order;
}
// Check of token is specified.
if ($token)
{
$url .= (strpos($url, '?') === false) ? '?pageToken=' : '&pageToken=';
$url .= $token;
}
// Check if alt is specified.
if ($alt)
{
$url .= (strpos($url, '?') === false) ? '?alt=' : '&alt=';
$url .= $alt;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
/**
* Get a comment.
*
* @param string $id The ID of the comment to get.
* @param string $fields Used to specify the fields you want returned.
*
* @return mixed Data from Google
*
* @since 1234
*/
public function getComment($id, $fields = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'comments/' . $id;
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
}

View File

@ -0,0 +1 @@
<!DOCTYPE html><title></title>

View File

@ -0,0 +1,174 @@
<?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+ data class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage Google
* @since 1234
*/
class JGoogleDataPlusPeople extends JGoogleData
{
/**
* Constructor.
*
* @param JRegistry $options Google options object
* @param JGoogleAuth $auth Google data http client object
*
* @since 1234
*/
public function __construct(JRegistry $options = null, JGoogleAuth $auth = null)
{
parent::__construct($options, $auth);
if (isset($this->auth) && !$this->auth->getOption('scope'))
{
$this->auth->setOption('scope', 'https://www.googleapis.com/auth/plus.me');
}
}
/**
* Get a person's profile.
*
* @param string $id The ID of the person to get the profile for. The special value "me" can be used to indicate the authenticated user.
* @param string $fields Used to specify the fields you want returned.
*
* @return mixed Data from Google
*
* @since 1234
*/
public function getPeople($id, $fields = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'people/' . $id;
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
/**
* Search all public profiles.
*
* @param string $query Specify a query string for full text search of public text in all profiles.
* @param string $fields Used to specify the fields you want returned.
* @param string $language Specify the preferred language to search with. https://developers.google.com/+/api/search#available-languages
* @param integer $max The maximum number of people to include in the response, used for paging.
* @param string $token The continuation token, used to page through large result sets. To get the next page of results, set this
* parameter to the value of "nextPageToken" from the previous response. This token may be of any length.
*
* @return mixed Data from Google
*
* @since 1234
*/
public function search($query, $fields = null, $language = null, $max = 10, $token = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'people?query=' . urlencode($query);
// Check if fields is specified.
if ($fields)
{
$url .= '&fields=' . $fields;
}
// Check if language is specified.
if ($language)
{
$url .= '&language=' . $language;
}
// Check if max is specified.
if ($max != 10)
{
$url .= '&maxResults=' . $max;
}
// Check of token is specified.
if ($token)
{
$url .= '&pageToken=' . $token;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
/**
* List all of the people in the specified collection for a particular activity.
*
* @param string $activityId The ID of the activity to get the list of people for.
* @param string $collection The collection of people to list. Acceptable values are "plusoners" and "resharers".
* @param string $fields Used to specify the fields you want returned.
* @param integer $max The maximum number of people to include in the response, used for paging.
* @param string $token The continuation token, used to page through large result sets. To get the next page of results, set this
* parameter to the value of "nextPageToken" from the previous response. This token may be of any length.
*
* @return mixed Data from Google
*
* @since 1234
*/
public function listByActivity($activityId, $collection, $fields = null, $max = 10, $token = null)
{
if ($this->isAuthenticated())
{
$url = $this->getOption('api.url') . 'activities/' . $activityId . '/people/' . $collection;
// Check if fields is specified.
if ($fields)
{
$url .= '?fields=' . $fields;
}
// Check if max is specified.
if ($max != 10)
{
$url .= (strpos($url, '?') === false) ? '?maxResults=' : '&maxResults=';
$url .= $max;
}
// Check of token is specified.
if ($token)
{
$url .= (strpos($url, '?') === false) ? '?pageToken=' : '&pageToken=';
$url .= $token;
}
$jdata = $this->auth->query($url);
return json_decode($jdata->body, true);
}
else
{
return false;
}
}
}