Der Zentralkalender soll eine Webplattform sein, in der Gruppen rund um Freie Software ihre Veranstaltungen planen können. Entgegen der Namensgebung wird hier über ein dezentralisiertes System nachgedacht, das den Austausch und die gesammelte Darstellung von Terminen ermöglicht.

Der Name der Software ist DisCal

Anforderungen

Umsetzung dieser Anforderungen

Begriffsklärung

Schritte bei der Realisierung

Technische Umsetzungen

Aufbau

Eine Site Besteht aus:

Mögliche Benutzerrollen

Datenformat

Das generische Austauschformat ist iCalendar, DisCal erweitert das Format um folgende Atribute (Atribute von VEVENT):

Verknüpfen einer Site mit einer anderen

Via Polling:

  1. In der Site Registry auf Site B wird Site A für polling registriert
  2. über ein Importmodul werden regelmäßig Daten von dieser Site in den lokalen Event store übertragen
    • ist das Atribut X-HOP leer oder ungültig, wird es auf 1 gesetzt, ansonsten um 1 inkrementiert
    • ist das Atribut X-REVISION leer oder ungültig, wird es auf 1 gesetzt, ansonsten übernommen
    • ist das Atribut X-REVISE-URL leer, wird die URL zum revise-frontend von Site B eingetragen
    • ist die UID leer (sollte bei iCal-Quellen nicht vorkommen) oder liegt in einem nicht iCal-Konformen Format vor, wird eine UID mit dem FQDN von Site A im Domain-Part generiert

Via Pushing:

  1. Eine Site B ruft an Site A das Frontend push-register auf, um mitzuteilen, dass sie über Events informiert werden will
    • Site B stellt entweder Credentials für Site A zur verfügung
    • oder lädt einen GPG-Public-Key von Site A herunter
  2. Site A nimmt die Registrierung an (automatisch, oder nach Admin/User-Bestätigung)
  3. An Site A wird ein Termin eingetragen (via enter-event)
    • Die Eingabemaske für Termine überträgt keine UID und kein Atribut X-HOP, X-REVISION oder X-REVISE-URL
    • sind alle Atribute leer, werden sie generiert
      • eine UID für das Event
      • Das Atribut X-HOP wird auf 0 gesetzt
      • Das Atribut X-REVISION wird auf 0 gesetzt
      • Das Atribut X-REVISE-URL wird auf die URL des Revise-Frontends von Site A gesetzt
    • sind alle Atribute im gültigen Wertebereich, werden sie übernommen
    • sind alle oder einige Atribute ungültig (oder nur einige leer), wird der Eintrag ignoriert
  4. Site A speichert den Termin im lokalen Event Store
  5. gleichzeitig: Site A sieht in der Site Registry, dass ein Push an Site B durchgeführt werden soll
  6. Site A ruft das Frontend enter-event von Site B auf
    • Site A überträgt den Termin entweder GPG-Signiert
    • oder unter Nutzung der Credentials
    • Dieser Termin enthält bereits eine UID
    • Das Atribut X-Hop wird inkrementiert
  7. Site B übernimmt den Eintrag in den lokalen Event Store wenn:
    • ein Event mit gleicher UID noch nicht existiert
    • ein Event mit gleicher UID in einer geringeren Revision vorliegt (das Event wird dann überschrieben)
  8. Site B ignoriert den Eintrag wenn:
    • Ein Event mit gleicher UID schon in gleicher oder höherer Revision existiert
  9. Site B ignoriert den Eintrag auf Basis von Kriterien, de der Admin festlegt, z.B.:
    • Die Geo-Koordinaten des Events sind zu entfernt
    • Bestimmte Tags treffen nicht zu
    • X-HOP ist zu hoch
  10. Site B führt ihrerseits push-Operationen an Seiten aus der eigenen Site-Registry durch

Publizieren von Eventänderungen

Szenario: Modifikation beim Ursprung

  1. Ein Benutzer auf Site A legt ein Event an
  2. Das Event wird im Netzwerk publiziert
  3. Ein Benutzer ändert das Event an Site A
    • Die UID wird beibehalten
    • Das Atribut DTSTAMP wird auf die aktuelle Zeit gesetzt (DisCal ignoriert dieses Atribut, der iCal-Standard schreibt eine Erneuerung jedoch vor)

    • Die Atribut X-REVISION wird inkrementiert
    • Das neue Event wird publiziert

Szenario: Modifikation auf anderer Seite

  1. Ein Benutzer auf Site A legt ein Event an
  2. Der Termin wird im Netzwerk publiziert
  3. Ein Benutzer ändert das Event an Site B
    • Die UID wird beibehalten
    • Das Atribut DTSTAMP wird auf die aktuelle Zeit gesetzt
    • Die Atribut X-REVISION wird inkrementiert
    • Das neue Event wird publiziert
    • Das neue Event wird an X-REVISE-URL (ans Site A) gemeldet
  4. Site A nimmt die Änderung an (automatisch, oder nach Admin/User-Bestätigung)
    • Ist das Atribut X-REVISION kleiner, oder gleich der Revision, die aus sich von A aktuell ist, so wird die Revision zurückgehalten und ein Admin oder User wird informiert um den Konflikt aufzulösen
    • Bei der Konfliktauflösung wird die Revisionsnummer weiter inkrementiert
  5. Das geänderte Event wird durch A publiziert (siehe obige Beschreibung)

Existierende Projekte

Frage : Warum nennt man dann die Seite nicht Discal wie das gleichnamige Programm ? Ich zumindest würde, wenn ich eine solche Software suche nie auf die Idee kommen "Zentralkalender" suchen zu lassen...Und ich glaube ich bin da nicht der einzige der sich da einen Kopf über den unpassenden Namen macht.

Zentralkalender (zuletzt geändert am 2014-03-13 18:18:17 durch JochenWeihgold)