Diakronos ist eine Frappe-App für Gemeinden und kirchliche Einrichtungen – mit Kalender, Mitgliederpflege und Liederverwaltung als eigenständige, modular einsetzbare Werkzeuge.
| Modul | Status | Beschreibung |
|---|---|---|
| Kronos | ✅ Stabil | Webbasierter Kalender mit CalDAV-Unterstützung und Google Calendar Import |
| Diakonos | 🔧 In Entwicklung | Mitgliederverwaltung für Gemeinden |
| Psalmos | 🔜 Geplant | Liedverwaltung und Gottesdienst-Planung |
Kronos ist ein vollständiger Kalender, der direkt im Browser läuft – ohne Installation, ohne App-Store. Er fühlt sich an wie Google Calendar, ist aber Teil eurer eigenen Frappe-Instanz und speichert alle Daten bei euch.
- Monats-, Wochen- und Tagesansicht – per Dropdown wechselbar, auf Mobilgeräten per Wischen
- Heute-Button bringt sofort zum aktuellen Tag zurück
- Kalenderwochen werden automatisch angezeigt
- Mini-Kalender in der Seitenleiste zur schnellen Navigation
- Neuen Termin erstellen: per FAB-Button oder einfach auf einen freien Tag klicken
- Wiederkehrende Termine (täglich, wöchentlich, monatlich, jährlich) – einzeln oder als ganze Serie bearbeiten
- Drag & Drop zum Verschieben, Ziehen am Ende zum Verlängern
- Farbige Kennzeichnung pro Kalender
- Jeder Nutzer sieht nur die Kalender, auf die er Zugriff hat
- Kalender lassen sich in der Seitenleiste ein- und ausblenden
- Jeder Kalender hat eine eigene Farbe
- CalDAV-Server eingebaut: funktioniert mit Apple Kalender, Thunderbird, DAVx⁵ und jedem CalDAV-Client
- URL:
https://<domain>/api/method/diakronos.kronos.api.caldav.serve_caldav
- URL:
- Google Calendar Import per OAuth2 (inkl. Duplikatschutz)
- Im Ansichtsmodus ist nichts versehentlich veränderbar – ideal für Bildschirme im Foyer oder Gemeinderaum
- Im Bearbeitungsmodus sind Drag & Drop, Klick-Erstellen und alle Bearbeitungsfunktionen aktiv
- Umschaltbar direkt im Header per Toggle
| Rolle | Rechte |
|---|---|
Kalenderadministrator |
Alle Kalender lesen & schreiben, Kalender verwalten |
Mitglied |
Zugriff auf Kronos- und Diakonos-Workspace |
| Kalender-spezifisch | Lese- oder Schreibrecht pro Kalender frei konfigurierbar |
bench get-app https://github.com/<org>/diakronos
bench --site <site> install-app diakronos
bench --site <site> migratediakronos/
kronos/api/ – calendar_get, event_crud, series_update, permissions, caldav, google_import
diakonos/doctype/ – Mitglied, Besucher, Dienstbereich, Kinder
diakronos/doctype/ – Diakronos Einstellungen, Modulkonfig, Rollen
workspace_sidebar/ – JSON-Fixtures für alle Workspace Sidebars
desktop_icon/ – JSON-Fixtures für Desk-Icons
www/kronos/ – SPA-Template (Jinja + EventCalendar)
public/js/
builder/ – kronos_calendar.js, mini_calendar, header, sidebar, init
backend/ – data.js (State), events_api.js (CRUD via fetch)
modal/ – core, create, edit, view, day_events, series_handler
lib/ – eventcalendar/ (vkurko/calendar), moment/
html_utils.js – escHtml(), safeCssColor()
- EventCalendar (vkurko/calendar, MIT) – Kalender-Rendering
- Moment.js – Datums-Formatierung im Mini-Kalender
- Flatpickr – Datums- und Zeitauswahl in Modals
Kalender-Engine: FullCalendar → EventCalendar
- Vollständige Migration von FullCalendar v6 auf EventCalendar (vkurko/calendar, MIT-Lizenz)
- Kalender-Rendering über
window.EventCalendar.create()statt FullCalendar-Bundle - Event-Quellen umgestellt auf
eventSources: [{events: fn}]-Format - Navigation über
setOption('view', ...)/setOption('date', ...)statt alter FullCalendar-API datesSet-Callback wird als DOM Custom Eventec:datesSetgebroadcastet – Mini-Kalender und Header reagieren darauf- FullCalendar-Bundle vollständig entfernt (
public/js/lib/fullcalendar/und@fullcalendar-Abhängigkeit)
Layout & Darstellung
- Kalender füllt jetzt die gesamte verfügbare Höhe korrekt aus
- Monatsansicht: Zeilen füllen die volle Höhe gleichmäßig
- Schriftart des Kalenders einheitlich mit der restlichen App
Mobile – Echte Geräte statt Viewport-Breite
- Mobile-Layout greift jetzt nur noch auf echten Touch-Geräten (
pointer: coarse), nicht mehr beim Verkleinern des Desktop-Browsers - Avatar (Profilbild) wird auf Desktop-Geräten (Maus/Trackpad) ausgeblendet
- Navigationspfeile bleiben auf Desktop immer sichtbar
Bugfixes
- Klick auf einen leeren Tag im Bearbeitungsmodus öffnet jetzt korrekt das „Neuer Termin"-Modal
App-Struktur
- Migration auf Frappe v16: vollständig kompatible Workspace- und Desktop-Icon-Struktur
- Vier Module im Frappe Desk integriert: Kronos, Diakonos, Diakronos (Einstellungen), Psalmos (versteckt – in Entwicklung)
- Jedes Modul hat ein eigenes Logo in
public/icons/desktop_icons/ - Workspace Sidebars und Desktop Icons als JSON-Fixtures – werden automatisch bei
bench migrateeingespielt
Kronos Kalender – Avatar & Header
- Benutzerbild und Vollname werden serverseitig übergeben (
calendar.py→body data-*) – kein separater API-Aufruf - Avatar zeigt Benutzerbild wenn vorhanden, sonst Initiale auf Primärfarbe
can_access_desk-Check auf einen einzigen API-Call reduziert
Demo-Daten
create_demo_data()unddelete_demo_data()vollständig getestet und stabil- 8 Kategorien, 4 Kalender, 10 Mitglieder, 5 Besucher, 76 Termine – vollständig reversibel
Sicherheit
permissions.py:can_access_desk()nutztfrappe.get_roles()statt direktem DB-Zugriff
Zugriffssteuerung
- Desk-Link im Avatar-Dropdown nur für
AdministratorundKalenderadministratorsichtbar - Serverseitige Prüfung auf allen Seiten
API-Sicherheit
get_events(): gibt nur Events aus zugriffsberechtigten Kalendern zurück (IDOR-Lücke geschlossen)get_event_details(),delete_series_batch_fast(),update_series_batch_fast(): Berechtigungsprüfung vor Ausführung- Alle internen API-Endpunkte auf
@frappe.whitelist(allow_guest=False)umgestellt parse_iso_datetime_raw(): Strict-Validierung mitstrptime()
Frontend-Sicherheit
html_utils.jsmitescHtml()undsafeCssColor()– XSS- und CSS-Injection-Schutz in allen Modals
| Version | Schwerpunkt |
|---|---|
| v16.1 | Diakonos: Mitgliederliste, Berichte, Dienstbereiche fertigstellen |
| v16.2 | Psalmos: Liederdatenbank durch Integration von Paperless (Docker) |
| v16.3 | Psalmos: Liedverwaltung und Gottesdienst-Planung (Grundstruktur) |
| v17 | Ablaufplan für Moderatoren im Gottesdienst |