summaryrefslogtreecommitdiff
path: root/zend/demos/Zend/Gdata/Calendar.php
diff options
context:
space:
mode:
Diffstat (limited to 'zend/demos/Zend/Gdata/Calendar.php')
-rw-r--r--zend/demos/Zend/Gdata/Calendar.php841
1 files changed, 841 insertions, 0 deletions
diff --git a/zend/demos/Zend/Gdata/Calendar.php b/zend/demos/Zend/Gdata/Calendar.php
new file mode 100644
index 0000000..1094343
--- /dev/null
+++ b/zend/demos/Zend/Gdata/Calendar.php
@@ -0,0 +1,841 @@
+<?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 license@zend.com so we can send you a copy immediately.
+ *
+ * @category Zend
+ * @package Zend_Gdata
+ * @subpackage Demos
+ * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+/**
+ * PHP sample code for the Google Calendar data API. Utilizes the
+ * Zend Framework Gdata components to communicate with the Google API.
+ *
+ * Requires the Zend Framework Gdata components and PHP >= 5.2.11
+ *
+ * You can run this sample both from the command line (CLI) and also
+ * from a web browser. When running through a web browser, only
+ * AuthSub and outputting a list of calendars is demonstrated. When
+ * running via CLI, all functionality except AuthSub is available and dependent
+ * upon the command line options passed. Run this script without any
+ * command line options to see usage, eg:
+ * /usr/local/bin/php -f Calendar.php
+ *
+ * More information on the Command Line Interface is available at:
+ * http://www.php.net/features.commandline
+ *
+ * NOTE: You must ensure that the Zend Framework is in your PHP include
+ * path. You can do this via php.ini settings, or by modifying the
+ * argument to set_include_path in the code below.
+ *
+ * NOTE: As this is sample code, not all of the functions do full error
+ * handling. Please see getEvent for an example of how errors could
+ * be handled and the online code samples for additional information.
+ */
+
+/**
+ * @see Zend_Loader
+ */
+require_once 'Zend/Loader.php';
+
+/**
+ * @see Zend_Gdata
+ */
+Zend_Loader::loadClass('Zend_Gdata');
+
+/**
+ * @see Zend_Gdata_AuthSub
+ */
+Zend_Loader::loadClass('Zend_Gdata_AuthSub');
+
+/**
+ * @see Zend_Gdata_ClientLogin
+ */
+Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
+
+/**
+ * @see Zend_Gdata_HttpClient
+ */
+Zend_Loader::loadClass('Zend_Gdata_HttpClient');
+
+/**
+ * @see Zend_Gdata_Calendar
+ */
+Zend_Loader::loadClass('Zend_Gdata_Calendar');
+
+/**
+ * @var string Location of AuthSub key file. include_path is used to find this
+ */
+$_authSubKeyFile = null; // Example value for secure use: 'mykey.pem'
+
+/**
+ * @var string Passphrase for AuthSub key file.
+ */
+$_authSubKeyFilePassphrase = null;
+
+/**
+ * Returns the full URL of the current page, based upon env variables
+ *
+ * Env variables used:
+ * $_SERVER['HTTPS'] = (on|off|)
+ * $_SERVER['HTTP_HOST'] = value of the Host: header
+ * $_SERVER['SERVER_PORT'] = port number (only used if not http/80,https/443)
+ * $_SERVER['REQUEST_URI'] = the URI after the method of the HTTP request
+ *
+ * @return string Current URL
+ */
+function getCurrentUrl()
+{
+ global $_SERVER;
+
+ /**
+ * Filter php_self to avoid a security vulnerability.
+ */
+ $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0, strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
+
+ if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
+ $protocol = 'https://';
+ } else {
+ $protocol = 'http://';
+ }
+ $host = $_SERVER['HTTP_HOST'];
+ if ($_SERVER['SERVER_PORT'] != '' &&
+ (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
+ ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
+ $port = ':' . $_SERVER['SERVER_PORT'];
+ } else {
+ $port = '';
+ }
+ return $protocol . $host . $port . $php_request_uri;
+}
+
+/**
+ * Returns the AuthSub URL which the user must visit to authenticate requests
+ * from this application.
+ *
+ * Uses getCurrentUrl() to get the next URL which the user will be redirected
+ * to after successfully authenticating with the Google service.
+ *
+ * @return string AuthSub URL
+ */
+function getAuthSubUrl()
+{
+ global $_authSubKeyFile;
+ $next = getCurrentUrl();
+ $scope = 'http://www.google.com/calendar/feeds/';
+ $session = true;
+ if ($_authSubKeyFile != null) {
+ $secure = true;
+ } else {
+ $secure = false;
+ }
+ return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure,
+ $session);
+}
+
+/**
+ * Outputs a request to the user to login to their Google account, including
+ * a link to the AuthSub URL.
+ *
+ * Uses getAuthSubUrl() to get the URL which the user must visit to authenticate
+ *
+ * @return void
+ */
+function requestUserLogin($linkText)
+{
+ $authSubUrl = getAuthSubUrl();
+ echo "<a href=\"{$authSubUrl}\">{$linkText}</a>";
+}
+
+/**
+ * Returns a HTTP client object with the appropriate headers for communicating
+ * with Google using AuthSub authentication.
+ *
+ * Uses the $_SESSION['sessionToken'] to store the AuthSub session token after
+ * it is obtained. The single use token supplied in the URL when redirected
+ * after the user succesfully authenticated to Google is retrieved from the
+ * $_GET['token'] variable.
+ *
+ * @return Zend_Http_Client
+ */
+function getAuthSubHttpClient()
+{
+ global $_SESSION, $_GET, $_authSubKeyFile, $_authSubKeyFilePassphrase;
+ $client = new Zend_Gdata_HttpClient();
+ if ($_authSubKeyFile != null) {
+ // set the AuthSub key
+ $client->setAuthSubPrivateKeyFile($_authSubKeyFile, $_authSubKeyFilePassphrase, true);
+ }
+ if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
+ $_SESSION['sessionToken'] =
+ Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token'], $client);
+ }
+ $client->setAuthSubToken($_SESSION['sessionToken']);
+ return $client;
+}
+
+/**
+ * Processes loading of this sample code through a web browser. Uses AuthSub
+ * authentication and outputs a list of a user's calendars if succesfully
+ * authenticated.
+ *
+ * @return void
+ */
+function processPageLoad()
+{
+ global $_SESSION, $_GET;
+ if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) {
+ requestUserLogin('Please login to your Google Account.');
+ } else {
+ $client = getAuthSubHttpClient();
+ outputCalendarList($client);
+ }
+}
+
+/**
+ * Returns a HTTP client object with the appropriate headers for communicating
+ * with Google using the ClientLogin credentials supplied.
+ *
+ * @param string $user The username, in e-mail address format, to authenticate
+ * @param string $pass The password for the user specified
+ * @return Zend_Http_Client
+ */
+function getClientLoginHttpClient($user, $pass)
+{
+ $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
+
+ $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
+ return $client;
+}
+
+/**
+ * Outputs an HTML unordered list (ul), with each list item representing an event
+ * in the user's calendar. The calendar is retrieved using the magic cookie
+ * which allows read-only access to private calendar data using a special token
+ * available from within the Calendar UI.
+ *
+ * @param string $user The username or address of the calendar to be retrieved.
+ * @param string $magicCookie The magic cookie token
+ * @return void
+ */
+function outputCalendarMagicCookie($user, $magicCookie)
+{
+ $gdataCal = new Zend_Gdata_Calendar();
+ $query = $gdataCal->newEventQuery();
+ $query->setUser($user);
+ $query->setVisibility('private-' . $magicCookie);
+ $query->setProjection('full');
+ $eventFeed = $gdataCal->getCalendarEventFeed($query);
+ echo "<ul>\n";
+ foreach ($eventFeed as $event) {
+ echo "\t<li>" . $event->title->text . "</li>\n";
+ $sl = $event->getLink('self')->href;
+ }
+ echo "</ul>\n";
+}
+
+/**
+ * Outputs an HTML unordered list (ul), with each list item representing a
+ * calendar in the authenticated user's calendar list.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @return void
+ */
+function outputCalendarList($client)
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $calFeed = $gdataCal->getCalendarListFeed();
+ echo "<h1>" . $calFeed->title->text . "</h1>\n";
+ echo "<ul>\n";
+ foreach ($calFeed as $calendar) {
+ echo "\t<li>" . $calendar->title->text . "</li>\n";
+ }
+ echo "</ul>\n";
+}
+
+/**
+ * Outputs an HTML unordered list (ul), with each list item representing an
+ * event on the authenticated user's calendar. Includes the start time and
+ * event ID in the output. Events are ordered by starttime and include only
+ * events occurring in the future.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @return void
+ */
+function outputCalendar($client)
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $query = $gdataCal->newEventQuery();
+ $query->setUser('default');
+ $query->setVisibility('private');
+ $query->setProjection('full');
+ $query->setOrderby('starttime');
+ $query->setFutureevents(true);
+ $eventFeed = $gdataCal->getCalendarEventFeed($query);
+ // option 2
+ // $eventFeed = $gdataCal->getCalendarEventFeed($query->getQueryUrl());
+ echo "<ul>\n";
+ foreach ($eventFeed as $event) {
+ echo "\t<li>" . $event->title->text . " (" . $event->id->text . ")\n";
+ // Zend_Gdata_App_Extensions_Title->__toString() is defined, so the
+ // following will also work on PHP >= 5.2.0
+ //echo "\t<li>" . $event->title . " (" . $event->id . ")\n";
+ echo "\t\t<ul>\n";
+ foreach ($event->when as $when) {
+ echo "\t\t\t<li>Starts: " . $when->startTime . "</li>\n";
+ }
+ echo "\t\t</ul>\n";
+ echo "\t</li>\n";
+ }
+ echo "</ul>\n";
+}
+
+/**
+ * Outputs an HTML unordered list (ul), with each list item representing an
+ * event on the authenticated user's calendar which occurs during the
+ * specified date range.
+ *
+ * To query for all events occurring on 2006-12-24, you would query for
+ * a startDate of '2006-12-24' and an endDate of '2006-12-25' as the upper
+ * bound for date queries is exclusive. See the 'query parameters reference':
+ * http://code.google.com/apis/gdata/calendar.html#Parameters
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $startDate The start date in YYYY-MM-DD format
+ * @param string $endDate The end date in YYYY-MM-DD format
+ * @return void
+ */
+function outputCalendarByDateRange($client, $startDate='2007-05-01',
+ $endDate='2007-08-01')
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $query = $gdataCal->newEventQuery();
+ $query->setUser('default');
+ $query->setVisibility('private');
+ $query->setProjection('full');
+ $query->setOrderby('starttime');
+ $query->setStartMin($startDate);
+ $query->setStartMax($endDate);
+ $eventFeed = $gdataCal->getCalendarEventFeed($query);
+ echo "<ul>\n";
+ foreach ($eventFeed as $event) {
+ echo "\t<li>" . $event->title->text . " (" . $event->id->text . ")\n";
+ echo "\t\t<ul>\n";
+ foreach ($event->when as $when) {
+ echo "\t\t\t<li>Starts: " . $when->startTime . "</li>\n";
+ }
+ echo "\t\t</ul>\n";
+ echo "\t</li>\n";
+ }
+ echo "</ul>\n";
+}
+
+/**
+ * Outputs an HTML unordered list (ul), with each list item representing an
+ * event on the authenticated user's calendar which matches the search string
+ * specified as the $fullTextQuery parameter
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $fullTextQuery The string for which you are searching
+ * @return void
+ */
+function outputCalendarByFullTextQuery($client, $fullTextQuery='tennis')
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $query = $gdataCal->newEventQuery();
+ $query->setUser('default');
+ $query->setVisibility('private');
+ $query->setProjection('full');
+ $query->setQuery($fullTextQuery);
+ $eventFeed = $gdataCal->getCalendarEventFeed($query);
+ echo "<ul>\n";
+ foreach ($eventFeed as $event) {
+ echo "\t<li>" . $event->title->text . " (" . $event->id->text . ")\n";
+ echo "\t\t<ul>\n";
+ foreach ($event->when as $when) {
+ echo "\t\t\t<li>Starts: " . $when->startTime . "</li>\n";
+ echo "\t\t</ul>\n";
+ echo "\t</li>\n";
+ }
+ }
+ echo "</ul>\n";
+}
+
+/**
+ * Creates an event on the authenticated user's default calendar with the
+ * specified event details.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $title The event title
+ * @param string $desc The detailed description of the event
+ * @param string $where
+ * @param string $startDate The start date of the event in YYYY-MM-DD format
+ * @param string $startTime The start time of the event in HH:MM 24hr format
+ * @param string $endDate The end date of the event in YYYY-MM-DD format
+ * @param string $endTime The end time of the event in HH:MM 24hr format
+ * @param string $tzOffset The offset from GMT/UTC in [+-]DD format (eg -08)
+ * @return string The ID URL for the event.
+ */
+function createEvent ($client, $title = 'Tennis with Beth',
+ $desc='Meet for a quick lesson', $where = 'On the courts',
+ $startDate = '2008-01-20', $startTime = '10:00',
+ $endDate = '2008-01-20', $endTime = '11:00', $tzOffset = '-08')
+{
+ $gc = new Zend_Gdata_Calendar($client);
+ $newEntry = $gc->newEventEntry();
+ $newEntry->title = $gc->newTitle(trim($title));
+ $newEntry->where = array($gc->newWhere($where));
+
+ $newEntry->content = $gc->newContent($desc);
+ $newEntry->content->type = 'text';
+
+ $when = $gc->newWhen();
+ $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
+ $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
+ $newEntry->when = array($when);
+
+ $createdEntry = $gc->insertEvent($newEntry);
+ return $createdEntry->id->text;
+}
+
+/**
+ * Creates an event on the authenticated user's default calendar using
+ * the specified QuickAdd string.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $quickAddText The QuickAdd text for the event
+ * @return string The ID URL for the event
+ */
+function createQuickAddEvent ($client, $quickAddText) {
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $event = $gdataCal->newEventEntry();
+ $event->content = $gdataCal->newContent($quickAddText);
+ $event->quickAdd = $gdataCal->newQuickAdd(true);
+
+ $newEvent = $gdataCal->insertEvent($event);
+ return $newEvent->id->text;
+}
+
+/**
+ * Creates a new web content event on the authenticated user's default
+ * calendar with the specified event details. For simplicity, the event
+ * is created as an all day event and does not include a description.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $title The event title
+ * @param string $startDate The start date of the event in YYYY-MM-DD format
+ * @param string $endDate The end time of the event in HH:MM 24hr format
+ * @param string $icon URL pointing to a 16x16 px icon representing the event.
+ * @param string $url The URL containing the web content for the event.
+ * @param string $height The desired height of the web content pane.
+ * @param string $width The desired width of the web content pane.
+ * @param string $type The MIME type of the web content.
+ * @return string The ID URL for the event.
+ */
+function createWebContentEvent ($client, $title = 'World Cup 2006',
+ $startDate = '2006-06-09', $endDate = '2006-06-09',
+ $icon = 'http://www.google.com/calendar/images/google-holiday.gif',
+ $url = 'http://www.google.com/logos/worldcup06.gif',
+ $height = '120', $width = '276', $type = 'image/gif'
+ )
+{
+ $gc = new Zend_Gdata_Calendar($client);
+ $newEntry = $gc->newEventEntry();
+ $newEntry->title = $gc->newTitle(trim($title));
+
+ $when = $gc->newWhen();
+ $when->startTime = $startDate;
+ $when->endTime = $endDate;
+ $newEntry->when = array($when);
+
+ $wc = $gc->newWebContent();
+ $wc->url = $url;
+ $wc->height = $height;
+ $wc->width = $width;
+
+ $wcLink = $gc->newLink();
+ $wcLink->rel = "http://schemas.google.com/gCal/2005/webContent";
+ $wcLink->title = $title;
+ $wcLink->type = $type;
+ $wcLink->href = $icon;
+
+ $wcLink->webContent = $wc;
+ $newEntry->link = array($wcLink);
+
+ $createdEntry = $gc->insertEvent($newEntry);
+ return $createdEntry->id->text;
+}
+
+/**
+ * Creates a recurring event on the authenticated user's default calendar with
+ * the specified event details.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $title The event title
+ * @param string $desc The detailed description of the event
+ * @param string $where
+ * @param string $recurData The iCalendar recurring event syntax (RFC2445)
+ * @return void
+ */
+function createRecurringEvent ($client, $title = 'Tennis with Beth',
+ $desc='Meet for a quick lesson', $where = 'On the courts',
+ $recurData = null)
+{
+ $gc = new Zend_Gdata_Calendar($client);
+ $newEntry = $gc->newEventEntry();
+ $newEntry->title = $gc->newTitle(trim($title));
+ $newEntry->where = array($gc->newWhere($where));
+
+ $newEntry->content = $gc->newContent($desc);
+ $newEntry->content->type = 'text';
+
+ /**
+ * Due to the length of this recurrence syntax, we did not specify
+ * it as a default parameter value directly
+ */
+ if ($recurData == null) {
+ $recurData =
+ "DTSTART;VALUE=DATE:20070501\r\n" .
+ "DTEND;VALUE=DATE:20070502\r\n" .
+ "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n";
+ }
+
+ $newEntry->recurrence = $gc->newRecurrence($recurData);
+
+ $gc->post($newEntry->saveXML());
+}
+
+/**
+ * Returns an entry object representing the event with the specified ID.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $eventId The event ID string
+ * @return Zend_Gdata_Calendar_EventEntry|null if the event is found, null if it's not
+ */
+function getEvent($client, $eventId)
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $query = $gdataCal->newEventQuery();
+ $query->setUser('default');
+ $query->setVisibility('private');
+ $query->setProjection('full');
+ $query->setEvent($eventId);
+
+ try {
+ $eventEntry = $gdataCal->getCalendarEventEntry($query);
+ return $eventEntry;
+ } catch (Zend_Gdata_App_Exception $e) {
+ var_dump($e);
+ return null;
+ }
+}
+
+/**
+ * Updates the title of the event with the specified ID to be
+ * the title specified. Also outputs the new and old title
+ * with HTML br elements separating the lines
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $eventId The event ID string
+ * @param string $newTitle The new title to set on this event
+ * @return Zend_Gdata_Calendar_EventEntry|null The updated entry
+ */
+function updateEvent ($client, $eventId, $newTitle)
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ if ($eventOld = getEvent($client, $eventId)) {
+ echo "Old title: " . $eventOld->title->text . "<br />\n";
+ $eventOld->title = $gdataCal->newTitle($newTitle);
+ try {
+ $eventOld->save();
+ } catch (Zend_Gdata_App_Exception $e) {
+ var_dump($e);
+ return null;
+ }
+ $eventNew = getEvent($client, $eventId);
+ echo "New title: " . $eventNew->title->text . "<br />\n";
+ return $eventNew;
+ } else {
+ return null;
+ }
+}
+
+/**
+ * Adds an extended property to the event specified as a parameter.
+ * An extended property is an arbitrary name/value pair that can be added
+ * to an event and retrieved via the API. It is not accessible from the
+ * calendar web interface.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $eventId The event ID string
+ * @param string $name The name of the extended property
+ * @param string $value The value of the extended property
+ * @return Zend_Gdata_Calendar_EventEntry|null The updated entry
+ */
+function addExtendedProperty ($client, $eventId,
+ $name='http://www.example.com/schemas/2005#mycal.id', $value='1234')
+{
+ $gc = new Zend_Gdata_Calendar($client);
+ if ($event = getEvent($client, $eventId)) {
+ $extProp = $gc->newExtendedProperty($name, $value);
+ $extProps = array_merge($event->extendedProperty, array($extProp));
+ $event->extendedProperty = $extProps;
+ $eventNew = $event->save();
+ return $eventNew;
+ } else {
+ return null;
+ }
+}
+
+
+/**
+ * Adds a reminder to the event specified as a parameter.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $eventId The event ID string
+ * @param integer $minutes Minutes before event to set reminder
+ * @return Zend_Gdata_Calendar_EventEntry|null The updated entry
+ */
+function setReminder($client, $eventId, $minutes=15)
+{
+ $gc = new Zend_Gdata_Calendar($client);
+ $method = "alert";
+ if ($event = getEvent($client, $eventId)) {
+ $times = $event->when;
+ foreach ($times as $when) {
+ $reminder = $gc->newReminder();
+ $reminder->setMinutes($minutes);
+ $reminder->setMethod($method);
+ $when->reminders = array($reminder);
+ }
+ $eventNew = $event->save();
+ return $eventNew;
+ } else {
+ return null;
+ }
+}
+
+/**
+ * Deletes the event specified by retrieving the atom entry object
+ * and calling Zend_Feed_EntryAtom::delete() method. This is for
+ * example purposes only, as it is inefficient to retrieve the entire
+ * atom entry only for the purposes of deleting it.
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $eventId The event ID string
+ * @return void
+ */
+function deleteEventById ($client, $eventId)
+{
+ $event = getEvent($client, $eventId);
+ $event->delete();
+}
+
+/**
+ * Deletes the event specified by calling the Zend_Gdata::delete()
+ * method. The URL is typically in the format of:
+ * http://www.google.com/calendar/feeds/default/private/full/<eventId>
+ *
+ * @param Zend_Http_Client $client The authenticated client object
+ * @param string $url The url for the event to be deleted
+ * @return void
+ */
+function deleteEventByUrl ($client, $url)
+{
+ $gdataCal = new Zend_Gdata_Calendar($client);
+ $gdataCal->delete($url);
+}
+
+/**
+ * Main logic for running this sample code via the command line or,
+ * for AuthSub functionality only, via a web browser. The output of
+ * many of the functions is in HTML format for demonstration purposes,
+ * so you may wish to pipe the output to Tidy when running from the
+ * command-line for clearer results.
+ *
+ * Run without any arguments to get usage information
+ */
+if (isset($argc) && $argc >= 2) {
+ switch ($argv[1]) {
+ case 'outputCalendar':
+ if ($argc == 4) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ outputCalendar($client);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} " .
+ "<username> <password>\n";
+ }
+ break;
+ case 'outputCalendarMagicCookie':
+ if ($argc == 4) {
+ outputCalendarMagicCookie($argv[2], $argv[3]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} " .
+ "<username> <magicCookie>\n";
+ }
+ break;
+ case 'outputCalendarByDateRange':
+ if ($argc == 6) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ outputCalendarByDateRange($client, $argv[4], $argv[5]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} " .
+ "<username> <password> <startDate> <endDate>\n";
+ }
+ break;
+ case 'outputCalendarByFullTextQuery':
+ if ($argc == 5) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ outputCalendarByFullTextQuery($client, $argv[4]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} " .
+ "<username> <password> <fullTextQuery>\n";
+ }
+ break;
+ case 'outputCalendarList':
+ if ($argc == 4) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ outputCalendarList($client);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} " .
+ "<username> <password>\n";
+ }
+ break;
+ case 'updateEvent':
+ if ($argc == 6) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ updateEvent($client, $argv[4], $argv[5]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<eventId> <newTitle>\n";
+ }
+ break;
+ case 'setReminder':
+ if ($argc == 6) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ setReminder($client, $argv[4], $argv[5]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<eventId> <minutes>\n";
+ }
+ break;
+ case 'addExtendedProperty':
+ if ($argc == 7) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ addExtendedProperty($client, $argv[4], $argv[5], $argv[6]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<eventId> <name> <value>\n";
+ }
+ break;
+ case 'deleteEventById':
+ if ($argc == 5) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ deleteEventById($client, $argv[4]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<eventId>\n";
+ }
+ break;
+ case 'deleteEventByUrl':
+ if ($argc == 5) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ deleteEventByUrl($client, $argv[4]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<eventUrl>\n";
+ }
+ break;
+ case 'createEvent':
+ if ($argc == 12) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ $id = createEvent($client, $argv[4], $argv[5], $argv[6], $argv[7],
+ $argv[8], $argv[9], $argv[10], $argv[11]);
+ print "Event created with ID: $id\n";
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<title> <description> <where> " .
+ "<startDate> <startTime> <endDate> <endTime> <tzOffset>\n";
+ echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "'Tennis with Beth' 'Meet for a quick lesson' 'On the courts' " .
+ "'2008-01-01' '10:00' '2008-01-01' '11:00' '-08'\n";
+ }
+ break;
+ case 'createQuickAddEvent':
+ if ($argc == 5) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ $id = createQuickAddEvent($client, $argv[4]);
+ print "Event created with ID: $id\n";
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<quickAddText>\n";
+ echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "'Dinner at the beach on Thursday 8 PM'\n";
+ }
+ break;
+ case 'createWebContentEvent':
+ if ($argc == 12) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ $id = createWebContentEvent($client, $argv[4], $argv[5], $argv[6],
+ $argv[7], $argv[8], $argv[9], $argv[10], $argv[11]);
+ print "Event created with ID: $id\n";
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<title> <startDate> <endDate> <icon> <url> <height> <width> <type>\n\n";
+ echo "This creates a web content event on 2007/06/09.\n";
+ echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "'World Cup 2006' '2007-06-09' '2007-06-10' " .
+ "'http://www.google.com/calendar/images/google-holiday.gif' " .
+ "'http://www.google.com/logos/worldcup06.gif' " .
+ "'120' '276' 'image/gif'\n";
+ }
+ break;
+ case 'createRecurringEvent':
+ if ($argc == 7) {
+ $client = getClientLoginHttpClient($argv[2], $argv[3]);
+ createRecurringEvent($client, $argv[4], $argv[5], $argv[6]);
+ } else {
+ echo "Usage: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "<title> <description> <where>\n\n";
+ echo "This creates an all-day event which occurs first on 2007/05/01" .
+ "and repeats weekly on Tuesdays until 2007/09/04\n";
+ echo "EXAMPLE: php {$argv[0]} {$argv[1]} <username> <password> " .
+ "'Tennis with Beth' 'Meet for a quick lesson' 'On the courts'\n";
+ }
+ break;
+ }
+} else if (!isset($_SERVER["HTTP_HOST"])) {
+ // running from command line, but action left unspecified
+ echo "Usage: php {$argv[0]} <action> [<username>] [<password>] " .
+ "[<arg1> <arg2> ...]\n\n";
+ echo "Possible action values include:\n" .
+ "outputCalendar\n" .
+ "outputCalendarMagicCookie\n" .
+ "outputCalendarByDateRange\n" .
+ "outputCalendarByFullTextQuery\n" .
+ "outputCalendarList\n" .
+ "updateEvent\n" .
+ "deleteEventById\n" .
+ "deleteEventByUrl\n" .
+ "createEvent\n" .
+ "createQuickAddEvent\n" .
+ "createWebContentEvent\n" .
+ "createRecurringEvent\n" .
+ "setReminder\n" .
+ "addExtendedProperty\n";
+} else {
+ // running through web server - demonstrate AuthSub
+ processPageLoad();
+}