Turn-Anfrageformular: Feld „Geburtsdatum des Kindes" wieder da

Auf der alten Seite gab es das Feld, beim Neubau ist es untergegangen. Gegen
2024.tsv08kulmbach.de geprüft: dort hieß es input_alter_kind, war type="date",
OPTIONAL und trug das Label „Geburtsdatum des Kindes" — genau so wieder
eingebaut. Die Abteilung braucht es, weil die Gruppen nach Alter eingeteilt sind.

Nur in der Turn-Variante. In der allgemeinen wäre es sinnlos und würde ohne Not
personenbezogene Daten Minderjähriger erheben. Dafür drei Stellen:
- contact_variant(): Schalter ask_birthdate (true nur für turnen)
- contact-form.php: Feld definiert, bedingt gerendert, direkt nach der
  Gruppenauswahl wie auf der alten Seite
- contact-submit.php: Validierung UND Rücksetzen auf leer, wenn die Variante das
  Feld nicht anbietet — sonst könnte ein manipulierter POST es an der allgemeinen
  Variante vorbei einschmuggeln

Validierung serverseitig, nicht nur per type=date: echtes Datum, nicht in der
Zukunft, nicht vor 1900. createFromFormat mit Rückvergleich, weil PHP sonst
Scheindaten wie 2019-02-31 stillschweigend auf den 3. März verschiebt.
Geprüft mit ausreichend altem Token (die Time-Trap verlangt 3 s, meine ersten
Versuche liefen deshalb als Bot durch): 2019-02-31 abgewiesen, 2030-01-01
abgewiesen, gültiges Datum passiert. Ohne JS bleibt der Wert bei HTTP 422
erhalten (value="2019-03-12" im Re-Render nachgewiesen).

Kein neues Markup: form-field kann type=date und min/max längst, die Prop für
den Hilfetext heißt hint (nicht help, das war mein erster Fehlgriff). Docblock
der Komponente um date und min/max ergänzt.

Datenschutzerklärung mitgezogen, wie die Projektregel es für neue Formularfelder
verlangt — mit Zweckbindung (Zuordnung zur Altersgruppe) und dem ausdrücklichen
Hinweis, dass es keine Pflichtangabe ist.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
This commit is contained in:
2026-07-31 21:10:47 +02:00
parent 75c06dbd04
commit c4ffe4a1f4
6 changed files with 54 additions and 5 deletions

View File

@@ -1370,6 +1370,7 @@ function contact_variant(string $department): array
'interests' => ['Herrenfußball', 'Frauenfußball', 'Jugendfußball', 'Turnen', 'Ehrenamtlich mithelfen', 'Sonstiges'],
'interest_required' => false,
'ask_subject' => true,
'ask_birthdate' => false,
'message_required' => true,
'to' => '',
'context' => 'Kontaktanfrage',
@@ -1395,6 +1396,13 @@ function contact_variant(string $department): array
// Kern der Anfrage, und sie ersetzt hier das Betreff-Feld.
'interest_required' => true,
'ask_subject' => false,
// Geburtsdatum nur hier: die Turnabteilung braucht bei Anfragen für Kinder
// die Altersgruppe, um die passende Gruppe zuzuordnen (Mäuse, Tiger,
// Hühner …). Gab es auf der alten Seite als optionales Feld
// „Geburtsdatum des Kindes" und ist beim Neubau untergegangen.
// In der allgemeinen Variante wäre es sinnlos und würde unnötig
// personenbezogene Daten von Minderjährigen erheben.
'ask_birthdate' => true,
// Bewusst optional (wie auf der alten Seite): „Interessiere mich für
// Trampolin, ruft mich an" ist eine vollständige Anfrage. Name, Mail und
// Disziplin stehen ja schon da.