# 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-TT normalisiert, 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 mit http(s)-, mailto- oder tel-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.

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.

Last Updated: 9/16/2026, 9:50:50 AM