From 06f945f27840b53e57795dadbc38e76f7e11ab1c Mon Sep 17 00:00:00 2001 From: Horus3 Date: Mon, 24 Feb 2014 16:42:14 +0100 Subject: init --- .../manual/core/en/zend.gdata.calendar.html | 956 +++++++++++++++++++++ 1 file changed, 956 insertions(+) create mode 100644 zend/documentation/manual/core/en/zend.gdata.calendar.html (limited to 'zend/documentation/manual/core/en/zend.gdata.calendar.html') diff --git a/zend/documentation/manual/core/en/zend.gdata.calendar.html b/zend/documentation/manual/core/en/zend.gdata.calendar.html new file mode 100644 index 0000000..bb360c8 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.calendar.html @@ -0,0 +1,956 @@ + + + + + Using Google Calendar - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Authenticating with ClientLogin + + + + +
+
+

Using Google Calendar

+ + +

+ You can use the + Zend_Gdata_Calendar + class to view, create, update, and delete events in the online Google Calendar service. +

+ +

+ See » + http://code.google.com/apis/calendar/overview.html + for more information about the Google Calendar API. +

+ +

Connecting To The Calendar Service

+ + +

+ The Google Calendar API, like all GData APIs, is + based off of the Atom Publishing Protocol (APP), an XML based format + for managing web-based resources. Traffic between a client and the Google Calendar + servers occurs over HTTP and allows for both authenticated and + unauthenticated connections. +

+ +

+ Before any transactions can occur, this connection needs to be made. Creating a + connection to the calendar servers involves two steps: creating an + HTTP client and binding a Zend_Gdata_Calendar + service instance to that client. +

+ +

Authentication

+ + +

+ The Google Calendar API allows access to both public and private + calendar feeds. Public feeds do not require authentication, but are read-only and + offer reduced functionality. Private feeds offers the most complete functionality + but requires an authenticated connection to the calendar servers. There are three + authentication schemes that are supported by Google Calendar: +

+ +
    +
  • +

    + ClientAuth + provides direct username/password authentication to the + calendar servers. Since this scheme requires that users + provide your application with their password, this + authentication is only recommended when other + authentication schemes are insufficient. +

    +
  • + +
  • +

    + AuthSub + allows authentication to the calendar servers via a + Google proxy server. This provides the same level of + convenience as ClientAuth but without the security + risk, making this an ideal choice for web-based + applications. +

    +
  • + +
  • +

    + MagicCookie + allows authentication based on a semi-random URL + available from within the Google Calendar interface. + This is the simplest authentication scheme to + implement, but requires that users manually retrieve + their secure URL before they can authenticate, doesn't + provide access to calendar lists, and is limited to + read-only access. +

    +
  • +
+ +

+ The Zend_Gdata + library provides support for all three authentication schemes. + The rest of this chapter will assume that you are familiar the + authentication schemes available and how to create an + appropriate authenticated connection. For more information, + please see section the Authentication section + of this manual or the » Authentication Overview in the + Google Data API Developer's Guide. +

+
+ +

Creating A Service Instance

+ + +

+ In order to interact with Google Calendar, this library provides the + Zend_Gdata_Calendar service class. This class provides a + common interface to the Google Data and Atom Publishing Protocol models and assists + in marshaling requests to and from the calendar servers. +

+ +

+ Once deciding on an authentication scheme, the next step is to create an instance + of Zend_Gdata_Calendar. The class constructor takes an + instance of Zend_Http_Client as a single argument. This + provides an interface for AuthSub and ClientAuth authentication, as both of these + require creation of a special authenticated HTTP client. If no + arguments are provided, an unauthenticated instance of + Zend_Http_Client will be automatically created. +

+ +

+ The example below shows how to create a Calendar service class using ClientAuth + authentication: +

