Previous Next

Google Kalender verwenden

Die Zend_Gdata_Calendar Klasse kann verwendet werden um Events im Online Google Kalender Service zu sehen, erstellen, updaten und löschen.

Siehe » http://code.google.com/apis/calendar/overview.html für weitere Informationen über die Google Kalender API.

Zum Kalender Service verbinden

Die Google Kalender API basiert, wie alle GData APIs, auf dem Atom Publishing Protocol (APP), einem XML basierenden Format für gemanagte Web-basierte Ressourcen. Verkehr zwischen einem Client und den Google Kalender Servern läuft über HTTP und erlaubt sowohl authentifizierte als auch unauthentifizierte Verbindungen.

Bevor irgendeine Transaktion stattfinden kann, muß diese Verbindung erstellt werden. Die Erstellung einer Verbindung zu den Kalender Server beinhaltet zwei Schritte: Erstellung eines HTTP Clients und das binden einer Zend_Gdata_Calendar Instanz an diesen Client.

Authentifizierung

Die Google Kalender API erlaubt den Zugriff auf beide, öffentliche und private, Kalender Feeds. Öfentliche Foods benötigen keine Authentifizierung, aber sie können nur gelesen werden und bieten reduzierte Funktionalitäten. Private Feeds bieten die kompletteste Funktionalität benötigen aber eine authentifizierte Verbindung zu den Kalender Servern. Es gibt drei Authentifizierungs Schemas die von Google Kalender unterstützt werden:

  • ClientAuth bietet direkte Benutzername/Passwort Authentifizierung zu den Kalender Servern. Da dieses Schema erfordert das Benutzer die Anwendung mit Ihrem Passwort versorgen, ist diese Authentifizierung nur zu empfehlen wenn andere Authentifizierungs Schemas nicht anwendbar sind.

  • AuthSub erlaubt die Authentifizierung zu den Kalender Servern über einen Google Proxy Server. Das bietet den gleichen Level von Bequemlichkeit wie ClientAuth aber ohne die Sicherheits Risiken, was es zu einer idealen Wahl für Web basierende Anwendungen macht.

  • MagicCookie erlaubt die Authentifizierung basieren auf einer semi-zufälligen URL von immerhalb des Google Kalender Interfaces. Das ist das einfachste Authentifizierungs Schema das implmentiert werden kann, erzwingt aber das Benutzer ihre Sicherheits URL manuell empfangen, bevor sie sich authentifizieren können, und ist limitiert auf nur-lesenden Zugriff.

Die Zend_Gdata Bibliothek bietet Unterstützung für alle drei Authentifizierungs Schemas. Der Rest dieses Kapitels nimmt an das die vorhandenen Authentifizierungs Schemas geläufig sind und wie eine korrekte Authentifizierte Verbindung erstellt wird. Für weitere Details kann in die Authentifizierungs Sektion dieses Handbuches, oder in die » Authentifizierungs Übersicht im Google Data API Entwickler Guide gesehen werden.

Eine Service Instanz erstellen

Um mit dem Google Kalender zu interagieren, bietet diese Bibliothek die Zend_Gdata_Calendar Service Klasse. Diese Klasse bietet ein übliches Interface zu den Google Data und Atom Publishing Protocol Modellen und assistiert in der Behandlung der Anfragen zum und von den Kalender Servern.

Sobald ein Authentifizierung Schema ausgewählt wurde, besteht der nächste Schritt darin eine Instanz von Zend_Gdata_Calendar zu erstellen. Der Klassen Konstruktor nimmt eine Instanz von Zend_Http_Client als einzelnes Argument. Das bietet ein Interface für AuthSub und ClientAuth Authentifizierungen, da beide von Ihnen die Erstellung eines speziellen authentifizierten HTTP Clients benötigen. Wenn keine Argumente angegeben werden, wird automatisch eine unauthentifizierte Instanz von Zend_Http_Client erstellt.

Das folgende Beispiel zeigt wie man eine Kalender Service Klasse erstellt und dabei die ClientAuth Authentifizierung verwendet:

// Parameter für die ClientAuth Authentifizierung
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = "sample.user@gmail.com";
$pass = "pa$$w0rd";

// Erstellt einen authentifizierten HTTP Client
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);

// Erstellt eine Instanz des Kalender Services
$service = new Zend_Gdata_Calendar($client);

Ein Kalender Service der AuthSub verwendet, kann ähnlich erstellt werden, durch eine etwas längere Schreibweise:

/*
 * Empfängt die aktuelle URL so das der AuthSub Server weiß wohin er den
 * Benutzer umleiten soll nachdem die Authentifizierung komplett ist.
 */
function getCurrentUrl()
{
    global $_SERVER;

    // Filtert php_self um Sicherheitsprobleme zu vermeiden.
    $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['HTTP_PORT'] != '' &&
        (($protocol == 'http://' && $_SERVER['HTTP_PORT'] != '80') ||
        ($protocol == 'https://' && $_SERVER['HTTP_PORT'] != '443'))) {
        $port = ':' . $_SERVER['HTTP_PORT'];
    } else {
        $port = '';
    }
    return $protocol . $host . $port . $php_request_uri;
}

