đź“… UnterstĂĽtzung fĂĽr iCal Feed Sync im Discourse Kalender Plugin (Import von .ics URLs)

Ich habe meine Discourse-Instanz erfolgreich neu erstellt🥲


Discourse’s offizielles discourse-calendar-Plugin unterstützt bereits den .ics-Export, was äußerst nützlich für die externe Weitergabe von Discourse-Veranstaltungen ist. Viele Communities – insbesondere im Bildungs-, Regierungs- oder Unternehmensbereich – verlassen sich jedoch auf externe iCal-Feeds, um Veranstaltungsinformationen zu veröffentlichen (z. B. von Moodle, Office365, Google Kalender oder institutionellen CMS-Plattformen).

Derzeit gibt es keine integrierte Möglichkeit, aus .ics-Quellen zu importieren oder zu synchronisieren. Dies schränkt die Nutzung von Discourse als zentralen Kalender für Communities ein, die wichtige Zeitpläne bereits anderswo veröffentlichen.


:sparkles: Funktionsvorschlag

FĂĽgen Sie dem Discourse Calendar-Plugin die iCal-Feed-Synchronisierung (Import von .ics-URLs) hinzu.

:white_check_mark: Kernfunktionen

  • Konfigurieren Sie eine .ics-Feed-URL fĂĽr eine kalenderfähige Kategorie oder ein Thema.
  • Importieren Sie automatisch Ereignisse in den Kalender, die mit dem .ics-Feed ĂĽbereinstimmen.
  • Geben Sie ein Synchronisierungsintervall an (z. B. stĂĽndlich, täglich) oder aktivieren Sie eine manuelle Schaltfläche “Jetzt synchronisieren”.
  • Verwenden Sie das Ereignis-UID-Feld, um Duplikate zu vermeiden und geänderte Ereignisse sauber zu aktualisieren.

:wrench: Optionale Konfigurationen

  • Kennzeichnen oder beschriften Sie importierte Ereignisse, um ihre externe Quelle anzuzeigen.
  • Wählen Sie zwischen:
    • Einweg-Synchronisierung (extern → Discourse),
    • oder Zwei-Wege-Synchronisierung (Bearbeitung synchronisierter Ereignisse in Discourse ĂĽberträgt Ă„nderungen zurĂĽck – zukĂĽnftiger Umfang).
  • UnterstĂĽtzen Sie mehrere .ics-Feeds pro Kalender, die in einer Ansicht zusammengefĂĽhrt werden.
  • Visuelle Anzeige, dass ein Ereignis extern synchronisiert ist (z. B. “Synchronisiert von: outlook.university.edu”).

:teacher: Anwendungsfälle

Sektor Beispiel-Anwendungsfall
Bildung Automatische Befüllung von Studentenforen mit Terminen, Kursplänen, Prüfungen usw.
Regierung Synchronisierung offizieller Veranstaltungen aus CMS oder Intranet mit einem öffentlich zugänglichen Community-Kalender
Unternehmen Spiegelung interner Besprechungskalender (aus Outlook oder Google Kalender)
Veranstaltungsforen Integration von Sprecherlisten oder Sitzungsplänen von externen Anbietern

:locked_with_key: Sicherheit und Datenschutz

  • Kalender-Feeds könnten öffentlichen oder tokenisierten Zugriff unterstĂĽtzen (z. B. URL mit geheimem Token).
  • Die UnterstĂĽtzung fĂĽr OAuth2 / Basic Auth könnte eine zukĂĽnftige Verbesserung sein.

:paperclip: Verwandt

  • discourse-calendar
  • .ics-Export bereits unterstĂĽtzt – groĂźartiges Präzedenzfall!
  • Ă„hnlicher Bedarf in älteren Threads diskutiert, z. B. hier

:counterclockwise_arrows_button: Kompatibilität

Diese Funktion würde discourse-events (jetzt veraltet) nicht erfordern und würde nativ mit der bestehenden Discourse Calendar-Syntax ([calendar] und [event]) funktionieren. Benutzer könnten weiterhin manuell native Discourse-Ereignisse erstellen – die iCal-Synchronisierung würde diese Kalender lediglich ergänzen.


Ich würde gerne erfahren, ob diese Funktion bereits auf der Roadmap steht – oder ob andere in der Community sie wertvoll finden würden.

Danke!

5 „Gefällt mir“

@Ethsim2 Dies wäre eine riesige Funktion, und ich habe untersucht, wie machbar sie ist, da Discourse auf FullCalendar umsteigt.