+ +
  1. // Parameters for ClientAuth authentication
  2. +
  3. $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
  4. +
  5. $user = "sample.user@gmail.com";
  6. +
  7. $pass = "pa$$w0rd";
  8. +
  9.  
  10. +
  11. // Create an authenticated HTTP client
  12. +
  13. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  14. +
  15.  
  16. +
  17. // Create an instance of the Calendar service
  18. +
  19. $service = new Zend_Gdata_Calendar($client);
+ + +

+ A Calendar service using AuthSub can be created in a similar, though slightly more + lengthy fashion: +

+ +
  1. /*
  2. +
  3. * Retrieve the current URL so that the AuthSub server knows where to
  4. +
  5. * redirect the user after authentication is complete.
  6. +
  7. */
  8. +
  9. function getCurrentUrl()
  10. +
  11. {
  12. +
  13.     global $_SERVER;
  14. +
  15.  
  16. +
  17.     // Filter php_self to avoid a security vulnerability.
  18. +
  19.     $php_request_uri =
  20. +
  21.         htmlentities(substr($_SERVER['REQUEST_URI'],
  22. +
  23.                             0,
  24. +
  25.                             strcspn($_SERVER['REQUEST_URI'], "\n\r")),
  26. +
  27.                             ENT_QUOTES);
  28. +
  29.  
  30. +
  31.     if (isset($_SERVER['HTTPS']) &&
  32. +
  33.         strtolower($_SERVER['HTTPS']) == 'on') {
  34. +
  35.         $protocol = 'https://';
  36. +
  37.     } else {
  38. +
  39.         $protocol = 'http://';
  40. +
  41.     }
  42. +
  43.     $host = $_SERVER['HTTP_HOST'];
  44. +
  45.     if ($_SERVER['HTTP_PORT'] != '' &&
  46. +
  47.         (($protocol == 'http://' && $_SERVER['HTTP_PORT'] != '80') ||
  48. +
  49.         ($protocol == 'https://' && $_SERVER['HTTP_PORT'] != '443'))) {
  50. +
  51.         $port = ':' . $_SERVER['HTTP_PORT'];
  52. +
  53.     } else {
  54. +
  55.         $port = '';
  56. +
  57.     }
  58. +
  59.     return $protocol . $host . $port . $php_request_uri;
  60. +
  61. }
  62. +
  63.  
  64. +
  65. /**
  66. +
  67. * Obtain an AuthSub authenticated HTTP client, redirecting the user
  68. +
  69. * to the AuthSub server to login if necessary.
  70. +
  71. */
  72. +
  73. function getAuthSubHttpClient()
  74. +
  75. {
  76. +
  77.     global $_SESSION, $_GET;
  78. +
  79.  
  80. +
  81.     // if there is no AuthSub session or one-time token waiting for us,
  82. +
  83.     // redirect the user to the AuthSub server to get one.
  84. +
  85.     if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) {
  86. +
  87.         // Parameters to give to AuthSub server
  88. +
  89.         $next = getCurrentUrl();
  90. +
  91.         $scope = "http://www.google.com/calendar/feeds/";
  92. +
  93.         $secure = false;
  94. +
  95.         $session = true;
  96. +
  97.  
  98. +
  99.         // Redirect the user to the AuthSub server to sign in
  100. +
  101.  
  102. +
  103.         $authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
  104. +
  105.                                                              $scope,
  106. +
  107.                                                              $secure,
  108. +
  109.                                                              $session);
  110. +
  111.          header("HTTP/1.0 307 Temporary redirect");
  112. +
  113.  
  114. +
  115.          header("Location: " . $authSubUrl);
  116. +
  117.  
  118. +
  119.          exit();
  120. +
  121.     }
  122. +
  123.  
  124. +
  125.     // Convert an AuthSub one-time token into a session token if needed
  126. +
  127.     if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
  128. +
  129.         $_SESSION['sessionToken'] =
  130. +
  131.             Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  132. +
  133.     }
  134. +
  135.  
  136. +
  137.     // At this point we are authenticated via AuthSub and can obtain an
  138. +
  139.     // authenticated HTTP client instance
  140. +
  141.  
  142. +
  143.     // Create an authenticated HTTP client
  144. +
  145.     $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
  146. +
  147.     return $client;
  148. +
  149. }
  150. +
  151.  
  152. +
  153. // -> Script execution begins here <-
  154. +
  155.  
  156. +
  157. // Make sure that the user has a valid session, so we can record the
  158. +
  159. // AuthSub session token once it is available.
  160. +
  161. +
  162.  
  163. +
  164. // Create an instance of the Calendar service, redirecting the user
  165. +
  166. // to the AuthSub server if necessary.
  167. +
  168. $service = new Zend_Gdata_Calendar(getAuthSubHttpClient());
