jetro-tools / contao-bundle
Jetro: Termine aus Jetro in Contao-Kalender übernehmen
Package info
github.com/inriconsulting/jetro-contao
Type:contao-bundle
pkg:composer/jetro-tools/contao-bundle
Requires
- php: ^8.2
- ext-fileinfo: *
- contao/calendar-bundle: ^5.3
- contao/core-bundle: ^5.3
- doctrine/dbal: ^3.6 || ^4.0
- symfony/config: ^6.4 || ^7.0
- symfony/dependency-injection: ^6.4 || ^7.0
- symfony/http-foundation: ^6.4 || ^7.0
- symfony/http-kernel: ^6.4 || ^7.0
- symfony/routing: ^6.4 || ^7.0
- symfony/security-bundle: ^6.4 || ^7.0
Requires (Dev)
- contao/manager-plugin: ^2.13
- phpunit/phpunit: ^10.5 || ^11.5
Suggests
None
Provides
None
Conflicts
- contao/manager-plugin: <2.0 || >=3.0
Replaces
None
README
Übernimmt Termine aus Jetro in Contao-Kalender. Jetro schreibt öffentliche Termine server-zu-server in die Website: anlegen, ändern, absagen, künftige löschen, mit Ort, Bild, Livestream- und Anmeldelink. Die Redaktion in Contao behält alles, was Jetro nicht liefert (Veröffentlichung, Hervorheben, Buchungen, weitere Inhaltselemente).
- Contao ab 5.3, PHP ab 8.2
- nur Kern-Felder von
tl_calendar_events, keine weiteren Erweiterungen nötig - Lizenz MIT
Installation
- Im Contao Manager nach „Jetro“ suchen und das Paket installieren, danach die Datenbank aktualisieren.
- Im Backend unter Inhalte → Jetro eine Verbindung anlegen und einen Standard-Kalender wählen.
- In der Liste auf Token erzeugen klicken und das Token kopieren. Contao zeigt es nur einmal an.
- In Jetro unter Einstellungen → Website die Betriebsart „Jetro schreibt in Contao“ wählen, die Adresse der Website und das Token eintragen und die Verbindung testen.
- Nach dem ersten Abgleich prüfen, ob die Terminliste der Website den Standard-Kalender zeigt.
Optional: Unter Kalender-Zuordnungen einzelne Jetro-Kalender (Schlüssel) eigenen Contao-Kalendern zuweisen. Umhängen verschiebt die Termine beim nächsten Abgleich.
Token verloren? An derselben Verbindung ein neues erzeugen und in Jetro eintragen. Eine neue Verbindung würde die bisherigen Termine als fremd behandeln.
Das Modul Jetro nur Administratoren oder vertrauten Redakteuren freigeben: Wer eine Verbindung bearbeiten darf, bestimmt, in welche Kalender Jetro schreibt. Zur Auswahl stehen nur Kalender, die der Benutzer ohnehin bearbeiten darf.
Die Seite Protokoll zeigt die letzten 50 Anfragen von Jetro (Zeit, Pfad, Status, Fehlercode), ohne Inhalte und Token.
Was das Paket tut
| Schnittstelle | <Website>/api/jetro/v1, nur für Jetro, ohne Session und Cookie |
| Anmeldung | Token je Verbindung, gespeichert nur als SHA-256 |
| Eigentum | Jetro ändert nur Termine, die es selbst angelegt hat |
| Absage | Termin bleibt sichtbar und zeigt „Abgesagt“ in Liste und Leseansicht |
| Löschen | nur künftige Termine; mit Buchungen nur unveröffentlicht; vergangene bleiben als Archiv |
| Bilder | PNG, JPEG, WebP bis 2 MB unter files/jetro/ |
| Texte | werden wie Backend-Eingaben kodiert, Links nur http/https |
Hoster, die den Kopf Authorization streichen, sind kein Problem: Jetro sendet das Token zusätzlich in X-Jetro-Token.
Entwicklung
docker build -t jetro-contao-test -f docker/test.Dockerfile docker docker run --rm -v "$PWD":/app jetro-contao-test sh -c 'composer install && vendor/bin/phpunit'
Integrationstest gegen ein echtes Contao mit MySQL (installiert das Paket, startet einen Webserver und prüft den
Vertrag über HTTP): CONTAO='5.7.*' DATABASE_URL=mysql://… tests/Integration/run.sh. Die CI führt ihn für
Contao 5.3 und 5.7 aus. Die Vertrags-Fixtures unter tests/Fixtures/jetro/ stammen unverändert aus Jetro.
Der Vertrag zwischen Jetro und diesem Paket steht in der Jetro-Spezifikation website-contao.md
(Abschnitt „Vertrag Jetro → Paket (api 1)“). Abweichungen nur über eine Änderung dort.
Termin-Vorlagen (optional)
Das Paket bringt vier Darstellungen für das Modul Terminliste aus dem Contao-Kern mit. Alle zeigen das Bild aus Jetro und ohne Bild ein Kalenderblatt mit Tag und Monat, auch bei Serienterminen. Sie lassen sich mit der Tastatur bedienen und verzichten bei „Bewegung reduzieren“ auf Animationen. Fremde Skript-Bibliotheken sind nicht nötig.
| Darstellung | Event-Template | Individuelles Template | Empfohlene Bildgröße |
|---|---|---|---|
| Slider mit Karten | event_jetro_card |
mod_eventlist_jetro_cards |
440 × 250, zuschneiden |
| Große Bildkarten | event_jetro_card_large |
mod_eventlist_jetro_cards |
680 × 383, zuschneiden |
| Kompakte Karten (ohne Bild) | event_jetro_card_compact |
mod_eventlist_jetro_cards |
– |
| Liste mit Vorschaubild | event_jetro_list |
mod_eventlist_jetro_list |
176 × 176, zuschneiden |
Die Bilder zeigen die Testinstallation „Musterkirche“ mit erfundenen Terminen; die Grafiken darin sind für dieses
Projekt erzeugt und stehen wie die Screenshots unter der MIT-Lizenz des Pakets. Ansichten fürs Handy liegen daneben
(*-mobil.png).
Einrichtung:
- Frontend-Modul „Terminliste“ anlegen, Kalender wählen, Format z. B. „Nächste 365 Tage“, Sortierung aufsteigend.
- Gesamtzahl der Termine z. B. 6; Anzahl der Wiederholungen größer 0, sonst zeigt Contao jede Serie nur einmal.
- Im Abschnitt Darstellung eine der Jetro-Darstellungen wählen. Das Paket stellt Event-Template und individuelles Template passend ein und trägt die empfohlene Bildgröße ein, wenn noch keine gesetzt ist. Mehrtägige Termine erscheinen dann nur einmal (Contao-Option „Termine nur einmal anzeigen“). „Contao-Standard“ setzt die Vorlagen zurück. Von Hand geht es weiter unter „Template-Einstellungen“.
Farben passen sich über CSS-Variablen an das eigene Design an, z. B.:
.jetro-cards, .jetro-list { --jetro-accent: #69bf44; --jetro-sheet: linear-gradient(120deg, #36b3a5, #69bf44 60%, #a3cc00); }
Weitere Variablen: --jetro-sheet-text, --jetro-card-bg, --jetro-text, --jetro-muted, --jetro-card-width,
--jetro-card-width-large, --jetro-card-width-compact. Abgesagte Termine tragen die Klasse jetro-cancelled
und erscheinen ausgegraut mit „Abgesagt:“ vor dem Titel.
Manche Themes bringen für die Leseansicht eine eigene Vorlage mit, die Titel und Bild nur in einem zusätzlichen
Kopfbereich zeigt. Erscheinen Termine mit Bild dort ohne Überschrift, das Lesemodul auf die Kern-Vorlage
event_full stellen.
Unter jeder Terminliste mit Jetro-Terminen steht klein „Termine aus Jetro“ (Link mit rel="nofollow").
Abschalten lässt sich die Zeile je Verbindung unter Anzeige.