# Formulare
Die vier Formulare der Komponente senden ihre Daten direkt an SeminarPlan. Sie entsprechen fachlich den Formularen der SeminarPlan-Referenzwebseite, verwenden aber Joomlas Formularsystem und das Standard-Template.
# Übersicht
| Formular | Menütyp | Landet in SeminarPlan als | Besonderheiten |
|---|---|---|---|
| Seminarbuchung | Seminarbuchung | Bestellung (orders) mit Teilnehmern | Wird von den Terminlisten mit Seminar und Termin aufgerufen; Preisübersicht (netto, MwSt., brutto) aktualisiert sich mit der Teilnehmerzahl |
| Anfrage | Anfrage | Anfrage (inquiries) | Arten: offenes Seminar, Live-Online, Inhouse bei dir vor Ort, Individual-/Firmenschulung |
| Kontakt | Kontakt | Kontaktnachricht (contact-messages) | Themenliste je Menüeintrag |
| Raumvermietung | Raumvermietung | Anfrage (inquiries, Art Raum- oder Notebookvermietung) | Standort- und Raumauswahl aus dem Katalog |
Nach dem Absenden sehen Besucher eine Erfolgsseite mit der Bestell- bzw. Anfragenummer aus SeminarPlan. SeminarPlan verschickt die Bestätigungs-E-Mails (Parameter sendEmails).
# Gemeinsame Felder
Alle Formulare enthalten den Block Kontaktdaten: Kundentyp (Firma, Behörde, Privatperson), Firma, Abteilung, Position, Anrede, Vorname, Nachname, E-Mail, Telefon, Mobil, und je nach Formular die Adresse. Pflichtfelder sind Vorname, Nachname, E-Mail und die jeweilige Einwilligung. Eingaben bleiben bei einem Fehler erhalten.
# Buchung
Zusätzliche Felder: E-Mail für Bestätigung und Rechnung (falls abweichend), Bestellnummer des Kunden, USt-IdNr., Teilnehmer (beliebig viele; Anrede, Titel, Vorname, Nachname, E-Mail, Telefon), Herkunft, Gutscheincode, Anmerkungen, Newsletter, AGB und Widerruf.
Übermittelt werden Seminar-ID, Termin-ID, Standort (bei Live-Online der Online-Standort), Online-Kennzeichen, Preis, Platzanzahl, alle Teilnehmer sowie IP, User-Agent und Einstiegsseite. Ein Termin ist nur buchbar, wenn er in der Zukunft liegt, nicht deaktiviert oder gesperrt ist und das Seminar als offenes Seminar freigegeben ist.
# Anfrage
Die Art der Anfrage steuert die Felder: Bei offenes Seminar und Live-Online wählen Besucher Seminar und optional einen Termin (Termine werden per Ajax nachgeladen), bei Inhouse Firma und Adresse des Schulungsorts, bei Individual-/Firmenschulung Format (vor Ort oder online), Wunschstandort und Dauer. Dazu Wunschtermin, Teilnehmerzahl, Notebooks/Bücher/Mac, Nachricht, Newsletter, Datenschutz. Die Zuordnung zu den SeminarPlan-Anfragearten (openSeminar, online, inhouse, company, companyOnline) und die Zusammensetzung von locationCustom und durationInDays erfolgen automatisch.
# Kontakt
Thema (optional, Liste aus dem Menüeintrag), Kontaktdaten, Nachricht, Newsletter, Datenschutz.
# Raumvermietung
Raum oder Notebooks, Standort und Raum (Räume werden nach Standort gefiltert) bzw. freier Ort, Zeitraum, Plätze, zu installierende Software, Notebooks/Catering, Nachricht, Datenschutz.
# Spamschutz und Sicherheit
Die Formulare speichern nichts in Joomla, sondern reichen die geprüften Daten an SeminarPlan weiter. Was die Erweiterung dabei absichert:
Spamschutz
- CSRF-Token von Joomla in jedem Formular; Absendungen ohne gültiges Token werden verworfen.
- Honeypot: ein unsichtbares Feld; ist es ausgefüllt, wird die Absendung verworfen, der Absender sieht aber eine Erfolgsseite. Der Vorgang landet im Log der Komponente.
- Rate-Limit pro Sitzung (Option Formular-Limit, Standard 5 Absendungen in 10 Minuten).
- Captcha: optional jedes Joomla-Captcha-Plugin (Option Captcha oder global). Für öffentliche Seiten empfohlen, weil das Rate-Limit an die Sitzung gebunden ist und Bots ohne Cookies nicht bremst.
Eingaben
- Jedes Feld hat einen Joomla-Filter (
string,integer,cmd,email); HTML in Texteingaben wird entfernt. Auswahlfelder (Anrede, Art, Quelle) werden gegen die erlaubten Optionen geprüft. - Verschachtelte Werte wie
jform[email][$gt]=werden vor der Validierung verworfen. In den Nutzdaten an SeminarPlan landen nur Skalare, keine Objekte, also auch keine NoSQL-Operatoren. - IDs (Seminar, Termin, Standort, Raum) müssen eine gültige SeminarPlan-ID sein (24 Hex-Zeichen), sonst werden sie nicht übernommen. Termine werden zusätzlich gegen den Katalog geprüft (buchbar, sichtbar, Preis aus dem Katalog statt aus dem Formular).
- Datumsangaben werden auf
JJJJ-MM-TTnormalisiert, Zahlen auf positive Ganzzahlen. - Die Nutzdaten enthalten nur die Felder, die SeminarPlan erwartet (feste Zuordnung je Formular); unbekannte Felder werden nicht weitergereicht. SeminarPlan validiert die Daten serverseitig erneut.
Ausgaben
- Benutzereingaben werden beim erneuten Anzeigen (nach Validierungsfehlern) immer maskiert; Meldungen von SeminarPlan werden ohne HTML und gekürzt angezeigt.
- Technische Fehler (API nicht erreichbar, Transportfehler) zeigen dem Besucher nur eine allgemeine Meldung; Details stehen im Log (
administrator/logs/com_seminarplan.php). - Rich-Text aus SeminarPlan (Beschreibungen, FAQ, Wissensseiten) wird beim Abgleich bereinigt (Option Rich-Text bereinigen, siehe Einstellungen): script-Tags, Event-Attribute und
javascript:-Links fallen weg, Tabellen, Bilder und eingebettete Videos bleiben. Kategorie-Farben werden nur als Hex-Wert übernommen, Links aus dem CRM (Rechtstexte, Hotel-Webseiten) nur mithttp(s)-,mailto- odertel-Schema.
Endpunkte
- Der Push-Endpunkt verlangt den Sync Token (zeitkonstanter Vergleich) und eine JSON-Nachricht mit
item; alles andere wird mit 401/400 beantwortet. - Der API-Schlüssel bleibt serverseitig; Browser und Formulare sehen ihn nie.
- Katalog-IDs aus URLs werden vor jedem Cache- und API-Zugriff geprüft, Cache-Schlüssel sind auf
a-z0-9_-/beschränkt (kein Path Traversal). - Die IP-Adresse für SeminarPlan wird über Joomlas IP-Helfer ermittelt und berücksichtigt die globale Option Hinter Load-Balancer.
Die Tests dazu liegen in tests/e2e/security.spec.ts (CSRF, Operator-Objekte, reflektiertes XSS, fehlerhafte IDs, Push-Token) und tests/Unit/Forms/MapperTest.php.
# Rechtliche Links und Kontaktdaten
Die Einwilligungstexte verlinken AGB, Datenschutzerklärung und Widerrufsbelehrung. Die URLs kommen aus den Komponentenoptionen, sonst aus den SeminarPlan-Systemeinstellungen (Texte und Recht → Rechtstexte). Telefonnummer und E-Mail in den Kontaktboxen ebenso.
# Anpassen
Die Formularbausteine (Feldgruppen, Kontaktdaten, Einwilligungen) sind JLayouts unter layouts/seminarplan/form/ und lassen sich per Template-Override anpassen; die Seiten selbst liegen unter tmpl/booking, tmpl/inquiry, tmpl/contact, tmpl/rental (jeweils default.php und success.php). Die Felddefinitionen selbst (forms/*.xml) sind Teil der Komponente; zusätzliche Felder erfordern eine Anpassung des Mappings an die API. Siehe Template-Anpassungen.