+ + +

+ Finally, an unauthenticated server can be created for use with either public feeds + or MagicCookie authentication: +

+ +
  1. // Create an instance of the Calendar service using an unauthenticated
  2. +
  3. // HTTP client
  4. +
  5.  
  6. +
  7. $service = new Zend_Gdata_Calendar();
+ + +

+ Note that MagicCookie authentication is not supplied with the + HTTP connection, but is instead specified along with the desired + visibility when submitting queries. See the section on retrieving events below for + an example. +

+
+
+ +

Retrieving A Calendar List

+ + +

+ The calendar service supports retrieving a list of calendars for the authenticated + user. This is the same list of calendars which are displayed in the Google Calendar + UI, except those marked as "hidden" are also available. +

+ +

+ The calendar list is always private and must be accessed over an authenticated + connection. It is not possible to retrieve another user's calendar list and it cannot + be accessed using MagicCookie authentication. Attempting to access a calendar list + without holding appropriate credentials will fail and result in a 401 (Authentication + Required) status code. +

+ +
  1. $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Calendar($client);
  6. +
  7.  
  8. +
  9. try {
  10. +
  11.     $listFeed= $service->getCalendarListFeed();
  12. +
  13. } catch (Zend_Gdata_App_Exception $e) {
  14. +
  15.     echo "Error: " . $e->getMessage();
  16. +
  17. }
+ + +

+ Calling getCalendarListFeed() creates a new instance of + Zend_Gdata_Calendar_ListFeed containing each available calendar + as an instance of Zend_Gdata_Calendar_ListEntry. After retrieving + the feed, you can use the iterator and accessors contained within the feed to inspect + the enclosed calendars. +

+ +
  1. echo "<h1>Calendar List Feed</h1>";
  2. +
  3. echo "<ul>";
  4. +
  5. foreach ($listFeed as $calendar) {
  6. +
  7.     echo "<li>" . $calendar->title .
  8. +
  9.          " (Event Feed: " . $calendar->id . ")</li>";
  10. +
  11. }
  12. +
  13. echo "</ul>";
+ +
+ +

Retrieving Events

+ + +

+ Like the list of calendars, events are also retrieved using the + Zend_Gdata_Calendar service class. The event list returned is of + type Zend_Gdata_Calendar_EventFeed and contains each event as an + instance of Zend_Gdata_Calendar_EventEntry. As before, the + iterator and accessors contained within the event feed instance allow inspection of + individual events. +

+ +

Queries

+ + +

+ When retrieving events using the Calendar API, specially + constructed query URLs are used to describe what events should be + returned. The Zend_Gdata_Calendar_EventQuery class simplifies + this task by automatically constructing a query URL based on + provided parameters. A full list of these parameters is available at the » Queries section + of the Google Data APIs Protocol Reference. However, + there are three parameters that are worth special attention: +