/**
 * Einen AuthSub authentifizierten HTTP Client nehmen, der den Benutzer
 * zum AuthSub Server zum Login umleitet wenn es notwendig ist.
 */
function getAuthSubHttpClient()
{
    global $_SESSION, $_GET;

    // Wenn es keine AuthSub Session oder einmal-benutzbares Token gibt die auf
    // uns warten, den Benutzer zum AuthSub Server umleiten um Ihn zu erhalten
    if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) {
        // Parameter für den AuthSub Server
        $next = getCurrentUrl();
        $scope = "http://www.google.com/calendar/feeds/";
        $secure = false;
        $session = true;

        // Den Benutzer zum AuthSub server umleiten zur Anmeldung

        $authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
                                                             $scope,
                                                             $secure,
                                                             $session);
         header("HTTP/1.0 307 Temporary redirect");

         header("Location: " . $authSubUrl);

         exit();
    }

    // Konvertiert ein AuthSub einmal-benutzbares Token in ein Session
    // Token wenn das notwendig ist
    if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
        $_SESSION['sessionToken'] =
            Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
    }

    // An diesem Punkt sind wir authentifiziert über AuthSub und können
    // eine authentifizierte HTTP Client Instanz holen

    // Erstellt einen authentifizierte HTTP Client
    $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
    return $client;
}

// -> Skript Bearbeitung beginnt hier <-

// Sicher stellen das der Benutzer eine gültige Session hat, sodas der
// AuthSub Session Token gespeichert werden kann sobald er vorhanden ist
session_start();

// Erstellt eine Instanz des Kalender Services, und leitet den Benutzer
// zum AuthSub Server um wenn das notwendig ist.
$service = new Zend_Gdata_Calendar(getAuthSubHttpClient());

Schlußendlich, kann ein nicht authentifizierter Server erstellt werden um Ihn entweder mit öffentlichen Feeds oder MagicCookie Authentifizierung zu verwenden:

// Erstellt eine Instanz des Kalender Services wobei ein nicht
// authentifizierter HTTP Client verwendet wird

$service = new Zend_Gdata_Calendar();

Es ist zu beachten das die MagicCookie Authentifizierung nicht mit der HTTP Verbindung unterstützt wird, sonder stattdessen wärend der gewählten Sichtbarkeit spezifiziert wird, wärend Anfragen abgeschickt werden. Siehe die folgende Sektion über das Empfangen von Events für ein Beispiel.

Eine Kalender Liste empfangen

Der Kalender Service unterstützt den Empfang einer Liste von Kalendern für den authentifizierten Benutzer. Das ist die gleiche Liste von Kalendern welche im Google Kalender UI angezeigt werden, ausser das jene die als "hidden" markiert sind, auch vorhanden sind.

Die Kalender Liste ist immer privat und es muß über eine authentifizierte Verbindung darauf zugegriffen werden. Es ist nicht möglich eine Kalender Liste eines anderen Benutzers zu erhalten und es kann nicht darauf zugegriffen werden wenn die MagicCookie Authentifizierung verwendet wird. Der Versuch auf eine Kalender Liste zuzugreifen ohne das die notwendigen Zugriffsrechte vorhanden sind, wird fehlschlagen und in einem 401 (Authentifizierung benötigt) Statuc Code resultieren.

$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
$service = new Zend_Gdata_Calendar($client);