@sam hat kürzlich direkt auf fullcalendar.io verwiesen, und es stellt sich heraus, dass FullCalendar jetzt über sein offizielles Plugin-System eine erstklassige Unterstützung für .ics-Feeds bietet — die Hauptarbeit ist also bereits von der Bibliothek erledigt.


:rocket: Vorschlag: .ics-Feed-Synchronisierung mit nativer FullCalendar-UnterstĂĽtzung aktivieren

Mit der bevorstehenden Integration von FullCalendar v6 in Discourse ist die Grundlage fĂĽr die native UnterstĂĽtzung dieser Funktion gelegt.

Das @fullcalendar/icalendar-Plugin von FullCalendar (mit ical.js im Hintergrund) ermöglicht das Laden öffentlicher .ics-Feeds wie folgt:

new Calendar(calendarEl, {
  plugins: [dayGridPlugin, iCalendarPlugin],
  events: {
    url: 'https://example.com/my-calendar.ics',
    format: 'ics'
  }
});

Das ist alles, was benötigt wird, um einen entfernten iCal-Feed in der Kalenderansicht darzustellen — keine benutzerdefinierte Analyse, einfach Plug-and-Play.


:hammer_and_wrench: Vorgeschlagene Implementierungsschritte fĂĽr Discourse

  1. Füge @fullcalendar/icalendar und ical.js zum Plugin hinzu (sobald FullCalendar v6 vollständig integriert ist).
  2. FĂĽge eine Admin-/Plugin-Einstellung (oder eine Option pro Kategorie) hinzu, um eine oder mehrere .ics-URLs einzugeben.
  3. Rendere den Feed auf der Client-Seite in der Kalenderansicht.
  4. (Optional) Implementiere serverseitige Synchronisierung, die:
    • Den Feed periodisch abruft
    • Neue/aktualisierte Ereignisse analysiert
    • Zugehörige Discourse-Themen erstellt oder aktualisiert

:counterclockwise_arrows_button: Synchronisierungsfrequenz

Es ist wichtig zu beachten, dass die Standard-.ics-Verarbeitung von FullCalendar den Feed nur beim anfänglichen Laden des Kalenders im Browser abruft. Das bedeutet:

  • Es gibt keine tägliche oder automatische Aktualisierung.
  • Benutzer sehen eine veraltete Kopie, es sei denn, sie laden neu oder lösen manuell eine Aktualisierung aus.
  • Es gibt keine Persistenz — wenn ein Benutzer navigiert, sind die Feed-Daten weg.

Um dies wirklich nĂĽtzlich zu machen, sollte Discourse idealerweise:

  • Einen täglichen (oder geplanten) Sidekiq-Job ausfĂĽhren, der den Feed serverseitig abruft.
  • Die analysierten Ereignisse fĂĽr eine konsistente Darstellung fĂĽr alle Benutzer zwischenspeichern.
  • Optional Ereignisse mit Themen verknĂĽpfen oder neue erstellen, um eine vollständige Integration zu ermöglichen.

Dies würde ein ordnungsgemäßes Synchronisierungsverhalten ermöglichen und eine wichtige Funktion wiederbeleben, die zuvor von Angus’ Plugin behandelt wurde — jedoch auf einer sauberen und wartbaren Grundlage.


:white_check_mark: Vorteile

  • Integriert nahtlos .ics-Feeds von Google Calendar, Outlook, iCal usw.
  • Macht Discourse zu einem Kalender-Konsumenten, nicht nur zu einem Exporteur.
  • GroĂźartig fĂĽr Community-Foren, Studentengruppen, BĂĽrgerveranstaltungen usw.
  • Basiert vollständig auf unterstĂĽtzten FullCalendar-Funktionen — minimales benutzerdefiniertes JS erforderlich.

Ich würde mich freuen, wenn dies jetzt umgesetzt wird, da das Kalender-Plugin wieder Aufmerksamkeit erhält. Gerne helfe ich beim Testen oder trage zu einem Proof-of-Concept bei.

Entschuldigung @Halden42, aber ich bin etwas verwirrt ĂĽber deinen Beitrag.

Ich verstehe, dass Discourse mit dem FullCalendar-Upgrade „die Grundlagen“ des Kalendersystems „repariert“, aber ich mache mir Sorgen, wie viel Zeit es mich kosten würde, einen vollen Kalender manuell zu befüllen. Ich benutze die Discourse-GUI täglich für alles, und Inhalte außerhalb der Benutzeroberfläche duplizieren zu müssen, ist keine Option.

Ich habe bemerkt, dass du eine Funktion erwähnt hast, die ich von Angus’ Plugin wirklich vermisse und die meiner Meinung nach den Hauptpunkt der Synchronisierung von Ereignissen in Discourse erfasst:

Dieser Teil wäre für meinen Anwendungsfall unerlässlich.

Aber ich bin besorgt, weil du keine Details darüber gegeben hast, wie das implementiert werden könnte. Könntest du erklären, wie das in der Praxis aussehen würde? Würde Discourse ein Thema pro Ereignis erstellen? Würde es Updates oder Löschungen unterstützen, wenn sich der Quellkalender ändert?

Das ist der Teil, auf den ich mich am meisten verlassen mĂĽsste, und ich bin mir noch nicht sicher, wie nah wir dem sind.

Vielen Dank nochmals fĂĽr deine ausfĂĽhrliche Antwort.

2 „Gefällt mir“

Danke @Ethsim2 — das ist eine tolle Ergänzung, und ich denke, Ihre Sorge ist genau die richtige: Es geht nicht nur darum, Ereignisse aus einem .ics-Feed anzuzeigen, sondern sie auf nützliche, nachverfolgbare Weise in Discourse einzubetten.

Als ich sagte „Ereignisse mit Themen verknüpfen oder neue erstellen“, stellte ich mir ein Setup ähnlich wie bei Anguss’ Plugin vor — bei dem jedes Ereignis im Feed einem Thema auf Discourse entsprechen würde und Aktualisierungen des Feeds im Laufe der Zeit im Thema widergespiegelt würden.


Derzeit speichert FullCalendar allein keine Ereignisse — es rendert sie nur beim Laden der Seite aus dem Feed. Wenn also ein Ereignis aus dem Feed verschwindet (d. h. es wurde extern abgesagt oder gelöscht), verschwindet es einfach lautlos aus der Kalenderansicht.

Aber das ist für die meisten Forum-basierten Arbeitsabläufe nicht gut genug, insbesondere wenn Ereignisbeiträge für Diskussionen, RSVPs oder Ankündigungen verwendet werden.


Hier ist mein Vorschlag dafĂĽr:

Anstatt das Thema zu entfernen, wenn ein Ereignis aus dem Feed verschwindet, könnte Discourse:

  • Das Thema beibehalten
  • Eine Zeile oben hinzufĂĽgen, wie:
    ⚠️ Dieses Ereignis wurde abgesagt oder aus dem Quellkalender entfernt.
  • Das Thema optional sperren oder aus der Liste nehmen, je nach Präferenz des Administrators

Dies würde den Kontext bewahren, Antworten ermöglichen und die Absage sichtbar machen — ohne etwas zu löschen. Technisch gesehen ist dies gut machbar: Wir würden einfach kennzeichnen, dass die UID nicht mehr in der .ics-Datei vorhanden ist, und den Status des entsprechenden Themas aktualisieren.


Ja — während FullCalendar diesen Status selbst nicht verwaltet, könnte Discourse ihn auf der Synchronisierungsebene verwalten. Der Job, der den Feed abruft (z. B. über Sidekiq), würde verfolgen, welche Ereignisse früher existierten und jetzt nicht mehr, und das entsprechende Thema entsprechend markieren.

Wenn genügend Leute daran interessiert sind, könnten wir eine richtige Spezifikation ausarbeiten. Es wäre nicht schwer zu prototypisieren.

1 „Gefällt mir“

Vielen Dank für die durchdachte Antwort @Halden42 – das klärt vieles auf.

Was Sie hier beschrieben haben…

[quote=„Halden42, Beitrag:4, Thema:376245″]
Als ich sagte „Ereignisse mit Themen verknüpfen oder neue erstellen“, stellte ich mir ein Setup ähnlich wie bei Angus’ Plugin vor – bei dem jedes Ereignis im Feed einem Thema auf Discourse entspräche und Aktualisierungen des Feeds im Laufe der Zeit im Thema widergespiegelt würden.
[/quote]

…ist genau der Kernanwendungsfall, den ich seit dem Umstieg von Angus’ Plugin wiederherstellen wollte. Für mich ist der wichtigste Teil nicht nur die visuelle Darstellung von Ereignissen, sondern die Synchronisierung eines Live-externen Kalenders in das Forum, bei dem jedes Ereignis ein Thema hat und Änderungen an diesem Ereignis (z. B. Absage, Verschiebung) im Laufe der Zeit in diesem Thema widergespiegelt werden.

Ich wäre zunächst mit einem Einweg-Synchronisationsmodell zufrieden – schreibgeschützt von .ics nach Discourse – und selbst eine grundlegende Erkennung von Änderungen würde 90 % meiner Anwendungsfälle abdecken. Ein „abgesagter“-Status, der im Ereignisthema angezeigt wird, wenn es aus dem Feed entfernt wird, wäre ebenfalls ideal, anstatt das Thema direkt zu löschen.