+ +
    +
  • +

    + User + is used to specify the user whose calendar is being + searched for, and is specified as an email address. If + no user is provided, "default" will be used instead to + indicate the currently authenticated user (if + authenticated). +

    +
  • + +
  • +

    + Visibility + specifies whether a users public or private calendar + should be searched. If using an unauthenticated session + and no MagicCookie is available, only the public feed + will be available. +

    +
  • + +
  • +

    + Projection + specifies how much data should be returned by the + server and in what format. In most cases you will want + to use the "full" projection. Also available is the + "basic" projection, which places most meta-data into + each event's content field as human readable text, and + the "composite" projection which includes complete text + for any comments alongside each event. The "composite" + view is often much larger than the "full" view. +

    +
  • +
+
+ +

Retrieving Events In Order Of Start Time

+ + +

+ The example below illustrates the use of the Zend_Gdata_Query + class and specifies the private visibility feed, which requires that an + authenticated connection is available to the calendar servers. If a MagicCookie is + being used for authentication, the visibility should be instead set to + "private-magicCookieValue", where magicCookieValue is the + random string obtained when viewing the private XML address in + the Google Calendar UI. Events are requested chronologically by start time and only + events occurring in the future are returned. +

+ +
  1. $query = $service->newEventQuery();
  2. +
  3. $query->setUser('default');
  4. +
  5. // Set to $query->setVisibility('private-magicCookieValue') if using
  6. +
  7. // MagicCookie auth
  8. +
  9. $query->setVisibility('private');
  10. +
  11. $query->setProjection('full');
  12. +
  13. $query->setOrderby('starttime');
  14. +
  15. $query->setFutureevents('true');
  16. +
  17.  
  18. +
  19. // Retrieve the event list from the calendar server
  20. +
  21. try {
  22. +
  23.     $eventFeed = $service->getCalendarEventFeed($query);
  24. +
  25. } catch (Zend_Gdata_App_Exception $e) {
  26. +
  27.     echo "Error: " . $e->getMessage();
  28. +
  29. }
  30. +
  31.  
  32. +
  33. // Iterate through the list of events, outputting them as an HTML list
  34. +
  35. echo "<ul>";
  36. +
  37. foreach ($eventFeed as $event) {
  38. +
  39.     echo "<li>" . $event->title . " (Event ID: " . $event->id . ")</li>";
  40. +
  41. }
  42. +
  43. echo "</ul>";
+ + +

+ Additional properties such as ID, author, when, event status, visibility, web + content, and content, among others are available within + Zend_Gdata_Calendar_EventEntry. Refer to the + » Zend Framework + API Documentation and the + » Calendar Protocol + Reference for a complete list. +

+
+ +

Retrieving Events In A Specified Date Range

+ + +

+ To print out all events within a certain range, for example from December 1, + 2006 through December 15, 2007, add the following two lines to the previous sample. + Take care to remove "$query->setFutureevents('true')", since + futureevents will override startMin and + startMax. +

+ +
  1. $query->setStartMin('2006-12-01');
  2. +
  3. $query->setStartMax('2006-12-16');
+ + +

+ Note that startMin is inclusive whereas + startMax is exclusive. As a result, only events through + 2006-12-15 23:59:59 will be returned. +

+
+ +

Retrieving Events By Fulltext Query

+ + +

+ To print out all events which contain a specific word, for example "dogfood", use + the setQuery() method when creating the query. +

+ +
  1. $query->setQuery("dogfood");
+ +
+ +

Retrieving Individual Events

+ + +

+ Individual events can be retrieved by specifying their event ID as part of the + query. Instead of calling getCalendarEventFeed(), + getCalendarEventEntry() should be called instead. +

+ +
  1. $query = $service->newEventQuery();
  2. +
  3. $query->setUser('default');
  4. +
  5. $query->setVisibility('private');
  6. +
  7. $query->setProjection('full');
  8. +
  9. $query->setEvent($eventId);
  10. +
  11.  
  12. +
  13. try {
  14. +
  15.     $event = $service->getCalendarEventEntry($query);
  16. +
  17. } catch (Zend_Gdata_App_Exception $e) {
  18. +
  19.     echo "Error: " . $e->getMessage();
  20. +
  21. }
+ + +