try {
    $listFeed= $service->getCalendarListFeed();
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

Der Aufruf von getCalendarListFeed() erstellt eine neue Instanz von Zend_Gdata_Calendar_ListFeed die jeden vorhandenen Kalender als Instanz von Zend_Gdata_Calendar_ListEntry enthält. Nachdem der Feed empfangen wurde, können der Iterator und der Accessor die innerhalb des Feeds enthalten sind, verwendet werden um die enthaltenen Kalender zu inspizieren.

echo "

Kalender Feed Liste

"; echo "
    "; foreach ($listFeed as $calendar) { echo "
  • " . $calendar->title . " (Event Feed: " . $calendar->id . ")
  • "; } echo "
";

Events erhalten

Wie die Liste der Kalender können auch die Events empfangen werden durch Verwendung der Zend_Gdata_Calendar Service Klasse. Die zurückgegebene Event Liste ist vom Typ Zend_Gdata_Calendar_EventFeed und enthält jedes Event als Instanz von Zend_Gdata_Calendar_EventEntry. Wie vorher, erlauben die in der Instanz des Event Feeds enthaltenen Accessoren und der Iterator das individuelle Events inspiziert werden können.

Abfragen

Wenn Events mit der Kalender API empfangen werden, werden speziell erstellte Abfrage URLs verwendet um zu beschreiben welche Events zurückgegeben werden sollten. Die Zend_Gdata_Calendar_EventQuery Klasse vereinfacht diese Aufgabe durch automatische Erstellung einer Abfrage URL basierend auf den gegebenen Parametern. Eine komplette Liste dieser Parameter ist in der » Abfrage Sektion des Google Data API Protokoll Referenz enthalten. Trotzdem gibt es drei Parameter die es Wert sind speziell genannt zu werden:

  • User wird verwendet um den Benutzer zu spezifizieren dessen Kalender gesucht wird, und wird als EMail Adresse spezifiziert. Wenn kein Benutzer angegeben wurde, wird stattdessen "default" verwendet um den aktuellen authentifizierten Benutzer anzuzeigen (wenn er authentifiziert wurde).

  • Visibility spezifiziert ob der öffentliche oder private Kalender eines Benutzers gesucht werden soll. Wenn eine nicht authentifizierte Session verwendet wird und kein MagicCookie vorhanden ist, ist nur der öffentliche Feed vorhanden.

  • Projection spezifiziert wieviele Daten vom Server zurückgegeben werden sollen, und in welchem Format. In den meisten Fällen wird man die komplette ("full") Projektion verwenden wollen. Auch die normale ("basic") Projektion ist vorhanden, welche die meisten Meta-Daten in jedem Inhaltsfeld der Events als menschlich lesbaren Text plaziert, und die kombinierte ("composite") Projketion welche den kompletten text für jedes Kommentar entlang jedes Events inkludiert. Die kombinierte ("composite") Ansicht ist oft viel größer als die komplette ("full") Ansicht.

Events in der Reihenfolge Ihres Startzeitpunktes erhalten

Das folgende Beispiel zeigt die Verwendung der Zend_Gdata_Query Klasse und spezifiziert den privat sichtbaren Feed, welcher eine vorhandene authentifizierte Verbindung zu den Kalender Servern benötigt. Wenn ein MagicCookie für die Authentifizierung verwendet wird, sollte die Sichtbarkeit zuerst auf "private-magicCookieValue" gesetzt werden, sobei magicCookieValue der zufälliger String ist, der erhalten wird, wenn man die private XML Adresse im Google Kalender UI betrachtet. Events werden chronologisch anhand des Startzeitpunktes angefragt und nur Events die in der Zukunft stattfinden werden zurückgegeben.

$query = $service->newEventQuery();
$query->setUser('default');
// Setze $query->setVisibility('private-magicCookieValue') wenn
// MagicCookie Authentifizierung verwendet wird
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setFutureevents('true');

// Empfängt die Event Liste vom Kalender Server
try {
    $eventFeed = $service->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

// Iteriere durch die Liste der Events und gib Sie als HTML Liste aus
echo "
    "; foreach ($eventFeed as $event) { echo "
  • " . $event->title . " (Event ID: " . $event->id . ")
  • "; } echo "
";

Zusätzliche Eigenschaften wie ID, Autor, Wann, Event Status, Sichtbarkeit, Web Inhalt, und Inhalt, sowie andere sind innerhalb von Zend_Gdata_Calendar_EventEntry vorhanden. Siehe die » Zend Framework API Dokumentation und die » Lalender Protokol Referenz für eine komplette Liste.

Events in einem speziellen Datumsbereich empfangen

Um alle Events in einem gewünschten Bereich auszugeben, zum Beispiel vom 1. Dezember 2006 bis zum 15. Dezember 2006, müssen die folgenden zwei Zeilen im vorhergehenden Beispiel hinzugefügt werden. Es ist zu beachten das "$query->setFutureevents('true')" entfernt werden muß, da futureevents die Werte von startMin und startMax überschreibt.

$query->setStartMin('2006-12-01');
$query->setStartMax('2006-12-16');

Es ist zu beachten das startMin inklusive ist, wobei startMax exklusive ist. Als Ergebnis, werden nur die Events bis 2006-12-15 23:59:59 zurückgegeben.

Events durch eine Volltext Abfrage erhalten

Um alle Events auszugeben welche ein spezielles Wort, zum Beispiel "Hundefutter" enthalten, muß die setQuery() Methode verwendet werden wenn die Abfrage erstellt wird.

$query->setQuery("Hundefutter");

Individuelle Events erhalten

Individuelle Events können empfangen werden indem deren Event ID als Teil der Abfrage spezifiziert wird. Statt getCalendarEventFeed() auszurufen, sollte getCalendarEventEntry() aufgerufen werden.

$query = $service->newEventQuery();
$query->setUser('default');
$query->setVisibility('private');
$query->setProjection('full');
$query->setEvent($eventId);

try {
    $event = $service->getCalendarEventEntry($query);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

In einer ähnlichen Weise kann Sie, wenn die Event URL bekannt ist, direkt an getCalendarEntry() übergeben werden um ein spezielles Event zu erhalten. In diesem Fall wird kein Abfrage Objekt benötigt da die Event URL alle notwendigen Informationen enthält um das Event zu erhalten.

$eventURL = "http://www.google.com/calendar/feeds/default/private"
          . "/full/g829on5sq4ag12se91d10uumko";

try {
    $event = $service->getCalendarEventEntry($eventURL);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

Events erstellen

Ein einmal vorkommendes Event erstellen

Events werden einem Kalender hinzugefügt indem eine Instanz von Zend_Gdata_EventEntry erstellt wird, und diese mit den richtigen Daten bekanntgegeben wird. Die Kalender Service Instanz (Zend_Gdata_Calendar) wird dann verwendet um das Event transparent in XML zu konvertieren und diese an den Kalender Server zu senden.

Mindestens die folgenden Attribute sollten gesetzt werden:

  • Title enthält die Kopfzeile die über jedem Event innerhalb der Google Kalender UI angezeigt wird.

  • When zeigt die Dauer des Events und, optional, jede Erinnerung die mit Ihm assoziiert ist. Siehe in die nächste Sektion für mehr Informationen über dieses Attribut.

Andere nützliche Attribute die optional gesetzt werden können sind unter anderem:

  • Author liefert Informationen über den Benutzer der das Event erstellt hat.

  • Content liefert zusätzliche Information über das Event und wird angezeigt wenn die Event Details innerhalb des Google Kalenders angefragt werden.

  • EventStatus zeigt an ob ein Event bestätigt, in Wartestellung oder abgebrochen wurde.

  • Hidden entfernt das Event von der Google Kalender UI.

  • Transparency zeigt ob das Event Zeit auf der Frei/Belegt Liste des Benutzers benötigt.

  • WebContent erlaubt es externe Inhalte zu verlinken und innerhalb eines Events anzubieten.

  • Where indiziert den Ort des Events.

  • Visibility erlaubt es das Event vor der öffentlichen Event Liste zu verstecken.

Für eine komplette Liste an Event Attributen, kann in die » Zend Framework API Documentation und die » Kalender Protokol Referenz gesehen werden. Attribute die mehrfache Werte enthalten können, wo wie "where", sind als Arrays implementiert und müssen korrekt erstellt werden. Es ist zu beachten das alle diese Attribute Objekte als Parameter benötigen. Der Versuch diese stattdessen als Strings oder Primitivvariablen bekanntzugeben wird in einem Fehler wärend der Konvertierung in XML führen.

Sobald das Event bekanntgegeben wurde, kann es zum Kalender Server hochgeladen werden durch seine Übergabe als Argument zur insertEvent() Funktion des Kalender Services.

// Erstellt einen neuen Eintrag und verwendet die magische Factory
// Methode vom Kalender Service
$event= $service->newEventEntry();

// Gibt das Event bekannt mit den gewünschten Informationen
// Beachte das jedes Attribu als Instanz der zugehörenden Klasse erstellt wird
$event->title = $service->newTitle("Mein Event");
$event->where = array($service->newWhere("Berg Ansicht, Kalifornien"));
$event->content =
    $service->newContent(" Das ist mein super Event. RSVP benötigt.");

// Setze das Datum und verwende das RFC 3339 Format.
$startDate = "2008-01-20";
$startTime = "14:00";
$endDate = "2008-01-20";
$endTime = "16:00";
$tzOffset = "-08";

$when = $service->newWhen();
$when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
$when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
$event->when = array($when);

// Das Event an den Kalender Server hochladen
// Eine Kopie des Events wird zurückgegeben wenn es am Server gespeichert wird
$newEvent = $service->insertEvent($event);

Event Planungen und Erinnerungen

Die Startzeit und Dauer eines Events werden durch die Werte seiner when Eigenschaften, startTime, endTime, und valueString ermittelt. StartTime und EndTime kontrollieren die Dauer des Events, wärend die valueString Eigenschaft aktuell nicht verwendet wird.

Jeden Tag wiederkehrende Events können geplant werden indem nur das Datum spezifiziert und die Zeit ausgelassen wird wenn startTime und endTime gesetzt werden. Genauso können Events die keine Dauer haben spezifiziert werden indem endTime unterdrückt wird. In allen Fällen sollten Datums und Zeitwerte im » RFC3339 Format angegeben werden.

// Plane ein Event das am 05. Dezember 2007 um 14h PST stattfindet
// (UTC-8) mit der Dauer einer Stunde.
$when = $service->newWhen();
$when->startTime = "2007-12-05T14:00:00-08:00";
$when->endTime="2007-12-05T15:00:00:00-08:00";

// Die "when" Eigenschaft an das Event binden
$event->when = array($when);

Das when Attribut kontrolliert auch wann Erinnerungen an einen Benutzer gesendet werden. Erinnerungen werden in einem Array gespeichert und jedes Event kann abgefragt werden um die Erinnerungen herauszufinden die mit Ihm verbunden sind.

Damit ein reminder gültig ist, muß er zwei Attribute gesetzt haben: method und eine Zeit. Method akzeptiert einen der folgenden Strings: "alert", "email" oder "sms". Die Zeit sollte als Integer eingegeben werden und kann mit den Eigenschaften minutes, hours, days oder absoluteTime gesetzt werden. Trotzdem darf eine gültige Anfrage nur eines dieser Attribute gesetzt haben. Wenn eine gemischte Zeit gewünscht wird, muß der Wert in die am besten passende und vorhandene Einheit konvertiert werden. Zum Beispiel, 1 Stunde und 30 Minuten sollten als 90 Minuten angegeben werden.

// Erstellt ein Erinnerungs Objekt. Es sollte eine Email an den Benutzer
// senden, 10 Minuten vor dem Event.
$reminder = $service->newReminder();
$reminder->method = "email";
$reminder->minutes = "10";

// Die Erinnerung einem existierenden Event als "when" Eigenschaft hinzufügen
$when = $event->when[0];
$when->reminders = array($reminder);

Wiederkehrende Events erstellen

Wiederkehrende Events werden auf dem gleichen Weg erstellt wie einmal stattfindende Events, ausser das ein Wiederholungs "recurrence" Attribut statt dem "where" Attribut angegeben werden muß. Das Wiederholungs Attribut sollte einen String enthalten der das Wiederholungs Pattern des Events beschreibt und das mit Eigenschaften definiert werden kann die im iCalender Standard (» RFC 2445) beschrieben sind.

Ausnahmen im Wiederholungs Pattern werden normalerweise durch ein ausgeprägtes recurrenceException Attribut spezifiziert. Trotzdem bietet der iCalender Standard ein zweites Format für die Definition von Wiederholungen, und die Möglichkeit das jedes von Ihnen verwendet werden kann und für jedes davon muß das gehandhabt werden.

Durch die Komplexität des analysierens des Wiederholungs Patterns, sind weitere Informationen hierüber ausserhalb des Umfangs dieses Dokuments. Trotzdem können weitere Informationen im » Kapitel über normale Elemente des Google Data API Entwickler Leitfadens gefunden werden, sowie in der RFC 2445.

// Erstelle einen neuen Eintrag und verwendet die magische
// Factory Methode des Kalender Services
$event= $service->newEventEntry();

// Gibt das Event mit den gewünschten Informationen bekannt
// Es ist zu beachten das jedes Attribut als Instanz
// der betreffenden Klasse erstellt wird
$event->title = $service->newTitle("Mein wiederkehrendes Event");
$event->where = array($service->newWhere("Palo Alto, Kalifornien"));
$event->content =
    $service->newContent('Das ist mein anderes super Event, ' .
                         'das jeden Dienstag von 01.05.2007 bis ' .
                         '04.09.2007 stattfinden. Kein RSVP benötigt.");

// Setzt Dauer und Frequenz durch Spezifizierung des Wiederholungs Patterns

$recurrence = "DTSTART;VALUE=DATE:20070501\r\n" .
        "DTEND;VALUE=DATE:20070502\r\n" .
        "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n";

$event->recurrence = $service->newRecurrence($recurrence);

// Das Event zum Kalender Server hochladen
// Eine Kopie des Events wird zurückgegeben,
// wenn es auf dem Server gespeichert wird
$newEvent = $service->insertEvent($event);

QuickAdd verwenden

QuickAdd ist ein Feature das es erlaubt Events zu erstellen indem ein frei definierter Texteintrag verwendet wird. Zum Beispie lwürde der String "Abendessen bei Joe's Dinner am Dienstag" ein Event erstellen mit dem Titel "Abendessen", dem Ort "Joe's Dinner", und dem Datum "Dienstag". Um die Vorteile von QuickAdd zu verwenden, muß eine neue QuickAdd Eigenschaft erstellt, auf TRUE gesetzt und der frei definierbare Text als content Eigenschaft gespeichert werden.

// Erstelle einen neuen Eintrag und verwendet die magische
 // Factory Methode des Kalender Services
$event= $service->newEventEntry();

// Gibt das Event mit den gewünschten Informationen bekannt
$event->content= $service->newContent("Dinner at Joe's Diner on Thursday");
$event->quickAdd = $service->newQuickAdd("true");

// Das Event zum Kalender Server hochladen
// Eine Kopie des Events wird zurückgegeben,
// wenn es auf dem Server gespeichert wird
$newEvent = $service->insertEvent($event);

Events bearbeiten

Sobald eine Instanz eines Events erstellt wurde, können die Attribute des Events lokal auf dem selben Weg wie bei der Erstellung des Events geänder werden. Sobald alle Änderungen komplett sind, schickt der Aufruf der save() Methode des Events die Änderungen an den Kalender Server und gibt eine Kopie des Events zurück wie es auf dem Server erstellt wurde.

Im Fall das ein anderer Benutzer das Event modifiziert hat seitdem die lokale Kopie empfangen wurde, wird die save() Methode fehlschlagen und einen 409 (Konflikt) Status Code zurück geben. Um das zu beheben muß eine neue Kopie des Events vom Server empfangen werden bevor ein erneuter Versuch stattfindet die Änderungen wieder zu speichern.

// Das erste Event auf der Liste der Events eines Benutzers erhalten
$event = $eventFeed[0];

// Den Titel zu einem neuen Wert ändern
$event->title = $service->newTitle("Wuff!");

// Die Änderungen an den Server hochladen
try {
    $event->save();
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

Events löschen

Kalender Events können entweder durch den Aufruf der delete() Methode des Kalender Services, und des Angebens der Bearbeitungs URL des Events durchgeführt werden, oder durch Aufruf der eigenen delete() Methode des Events.

In jedem Fall, wird das gelöschte Event trotzdem noch am Privaten Event Feed des Benutzers aufscheinen wenn ein updateMin Abfrage Parameter angegeben wurde. Gelöschte Events können von normalen Events unterschieden werden weil Sie Ihre eigene eventStatus Eigenschaft auf "http://schemas.google.com/g/2005#event.canceled" gesetzt haben.

// Option 1: Events können direkt gelöscht werden
$event->delete();
// Option 2: Events können gelöscht werden indem die Bearbeitungs URL
// des Events zu diesem Kalender Service angegeben wird, wenn diese
// bekannt ist
$service->delete($event->getEditLink()->href);

Auf Event Kommentare zugreifen

Den die komplette Event Ansicht verwendet wird, werden Kommentare nicht direkt innerhalb eines Events gespeichert. Stattdessen enthält jedes Event eine URL zum dazugehörigen Kommentar Feed welcher manuell angefragt werden muß.

Das Arbeiten mit Kommentaren ist fundamental ähnlich zum Arbeiten mit Events, mit dem einzigen signifikanten Unterschied das eine andere Feed und Event Klasse verwendet werden sollte, und das die zusätzlichen Meta-Daten für Events wie zum Beispiel "where" und "when" für Kommentare nicht existieren. Speziell wird der Author des Kommentars in der author Eigenschaft und der Kommentar Text in der content Eigenschaft gespeichert.

// Die normale URL vom ersten Event der Feed Liste des Benutzers extrahieren
$event = $eventFeed[0];
$commentUrl = $event->comments->feedLink->url;

// Die Kommentarliste für das Event erhalten
try {
$commentFeed = $service->getFeed($commentUrl);
} catch (Zend_Gdata_App_Exception $e) {
    echo "Fehler: " . $e->getMessage();
}

// Jedes Kommentar als HTML Liste ausgeben
echo "
    "; foreach ($commentFeed as $comment) { echo "
  • Kommentar von: " . $comment->author->name "
    " . $comment->content . "
  • "; } echo "
";
Previous Next
Einführung zum Zend Framework
Übersicht
Installation
Einstieg ins Zend Framework
Schnellstart in den Zend Framework
Zend Framework & MVC Einführung
Das Projekt erstellen
Ein Layout erstellen
Ein Modell und eine Datenbank Tabelle erstellen
Erstellen eines Formulars
Gratulation!
Autoloading im Zend Framework
Einführung
Ziele und Design
Grundsätzliche Verwendung von Autoloadern
Automatisches Laden von Ressourcen
Zusammenfassung
Plugins im Zend Framework
Einführung
Verwenden von Plugins
Fazit
Einstieg in Zend_Layout
Einführung
Zend_Layout verwenden
Zend_Layout: Fazit
Einstieg in Zend_View Platzhalter
Einführung
Grundsätzliche Verwendung von Platzhaltern
Standard Platzhalter
View Platzhalter: Fazit
Zend_Form's Gestalter (Decorator) verstehen und verwenden
Einführung
Decorator Grundlagen
Layeraufbau von Decorators
Darstellung individueller Decorators
Erstellung und Darstellung von kombinierten Elementen
Fazit
Einstieg in Zend_Session, Zend_Auth, und Zend_Acl
Erstellung von Multi-User Anwendungen mit Zend Framework
User Session im Zend Framework managen
Benutzer im Zend Framework authentifizieren
Erstellung eines Authorisations Systems in Zend Framework
Einstieg in Zend_Search_Lucene
Einführung in Zend_Search_Lucene
Lucene Index Struktur
Indezes öffnen und erstellen
Indizierung
Suchen
Unterstützte Abfragen
Seitendarstellung von Suchergebnissen
Einstieg in Zend_Paginator
Einführung
Einfaches Beispiel
Seitenkontrolle und ScrollingStyles
Alles zusammenfügen
Zend Framework's Referenz
Zend_Acl
Einführung
Verfeinern der Zugriffskontrolle
Fortgeschrittene Verwendung
Zend_Amf
Einführung
Zend_Amf_Server
Zend_Application
Einführung
Zend_Application Quick Start
Theorie der Funktionsweise
Beispiele
Kern Funktionalität
Vorhandene Ressource Plugins
Zend_Auth
Einführung
Datenbanktabellen Authentifizierung
Digest Authentication
HTTP Authentication Adapter
LDAP Authentifizierung
Open ID Authentifikation
Zend_Barcode
Einführung
Barcodes mit Hilfe der Zend_Barcode Klasse erstellen
Zend_Barcode Objekte
Zend_Barcode Renderer
Zend_Cache
Einführung
Die Theorie des Cachens
Zend_Cache Frontends
Zend_Cache Backends
Der Cache Manager
Zend_Captcha
Einführung
Captcha Anwendung
CAPTCHA Adapter
Zend_CodeGenerator
Einführung
Zend_CodeGenerator Beispiele
Zend_CodeGenerator Referenz
Zend_Config
Einleitung
Theory of Operation
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
Einführung
Definieren von Getopt Regeln
Holen von Optionen und Argumenten
Konfigurieren von Zend_Console_Getopt
Zend_Controller
Zend_Controller Schnellstart
Zend_Controller Grundlagen
Der Front Controller
Das Request Objekt
Der Standard Router
Der Dispatcher
Action Controller
Action Helfer
Das Response Objekt
Plugins
Eine konventionelle modulare Verzeichnis Struktur verwenden
MVC Ausnahmen
Zend_Currency
Einführung in Zend_Currency
Zend_Currency verwenden
Optionen für Währungen
Was macht eine Währung aus?
Wo ist die Währung?
Wie sieht die Währung aus?
Wie viel Währung habe ich?
Rechnen mit Währungen
Währungen wechseln
Zusätzliche Informationen für Zend_Currency
Zend_Date
Einführung
Theorie der Arbeitsweise
Basis Methoden
Zend_Date API Übersicht
Erstellen von Datumswerten
Konstanten für generelle Datums Funktionen
Funktionierende Beispiele
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
Zend_Db_Table Relationships
Zend_Db_Table_Definition
Zend_Debug
Variablen ausgeben
Zend_Dojo
Einführung
Zend_Dojo_Data: dojo.data Envelopes
Dojo View Helfer
Formular Elemente und Dekoratore für Dojo
Support für den Build Layer von Zend_Dojo
Zend_Dom
Einführung
Zend_Dom_Query
Zend_Exception
Verwenden von Ausnahmen
Grundsätzliche Verwendung
Vorherige Exceptions
Zend_Feed
Einführung
Feeds importieren
Feeds von Websites abrufen
Einen RSS Feed konsumieren
Einen Atom Feed konsumieren
Einen einzelnen Atom Eintrag konsumieren
Verändern der Feed- und Eintragsstruktur
Eigene Klassen für Feeds und Einträge
Zend_Feed_Reader
Zend_Feed_Writer
Zend_Feed_Pubsubhubbub
Zend_File
Zend_File_Transfer
Prüfungen für Zend_File_Transfer
Filter für Zend_File_Transfer
Zend_Filter
Einführung
Standard Filter Klassen
Filter Ketten
Filter schreiben
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Schnellstart mit Zend_Form
Erstellen von Form Elementen mit Hilfe von Zend_Form_Element
Erstellen von Form durch Verwendung von Zend_Form
Erstellen von eigenem Form Markup durch Zend_Form_Decorator
Standard Form Elemente die mit dem Zend Framework ausgeliefert werden
Standard Formular Dekoratoren die mit dem Zend Framework ausgeliefert werden
Internationalisierung von Zend_Form
Fortgeschrittene Verwendung von Zend_Form
Zend_Gdata
Einführung
Authentifizierung mit AuthSub
Die Buchsuche Daten API verwenden
Authentifizieren mit ClientLogin
Google Kalender verwenden
Verwenden der Google Dokumente Listen Daten API
Verwenden von Google Health
Google Tabellenkalkulation verwenden
Google Apps Provisionierung verwenden
Google Base verwenden
Picasa Web Alben verwenden
Verwenden der YouTube Daten API
Gdata Ausnahmen auffangen
Zend_Http
Einführung
Zend_Http_Client - Fortgeschrittende Nutzung
Zend_Http_Client - Verbindungsadapter
Zend_Http_Cookie und Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
Einführung
Zend_Json
Einführung
Grundlegende Verwendung
Fortgeschrittene Verwendung von Zend_Json
XML zu JSON Konvertierung
Zend_Json_Server - JSON-RPC Server
Zend_Layout
Einführung
Zend_Layout Schnellstart
Zend_Layout Konfigurations Optionen
Erweiterte Verwendung von Zend_Layout
Zend_Ldap
Einführung
API Übersicht
Szenarien der Verwendung
Tools
Objektorientierter Zugriff auf den LDAP Baum durch Verwendung von Zend_Ldap_Node
Informationen vom LDAP Server erhalten
Serialisieren von LDAP Daten von und zu LDIF
Zend_Loader
Dynamisches Laden von Dateien und Klassen
Der Autoloader
Ressource Autoloader
Plugins laden
Zend_Locale
Einführung
Zend_Locale verwenden
Normalisierung und Lokalisierung
Arbeiten mit Daten und Zeiten
Unterstützte Gebietsschemata
Zend_Log
Übersicht
Writer
Formatter
Filter
Die Factory verwenden um ein Log zu erstellen
Zend_Mail
Einführung
Versand über SMTP
Versand von mehreren E-Mails über eine SMTP Verbindung
Verwendung von unterschiedlichen Versandwegen
HTML E-Mail
Anhänge
Empfänger hinzufügen
Die MIME Abgrenzung kontrollieren
Zusätzliche Kopfzeilen
Zeichensätze
Kodierung
SMTP Authentifizierung
SMTP Übertragungen sichern
Lesen von Mail Nachrichten
Zend_Markup
Einführung
Beginnen mit Zend_Markup
Zend_Markup Parser
Zend_Markup Renderer
Zend_Measure
Einführung
Erstellung einer Maßeinheit
Ausgabe von Maßeinheiten
Manipulation von Maßeinheiten
Arten von Maßeinheiten
Zend_Memory
Übersicht
Memory Manager
Memory Objekte
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
Einführung
Seiten
Container
Zend_Oauth
Einführung zu OAuth
Zend_OpenId
Einführung
Zend_OpenId_Consumer Grundlagen
Zend_OpenId_Provider
Zend_Paginator
Einführung
Verwendung
Konfiguration
Advanced usage
Zend_Pdf
Einführung
Erstellen und Laden von PDF Dokumenten
Änderungen an PDF Dokumenten speichern
Arbeiten mit Seiten
Zeichnen
Interaktive Features
Dokument Informationen und Metadaten
Anwendungsbeispiel für die Zend_Pdf Komponente
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
Einführung
Beispiel der Verwendung
Framework
Adapter
Anpassen von Zend_Queue
Stomp
Zend_Reflection
Einführung
Zend_Reflection Beispiele
Zend_Reflection Referenz
Zend_Registry
Die Registry verwenden
Zend_Rest
Einführung
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
Überblick
Indexerstellung
Einen Index durchsuchen
Abfragesprache
Abfrage Erzeugungs API
Zeichensätze
Erweiterbarkeit
Zusammenarbeit Mit Java Lucene
Erweitert
Die besten Anwendungen
Zend_Serializer
Einführung
Zend_Serializer_Adapter
Zend_Server
Einführung
Zend_Server_Reflection
Zend_Service
Einführung
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instanzen
Zend_Service_Amazon_Ec2: Windows Instanzen
Zend_Service_Amazon_Ec2: Reservierte Instanzen
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Maschinen Images (AMI)
Zend_Service_Amazon_Ec2: Elastischer Block Speicher (EBS)
Zend_Service_Amazon_Ec2: Elastische IP Adressen
Zend_Service_Amazon_Ec2: Schlüsselpaare
Zend_Service_Amazon_Ec2: Regionen und Availability Zones
Zend_Service_Amazon_Ec2: Sicherheitsgruppen
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_DeveloperGarden
Zend_Service_Flickr
Zend_Service_LiveDocx
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
Zend_Service_SlideShare
Zend_Service_StrikeIron
Zend_Service_StrikeIron: Mitgelieferte Services
Zend_Service_StrikeIron: Erweiterte Verwendung
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_WindowsAzure
Zend_Service_Yahoo
Zend_Session
Einführung
Grundsätzliche Verwendung
Fortgeschrittene Benutzung
Globales Session Management
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDL Zugriffsmethoden
AutoDiscovery
Zend_Tag
Einführung
Zend_Tag_Cloud
Zend_Test
Einführung
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
Einführung
Arbeiten mit Zend_TimeSync
Zend_Tool
Verwendung von Zend_Tool auf der Kommandozeile
Zend_Tool erweitern
Zend_Tool_Framework
Einführung
Verwenden des CLI Tools
Architektur
Erstellen von Providern für die Verwendung mit Zend_Tool_Framework
Mitgelieferte System Provider
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
Einführung
Ein Projekt erstellen
Project Provider für Zend_Tool
Zend_Tool_Project Internas
Zend_Translate
Einführung
Adapter für Zend_Translate
Verwendung der Übersetzungsadapter
Erstellen von Quelldateien
Zusätzliche Features für Übersetzungen
Schreibweisen von Pluralformen für Übersetzungen
Zend_Uri
Zend_Uri
Zend_Validate
Einführung
Standard Prüfklassen
Kettenprüfungen
Schreiben von Prüfern
Prüfungsmeldungen
Zend_Version
Die Version des Zend Frameworks erhalten
Zend_View
Einführung
Controller Skripte
View Scripte
View Helfer
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
Einführung
Zend_XmlRpc_Client
Zend_XmlRpc_Server
ZendX_Console_Process_Unix
ZendX_Console_Process_Unix
ZendX_JQuery
Introduction
ZendX_JQuery View Helpers
ZendX_JQuery Form Elements and Decorators
Zend Framework Voraussetzungen
Einführung
Zend Framework's Migrationshinweise
Zend Framework 1.10
Zend Framework 1.9
Zend Framework 1.8
Zend Framework 1.7
Zend Framework 1.6
Zend Framework 1.5
Zend Framework 1.0
Zend Framework 0.9
Zend Framework 0.8
Zend Framework 0.6
Zend Framework Coding Standard für PHP
Übersicht
PHP Dateiformatierung
Namens Konventionen
Code Stil
Zend Framework Dokumentations Standard
Übersicht
Formatierung von Dokumentationsdateien
Empfehlungen
Vorgeschlagene Struktur für die Projekt Struktur von Zend Framework MVC Anwendungen
Übersicht
Vorgeschlagene Verzeichnis Struktur für Projekte
Modul Struktur
Leitfaden für die Rewrite Konfiguration
Zend Framework's Performanceratgeber
Einführung
Laden von Klassen
Zend_Db Performance
Internationalisierung (I18n) und Lokalisierung (L10n)
Darstellen der View
Urheberrecht Informationen