Wenn es einen bevorzugten Ort gibt, um hierfür eine Spezifikation vorzuschlagen – vielleicht sobald das FullCalendar-Upgrade stabilisiert ist –, wäre ich sehr daran interessiert, beizutragen oder zu testen.

Nochmals vielen Dank.

1 „Gefällt mir“

Wir pflegen mehrere Office 365-Kalender – jeder mit seinem eigenen .ics-Feed – für verschiedene Arten von Besprechungen: Exekutivkomitee, öffentliche Engagement-Sitzungen, interne Arbeitsgruppen usw. Diese Feeds sind bereits gut strukturiert und werden regelmäßig von Sekretariaten und Administrationsteams gepflegt.

Was wir dringend benötigen, ist eine Möglichkeit, Folgendes zu tun:

  • Abonnieren verschiedener .ics-Feeds pro Kategorie (z. B. ein Feed pro Besprechungstyp)
  • Automatisch ein neues Thema in der entsprechenden Discourse-Kategorie erstellen
  • ĂśberprĂĽfen, ob das Thema in der korrekten Kategorie landet, ähnlich wie Anguss’ Plugin uns erlaubte, nach Tags oder anderen Metadaten zu filtern
  • Ă„nderungen (Zeit, Titel) im Thema widerspiegeln, wenn sich das Kalenderereignis aktualisiert
  • Optional das Thema markieren oder schlieĂźen, wenn das Ereignis abgesagt oder aus dem Feed entfernt wird

Für Räte wie unseren werden Kategorien verwendet, um eine granulare Sichtbarkeit zu verwalten – einige Besprechungen sind privat (z. B. Exekutiv- oder Planungsbesprechungen), andere sind öffentlich. Ein falsch zugeordnetes Thema könnte dazu führen, dass sensible Daten offengelegt werden, daher ist eine Validierung auf Kategorieebene ein Muss.

Wir wĂĽrden uns freuen, wenn so etwas im kommenden FullCalendar-Ăśberholung offiziell unterstĂĽtzt wĂĽrde. Es wĂĽrde den manuellen Aufwand erheblich reduzieren und Discourse als einzige Quelle der Wahrheit fĂĽr die Koordination und Transparenz von Besprechungen weitaus praktikabler machen.

Ich bin Pharmaziestudent in den USA, und unsere Universität stellt alle unsere Rotationspläne, Prüfungen und Praktika über ein Kalenderportal zur Verfügung. Die Feed-URLs enden nicht mit .ics, aber wenn ich sie in Chrome öffne, laden sie sofort eine gültige .ics-Datei herunter. Sie sind also definitiv Standard-iCal-Feeds – nur mit einer anderen URL-Struktur.

Bis vor kurzem habe ich Anguses Plugin verwendet, und es hat diese Feeds perfekt verarbeitet. Jedes Ereignis würde ein Thema generieren, und ich konnte verschiedene Feeds in verschiedene Kategorien leiten (z. B. „Therapeutik“, „Rotationen“, „Prüfungen“), was unserer Studiengruppe half, organisiert zu bleiben.

Aber seit der kürzliche this.router-Fehler das Plugin beschädigt hat, musste ich es deaktivieren – wie Ethsim2 – und jetzt gibt es keine einfache Möglichkeit, unseren Kalender synchron zu halten.

Wenn das offizielle Plugin unterstĂĽtzen wĂĽrde:

  • Eingehende .ics-Feeds (auch wenn die URL nicht mit .ics endet)
  • Themen-Erstellung mit Kategorie-Zielsetzung
  • Feed-spezifische Konfiguration (z. B. ein Feed → eine Kategorie)
  • Update-Erkennung und optionale Ereignis-Abbruchbehandlung

…wäre Discourse ein mächtiges Werkzeug für akademische Zusammenarbeit. Es hat für uns perfekt funktioniert, bevor das Plugin kaputt ging – daher würde ich mich freuen, diese Funktionalität nativ zu sehen.

Gerne teile ich eine Beispiel-Kalender-URL privat, wenn das beim Testen hilft.

Dies gilt auch für Office 365. Ich verstehe, dass viele Universitäten in den USA dieses Ökosystem nutzen.

Ja, ich benutze dieses Ă–kosystem :+1:

2 „Gefällt mir“

nicht aufgefĂĽhrt, da dies ursprĂĽnglich ein Benutzer und seine Sockenpuppen waren. Die Konten wurden jedoch zusammengefĂĽhrt und das Thema ist nun verwirrend, da der Benutzer scheinbar hin und her postet.