+ In a similar fashion, if the event URL is known, it can be passed + directly into getCalendarEntry() to retrieve a specific + event. In this case, no query object is required since the event + URL contains all the necessary information to retrieve the event. +

+ +
  1. $eventURL = "http://www.google.com/calendar/feeds/default/private"
  2. +
  3.           . "/full/g829on5sq4ag12se91d10uumko";
  4. +
  5.  
  6. +
  7. try {
  8. +
  9.     $event = $service->getCalendarEventEntry($eventURL);
  10. +
  11. } catch (Zend_Gdata_App_Exception $e) {
  12. +
  13.     echo "Error: " . $e->getMessage();
  14. +
  15. }
+ +
+
+ +

Creating Events

+ + +

Creating Single-Occurrence Events

+ + +

+ Events are added to a calendar by creating an instance of + Zend_Gdata_EventEntry and populating it with the appropriate + data. The calendar service instance (Zend_Gdata_Calendar) is + then used to used to transparently covert the event into XML and + POST it to the calendar server. Creating events requires either an AuthSub or + ClientAuth authenticated connection to the calendar server. +

+ +

At a minimum, the following attributes should be set:

+ +
    +
  • +

    + Title + provides the headline that will appear above the event + within the Google Calendar UI. +

    +
  • + +
  • +

    + When + indicates the duration of the event and, optionally, + any reminders that are associated with it. See the next + section for more information on this attribute. +

    +
  • +
+ +

Other useful attributes that may optionally set include:

+ +
    +
  • +

    + Author + provides information about the user who created the + event. +

    +
  • + +
  • +

    + Content + provides additional information about the event which + appears when the event details are requested from + within Google Calendar. +

    +
  • + +
  • +

    + EventStatus + indicates whether the event is confirmed, tentative, or + canceled. +

    +
  • + +
  • +

    + Transparency + indicates whether the event should be consume time on + the user's free/busy list. +

    +
  • + +
  • +

    + WebContent + allows links to external content to be provided within + an event. +

    +
  • + +
  • +

    + Where + indicates the location of the event. +

    +
  • + +
  • +

    + Visibility + allows the event to be hidden from the public event + lists. +

    +
  • +
+ +

+ For a complete list of event attributes, refer to the » Zend Framework + API Documentation and the » Calendar Protocol + Reference. Attributes that can contain multiple values, such as where, + are implemented as arrays and need to be created accordingly. Be aware that all of + these attributes require objects as parameters. Trying instead to populate them + using strings or primitives will result in errors during conversion to + XML. +

+ +

+ Once the event has been populated, it can be uploaded to the calendar server by + passing it as an argument to the calendar service's + insertEvent() function. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. // Note that each attribute is crated as an instance of a matching class
  10. +
  11. $event->title = $service->newTitle("My Event");
  12. +
  13. $event->where = array($service->newWhere("Mountain View, California"));
  14. +
  15. $event->content =
  16. +
  17.     $service->newContent(" This is my awesome event. RSVP required.");
  18. +
  19.  
  20. +
  21. // Set the date using RFC 3339 format.
  22. +
  23. $startDate = "2008-01-20";
  24. +
  25. $startTime = "14:00";
  26. +
  27. $endDate = "2008-01-20";
  28. +
  29. $endTime = "16:00";
  30. +
  31. $tzOffset = "-08";
  32. +
  33.  
  34. +
  35. $when = $service->newWhen();
  36. +
  37. $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
  38. +
  39. $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
  40. +
  41. $event->when = array($when);
  42. +
  43.  
  44. +
  45. // Upload the event to the calendar server
  46. +
  47. // A copy of the event as it is recorded on the server is returned
  48. +
  49. $newEvent = $service->insertEvent($event);
+ +
+ +

Event Schedules and Reminders

+ + +

+ An event's starting time and duration are determined by the value of its + when property, which contains the properties + startTime, endTime, and + valueString. StartTime and + EndTime control the duration of the + event, while the valueString property is currently unused. +

