summaryrefslogtreecommitdiff
path: root/applications/core/lib/Zend/Gdata/Docs.php
diff options
Diffstat (limited to 'applications/core/lib/Zend/Gdata/Docs.php')
-rwxr-xr-xapplications/core/lib/Zend/Gdata/Docs.php256
1 files changed, 256 insertions, 0 deletions
diff --git a/applications/core/lib/Zend/Gdata/Docs.php b/applications/core/lib/Zend/Gdata/Docs.php
new file mode 100755
index 0000000..f20768e
--- /dev/null
+++ b/applications/core/lib/Zend/Gdata/Docs.php
@@ -0,0 +1,256 @@
+<?php
+
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to [email protected] so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * @see Zend_Gdata
+ */
+require_once 'Zend/Gdata.php';
+
+/**
+ * @see Zend_Gdata_Docs_DocumentListFeed
+ */
+require_once 'Zend/Gdata/Docs/DocumentListFeed.php';
+
+/**
+ * @see Zend_Gdata_Docs_DocumentListEntry
+ */
+require_once 'Zend/Gdata/Docs/DocumentListEntry.php';
+
+/**
+ * Service class for interacting with the Google Document List data API
+ * @link http://code.google.com/apis/documents/
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Docs
+ * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+class Zend_Gdata_Docs extends Zend_Gdata
+{
+
+ const DOCUMENTS_LIST_FEED_URI = 'http://docs.google.com/feeds/documents/private/full';
+ const AUTH_SERVICE_NAME = 'writely';
+
+ protected $_defaultPostUri = self::DOCUMENTS_LIST_FEED_URI;
+
+ private static $SUPPORTED_FILETYPES = array(
+ 'CSV'=>'text/csv',
+ 'DOC'=>'application/msword',
+ 'ODS'=>'application/vnd.oasis.opendocument.spreadsheet',
+ 'ODT'=>'application/vnd.oasis.opendocument.text',
+ 'RTF'=>'application/rtf',
+ 'SXW'=>'application/vnd.sun.xml.writer',
+ 'TXT'=>'text/plain',
+ 'XLS'=>'application/vnd.ms-excel');
+
+ /**
+ * Create Gdata_Docs object
+ *
+ * @param Zend_Http_Client $client (optional) The HTTP client to use when
+ * when communicating with the Google servers.
+ * @param string $applicationId The identity of the app in the form of Company-AppName-Version
+ */
+ public function __construct($client = null, $applicationId = 'MyCompany-MyApp-1.0')
+ {
+ $this->registerPackage('Zend_Gdata_Docs');
+ parent::__construct($client, $applicationId);
+ $this->_httpClient->setParameterPost('service', self::AUTH_SERVICE_NAME);
+ }
+
+ /**
+ * Looks up the mime type based on the file name extension. For example,
+ * calling this method with 'csv' would return
+ * 'text/comma-separated-values'. The Mime type is sent as a header in
+ * the upload HTTP POST request.
+ *
+ * @param string $fileExtension
+ * @return string The mime type to be sent to the server to tell it how the
+ * multipart mime data should be interpreted.
+ */
+ public static function lookupMimeType($fileExtension) {
+ return self::$SUPPORTED_FILETYPES[strtoupper($fileExtension)];
+ }
+
+ /**
+ * Retreive feed object containing entries for the user's documents.
+ *
+ * @param mixed $location The location for the feed, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListFeed
+ */
+ public function getDocumentListFeed($location = null)
+ {
+ if ($location === null) {
+ $uri = self::DOCUMENTS_LIST_FEED_URI;
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getFeed($uri, 'Zend_Gdata_Docs_DocumentListFeed');
+ }
+
+ /**
+ * Retreive entry object representing a single document.
+ *
+ * @param mixed $location The location for the entry, as a URL or Query
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getDocumentListEntry($location = null)
+ {
+ if ($location === null) {
+ require_once 'Zend/Gdata/App/InvalidArgumentException.php';
+ throw new Zend_Gdata_App_InvalidArgumentException(
+ 'Location must not be null');
+ } else if ($location instanceof Zend_Gdata_Query) {
+ $uri = $location->getQueryUrl();
+ } else {
+ $uri = $location;
+ }
+ return parent::getEntry($uri, 'Zend_Gdata_Docs_DocumentListEntry');
+ }
+
+ /**
+ * Retreive entry object representing a single document.
+ *
+ * This method builds the URL where this item is stored using the type
+ * and the id of the document.
+ * @param string $docId The URL key for the document. Examples:
+ * dcmg89gw_62hfjj8m, pKq0CzjiF3YmGd0AIlHKqeg
+ * @param string $docType The type of the document as used in the Google
+ * Document List URLs. Examples: document, spreadsheet, presentation
+ * @return Zend_Gdata_Docs_DocumentListEntry
+ */
+ public function getDoc($docId, $docType) {
+ $location = 'http://docs.google.com/feeds/documents/private/full/' .
+ $docType . '%3A' . $docId;
+ return $this->getDocumentListEntry($location);
+ }
+
+ /**
+ * Retreive entry object for the desired word processing document.
+ *
+ * @param string $id The URL id for the document. Example:
+ * dcmg89gw_62hfjj8m
+ */
+ public function getDocument($id) {
+ return $this->getDoc($id, 'document');
+ }
+
+ /**
+ * Retreive entry object for the desired spreadsheet.
+ *
+ * @param string $id The URL id for the document. Example:
+ * pKq0CzjiF3YmGd0AIlHKqeg
+ */
+ public function getSpreadsheet($id) {
+ return $this->getDoc($id, 'spreadsheet');
+ }
+
+ /**
+ * Retreive entry object for the desired presentation.
+ *
+ * @param string $id The URL id for the document. Example:
+ * dcmg89gw_21gtrjcn
+ */
+ public function getPresentation($id) {
+ return $this->getDoc($id, 'presentation');
+ }
+
+ /**
+ * Upload a local file to create a new Google Document entry.
+ *
+ * @param string $fileLocation The full or relative path of the file to
+ * be uploaded.
+ * @param string $title The name that this document should have on the
+ * server. If set, the title is used as the slug header in the
+ * POST request. If no title is provided, the location of the
+ * file will be used as the slug header in the request. If no
+ * mimeType is provided, this method attempts to determine the
+ * mime type based on the slugHeader by looking for .doc,
+ * .csv, .txt, etc. at the end of the file name.
+ * Example value: 'test.doc'.
+ * @param string $mimeType Describes the type of data which is being sent
+ * to the server. This must be one of the accepted mime types
+ * which are enumerated in SUPPORTED_FILETYPES.
+ * @param string $uri (optional) The URL to which the upload should be
+ * made.
+ * Example: 'http://docs.google.com/feeds/documents/private/full'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry for the newly
+ * created Google Document.
+ */
+ public function uploadFile($fileLocation, $title=null, $mimeType=null,
+ $uri=null)
+ {
+ // Set the URI to which the file will be uploaded.
+ if ($uri === null) {
+ $uri = $this->_defaultPostUri;
+ }
+
+ // Create the media source which describes the file.
+ $fs = $this->newMediaFileSource($fileLocation);
+ if ($title !== null) {
+ $slugHeader = $title;
+ } else {
+ $slugHeader = $fileLocation;
+ }
+
+ // Set the slug header to tell the Google Documents server what the
+ // title of the document should be and what the file extension was
+ // for the original file.
+ $fs->setSlug($slugHeader);
+
+ // Set the mime type of the data.
+ if ($mimeType === null) {
+ $slugHeader = $fs->getSlug();
+ $filenameParts = explode('.', $slugHeader);
+ $fileExtension = end($filenameParts);
+ $mimeType = self::lookupMimeType($fileExtension);
+ }
+
+ // Set the mime type for the upload request.
+ $fs->setContentType($mimeType);
+
+ // Send the data to the server.
+ return $this->insertDocument($fs, $uri);
+ }
+
+ /**
+ * Inserts an entry to a given URI and returns the response as an Entry.
+ *
+ * @param mixed $data The Zend_Gdata_Docs_DocumentListEntry or media
+ * source to post. If it is a DocumentListEntry, the mediaSource
+ * should already have been set. If $data is a mediaSource, it
+ * should have the correct slug header and mime type.
+ * @param string $uri POST URI
+ * @param string $className (optional) The class of entry to be returned.
+ * The default is a 'Zend_Gdata_Docs_DocumentListEntry'.
+ * @return Zend_Gdata_Docs_DocumentListEntry The entry returned by the
+ * service after insertion.
+ */
+ public function insertDocument($data, $uri,
+ $className='Zend_Gdata_Docs_DocumentListEntry')
+ {
+ return $this->insertEntry($data, $uri, $className);
+ }
+
+}