You've already forked joomla_test
first commit
This commit is contained in:
368
libraries/joomla/google/data/picasa/photo.php
Normal file
368
libraries/joomla/google/data/picasa/photo.php
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user