+ +

+ All-day events can be scheduled by specifying only the date omitting the time when + setting startTime and endTime. Likewise, + zero-duration events can be specified by omitting the endTime. + In all cases, date and time values should be provided in + » RFC3339 format. +

+ +
  1. // Schedule the event to occur on December 05, 2007 at 2 PM PST (UTC-8)
  2. +
  3. // with a duration of one hour.
  4. +
  5. $when = $service->newWhen();
  6. +
  7. $when->startTime = "2007-12-05T14:00:00-08:00";
  8. +
  9. $when->endTime="2007-12-05T15:00:00:00-08:00";
  10. +
  11.  
  12. +
  13. // Apply the when property to an event
  14. +
  15. $event->when = array($when);
+ + +

+ The when attribute also controls when reminders are sent to a + user. Reminders are stored in an array and each event may have up to find reminders + associated with it. +

+ +

+ For a reminder to be valid, it needs to have two attributes + set: method and a time. Method can accept + one of the following strings: "alert", "email", or "sms". The time should be entered + as an integer and can be set with either the property minutes, + hours, days, or + absoluteTime. However, a valid request may only have one of + these attributes set. If a mixed time is desired, convert to the most precise unit + available. For example, 1 hour and 30 minutes should be entered as 90 minutes. +

+ +
  1. // Create a new reminder object. It should be set to send an email
  2. +
  3. // to the user 10 minutes beforehand.
  4. +
  5. $reminder = $service->newReminder();
  6. +
  7. $reminder->method = "email";
  8. +
  9. $reminder->minutes = "10";
  10. +
  11.  
  12. +
  13. // Apply the reminder to an existing event's when property
  14. +
  15. $when = $event->when[0];
  16. +
  17. $when->reminders = array($reminder);
+ +
+ +

Creating Recurring Events

+ + +

+ Recurring events are created the same way as single-occurrence events, except a + recurrence attribute should be provided instead of a where attribute. The + recurrence attribute should hold a string describing the event's recurrence pattern + using properties defined in the iCalendar standard (» RFC 2445). +

+ +

+ Exceptions to the recurrence pattern will usually be specified by a distinct + recurrenceException attribute. However, the iCalendar standard + provides a secondary format for defining recurrences, and the possibility that + either may be used must be accounted for. +

+ +

+ Due to the complexity of parsing recurrence patterns, further information on this + them is outside the scope of this document. However, more information can be found + in the » Common + Elements section of the Google Data APIs Developer + Guide, as well as in RFC 2445. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. // Note that each attribute is crated as an instance of a matching class
  10. +
  11. $event->title = $service->newTitle("My Recurring Event");
  12. +
  13. $event->where = array($service->newWhere("Palo Alto, California"));
  14. +
  15. $event->content =
  16. +
  17.     $service->newContent(' This is my other awesome event, ' .
  18. +
  19.                          ' occurring all-day every Tuesday from ' .
  20. +
  21.                          '2007-05-01 until 207-09-04. No RSVP required.');
  22. +
  23.  
  24. +
  25. // Set the duration and frequency by specifying a recurrence pattern.
  26. +
  27.  
  28. +
  29. $recurrence = "DTSTART;VALUE=DATE:20070501\r\n" .
  30. +
  31.         "DTEND;VALUE=DATE:20070502\r\n" .
  32. +
  33.         "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n";
  34. +
  35.  
  36. +
  37. $event->recurrence = $service->newRecurrence($recurrence);
  38. +
  39.  
  40. +
  41. // Upload the event to the calendar server
  42. +
  43. // A copy of the event as it is recorded on the server is returned
  44. +
  45. $newEvent = $service->insertEvent($event);
+ +
+ +

Using QuickAdd

+ + +

+ QuickAdd is a feature which allows events to be created using free-form text entry. + For example, the string "Dinner at Joe's Diner on Thursday" would create an event + with the title "Dinner", location "Joe's Diner", and date "Thursday". To take + advantage of QuickAdd, create a new QuickAdd property set to + TRUE and store the freeform text as a + content property. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. $event->content= $service->newContent("Dinner at Joe's Diner on Thursday");
  10. +
  11. $event->quickAdd = $service->newQuickAdd("true");
  12. +
  13.  
  14. +
  15. // Upload the event to the calendar server
  16. +
  17. // A copy of the event as it is recorded on the server is returned
  18. +
  19. $newEvent = $service->insertEvent($event);
+ +
+
+ +

Modifying Events

+ + +

+ Once an instance of an event has been obtained, the event's attributes can be locally + modified in the same way as when creating an event. Once all modifications are + complete, calling the event's save() method will upload the + changes to the calendar server and return a copy of the event as it was created on the + server. +

+ +

+ In the event another user has modified the event since the local copy was retrieved, + save() will fail and the server will return a 409 (Conflict) + status code. To resolve this a fresh copy of the event must be retrieved from the server + before attempting to resubmit any modifications. +

+ +
  1. // Get the first event in the user's event list
  2. +
  3. $event = $eventFeed[0];
  4. +
  5.  
  6. +
  7. // Change the title to a new value
  8. +
  9. $event->title = $service->newTitle("Woof!");
  10. +
  11.  
  12. +
  13. // Upload the changes to the server
  14. +
  15. try {
  16. +
  17.     $event->save();
  18. +
  19. } catch (Zend_Gdata_App_Exception $e) {
  20. +
  21.     echo "Error: " . $e->getMessage();
  22. +
  23. }
+ +
+ +

Deleting Events

+ + +

+ Calendar events can be deleted either by calling the calendar service's + delete() method and providing the edit URL + of an event or by calling an existing event's own delete() + method. +

+ +

+ In either case, the deleted event will still show up on a user's private event feed if + an updateMin query parameter is provided. Deleted events can be + distinguished from regular events because they will have their + eventStatus property set to + "http://schemas.google.com/g/2005#event.canceled". +

+ +
  1. // Option 1: Events can be deleted directly
  2. +
  3. $event->delete();
+ + +
  1. // Option 2: Events can be deleted supplying the edit URL of the event
  2. +
  3. // to the calendar service, if known
  4. +
  5. $service->delete($event->getEditLink()->href);
+ +
+ +

Accessing Event Comments

+ + +

+ When using the full event view, comments are not directly stored within an entry. + Instead, each event contains a URL to its associated comment feed + which must be manually requested. +

+ +

+ Working with comments is fundamentally similar to working with events, with the only + significant difference being that a different feed and event class should be used and + that the additional meta-data for events such as where and when does not exist for + comments. Specifically, the comment's author is stored in the + author property, and the comment text is stored in the + content property. +

+ +
  1. // Extract the comment URL from the first event in a user's feed list
  2. +
  3. $event = $eventFeed[0];
  4. +
  5. $commentUrl = $event->comments->feedLink->url;
  6. +
  7.  
  8. +
  9. // Retrieve the comment list for the event
  10. +
  11. try {
  12. +
  13. $commentFeed = $service->getFeed($commentUrl);
  14. +
  15. } catch (Zend_Gdata_App_Exception $e) {
  16. +
  17.     echo "Error: " . $e->getMessage();
  18. +
  19. }
  20. +
  21.  
  22. +
  23. // Output each comment as an HTML list
  24. +
  25. echo "<ul>";
  26. +
  27. foreach ($commentFeed as $comment) {
  28. +
  29.     echo "<li><em>Comment By: " . $comment->author->name "</em><br/>" .
  30. +
  31.          $comment->content . "</li>";
  32. +
  33. }
  34. +
  35. echo "</ul>";
+ +
+
+
+ + + + + + + + + +
+ Authenticating with ClientLogin + + + + +
+
+ +
+ + \ No newline at end of file -- cgit v1.2.3