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
347 lines
22 KiB
PHP
347 lines
22 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
/**
|
||
* Datenschutzerklärung — zugeschnitten auf den tatsächlichen Stack:
|
||
* komplett self-hosted, keine Tracker/Analyse/Werbe-Dienste, keine externen
|
||
* Fonts/Maps/Embeds. Einzige Verarbeitungen: Server-Logs (Hoster), die vier
|
||
* Formulare (Kontakt, Turnabteilung, Mitgliedsantrag, Sportheimbuchung; Versand
|
||
* über den All-Inkl-Mailserver, also derselbe Auftragsverarbeiter wie beim
|
||
* Hosting), server-seitig gecachter Instagram-Feed (Bilder von unserer Domain).
|
||
* Vereinsdaten aus club.json.
|
||
*
|
||
* Alle Empfänger liegen auf unserer eigenen Domain bei All-Inkl (info@,
|
||
* turnen@) — deshalb stimmt die Aussage weiter unten, dass kein zusätzlicher
|
||
* E-Mail-Dienstleister im Spiel ist. Zeigt ein Postfach künftig auf einen
|
||
* fremden Anbieter, muss dieser Satz mit.
|
||
*/
|
||
$club = json_load('club');
|
||
$addr = $club['address'] ?? [];
|
||
$dpo = $club['data_protection_contact'] ?? '';
|
||
|
||
$meta = [
|
||
'title' => 'Datenschutzerklärung',
|
||
'description' => 'Datenschutzerklärung des TSV 1908 Kulmbach e. V. – welche Daten beim Besuch der Website verarbeitet werden. Self-hosted, ohne Tracking und Drittanbieter.',
|
||
'schema' => page_schema([
|
||
['name' => 'Startseite', 'slug' => ''],
|
||
['name' => 'Datenschutz', 'slug' => 'datenschutz'],
|
||
]),
|
||
];
|
||
?>
|
||
<section class="section legal">
|
||
<div class="container">
|
||
<div class="legal__head">
|
||
<p class="legal__kicker">Rechtliches</p>
|
||
<h1>Datenschutzerklärung</h1>
|
||
<p class="legal__lead">
|
||
Der Schutz deiner persönlichen Daten ist uns wichtig. Diese Website ist
|
||
bewusst datensparsam gebaut: Sie lädt keine externen Schriften, Karten,
|
||
Skripte oder Tracking-Dienste – dein Browser kontaktiert ausschließlich
|
||
unseren eigenen Server.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="legal__body prose">
|
||
<section>
|
||
<h2>Verantwortlicher</h2>
|
||
<p>Verantwortlich für die Datenverarbeitung auf dieser Website ist:</p>
|
||
<div class="legal__card">
|
||
<address>
|
||
<strong><?= e($club['legal_name']) ?></strong><br>
|
||
<?= e($addr['street']) ?><br>
|
||
<?= e($addr['zip']) ?> <?= e($addr['city']) ?><br>
|
||
<br>
|
||
E-Mail: <a href="mailto:<?= e($club['email']) ?>"><?= e($club['email']) ?></a>
|
||
</address>
|
||
</div>
|
||
<?php if ($dpo !== ''): ?>
|
||
<p class="legal__muted">
|
||
Ansprechpartner für Fragen zum Datenschutz: <?= e($dpo) ?>,
|
||
erreichbar unter <a href="mailto:<?= e($club['email']) ?>"><?= e($club['email']) ?></a>.
|
||
</p>
|
||
<?php endif; ?>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Grundsätzliches</h2>
|
||
<p>
|
||
Wir verarbeiten personenbezogene Daten nur im Rahmen der geltenden
|
||
Datenschutzgesetze, insbesondere der Datenschutz-Grundverordnung (DSGVO)
|
||
und des Bundesdatenschutzgesetzes (BDSG). „Personenbezogene Daten“ sind
|
||
alle Informationen, die sich auf eine identifizierte oder identifizierbare
|
||
Person beziehen. Eine Nutzung unserer Website ist grundsätzlich ohne Angabe
|
||
personenbezogener Daten möglich.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Aufruf der Website & Server-Logfiles</h2>
|
||
<p>
|
||
Unsere Website wird bei folgendem Dienstleister gehostet:
|
||
</p>
|
||
<div class="legal__card">
|
||
<address>
|
||
<strong>ALL-INKL.COM – Neue Medien Münnich</strong><br>
|
||
Inhaber: René Münnich<br>
|
||
Hauptstraße 68<br>
|
||
02742 Friedersdorf
|
||
</address>
|
||
</div>
|
||
<p>
|
||
Bei jedem Aufruf unserer Website werden durch unseren Webhoster automatisch
|
||
Informationen erfasst, die dein Browser übermittelt und die technisch
|
||
erforderlich sind, um die Seite auszuliefern. Erfasst werden:
|
||
</p>
|
||
<ul>
|
||
<li>die aufgerufene Adresse (URL) und die zuvor besuchte Seite (Referrer)</li>
|
||
<li>Datum und Uhrzeit des Zugriffs</li>
|
||
<li>verwendeter Browser und Betriebssystem</li>
|
||
<li>die IP-Adresse des anfragenden Geräts</li>
|
||
</ul>
|
||
<p>
|
||
Diese Daten dienen ausschließlich dem technischen Betrieb, der Sicherheit
|
||
und der Stabilität der Website und werden nicht mit anderen Datenquellen
|
||
zusammengeführt. Rechtsgrundlage ist unser berechtigtes Interesse an einer
|
||
sicheren und funktionsfähigen Website (Art. 6 Abs. 1 lit. f DSGVO). Die
|
||
Logdaten werden nach kurzer Zeit automatisch gelöscht.
|
||
</p>
|
||
<p class="legal__muted">
|
||
Unser Webhoster verarbeitet diese Daten in unserem Auftrag auf Grundlage
|
||
eines Vertrags zur Auftragsverarbeitung (Art. 28 DSGVO).
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Verschlüsselung (SSL/TLS)</h2>
|
||
<p>
|
||
Diese Website nutzt aus Sicherheitsgründen eine SSL- bzw. TLS-Verschlüsselung.
|
||
Eine verschlüsselte Verbindung erkennst du am „https://“ in der Adresszeile
|
||
deines Browsers. Daten, die du an uns übermittelst, können dadurch nicht ohne
|
||
Weiteres von Dritten mitgelesen werden.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Cookies</h2>
|
||
<p>
|
||
Diese Website setzt <strong>keine Cookies zu Analyse-, Marketing- oder
|
||
Tracking-Zwecken</strong> und bindet keine Dienste ein, die solche Cookies
|
||
setzen würden. Aus diesem Grund benötigen wir auch kein Cookie-Banner.
|
||
</p>
|
||
<p>
|
||
Eine Ausnahme betrifft nur den passwortgeschützten internen Bereich
|
||
(siehe „Interne Dateiablage“): Wer sich dort anmeldet, erhält ein
|
||
technisch notwendiges Sitzungs-Cookie, das die Anmeldung für die Dauer
|
||
der Sitzung merkt. Ohne dieses Cookie ist eine Anmeldung nicht möglich.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Formulare & Kontaktaufnahme</h2>
|
||
<p>
|
||
Wenn du uns über eines unserer Formulare oder per E-Mail kontaktierst,
|
||
verarbeiten wir die von dir angegebenen Daten, um deine Anfrage zu bearbeiten.
|
||
Über das <strong>Kontaktformular</strong> sind das:
|
||
</p>
|
||
<ul>
|
||
<li>Name (Pflichtangabe)</li>
|
||
<li>E-Mail-Adresse (Pflichtangabe)</li>
|
||
<li>Telefonnummer (freiwillig)</li>
|
||
<li>dein Interessensgebiet, Betreff und deine Nachricht</li>
|
||
</ul>
|
||
<p>
|
||
Über den <strong>Mitgliedsantrag</strong> verarbeiten wir zusätzlich Vorname,
|
||
Nachname, Geburtsdatum, Anschrift und die gewählte Beitragsklasse. Diese Angaben
|
||
brauchen wir, um die Mitgliedschaft vorzubereiten; die Beitrittserklärung senden
|
||
wir dir anschließend per Post zu. Bankdaten erheben wir online bewusst nicht.
|
||
Rechtsgrundlage ist hier Art. 6 Abs. 1 lit. b DSGVO (Anbahnung und Durchführung
|
||
der Mitgliedschaft). An die von dir angegebene Adresse senden wir außerdem eine
|
||
Eingangsbestätigung.
|
||
</p>
|
||
<p>
|
||
Über das Formular <strong>Sportheimbuchung</strong> verarbeiten wir Name,
|
||
E-Mail-Adresse, optional die Telefonnummer sowie Art, Datum und Personenzahl
|
||
deiner Veranstaltung, um dir ein Angebot machen zu können.
|
||
</p>
|
||
<p>
|
||
Das <strong>Anfrageformular der Turnabteilung</strong> auf
|
||
<a href="<?= e(url('turnen')) ?>">/turnen</a> erhebt dieselben Angaben wie das
|
||
Kontaktformular, statt eines Betreffs jedoch die Turngruppe, für die du dich
|
||
interessierst; eine Nachricht ist dort freiwillig. Zusätzlich kannst du
|
||
<strong>freiwillig das Geburtsdatum des Kindes</strong> angeben, um das es bei der
|
||
Anfrage geht. Wir brauchen es nur, um die passende Turngruppe zuzuordnen, weil die
|
||
Gruppen nach Alter eingeteilt sind. Das Feld ist keine Pflichtangabe: ohne Datum
|
||
bearbeiten wir die Anfrage genauso und fragen gegebenenfalls nach dem Alter nach.
|
||
Diese Anfragen gehen an das
|
||
Postfach der Turnabteilung
|
||
(<a href="mailto:<?= e($club['email_turnen']) ?>"><?= e($club['email_turnen']) ?></a>),
|
||
weil die Abteilung sie selbst beantwortet.
|
||
</p>
|
||
<p>
|
||
Rechtsgrundlage ist deine Einwilligung (Art. 6 Abs. 1 lit. a DSGVO), die du
|
||
mit dem Absenden erteilst, sowie unser berechtigtes Interesse bzw. die
|
||
Anbahnung eines (Mitgliedschafts-)Verhältnisses an der Beantwortung deiner
|
||
Anfrage (Art. 6 Abs. 1 lit. f und b DSGVO). Die Daten werden gespeichert, bis
|
||
deine Anfrage abschließend bearbeitet ist und keine gesetzlichen
|
||
Aufbewahrungspflichten entgegenstehen.
|
||
</p>
|
||
<p>
|
||
Schickst du uns Material für unsere <strong>Vereinshistorie</strong> – Fotos,
|
||
Zeitungsausschnitte, Dokumente oder Erinnerungen – an
|
||
<a href="mailto:<?= e($club['email_historie']) ?>"><?= e($club['email_historie']) ?></a>,
|
||
bewahren wir es gemeinsam mit deinem Namen als Quellenangabe in unserem
|
||
Vereinsarchiv auf. Grundlage dafür ist unser berechtigtes Interesse an der
|
||
Dokumentation der Vereinsgeschichte (Art. 6 Abs. 1 lit. f DSGVO).
|
||
Veröffentlichen – auf dieser Website, in einer Chronik oder Festschrift –
|
||
tun wir nur, was du uns ausdrücklich freigegeben hast (Art. 6 Abs. 1 lit. a
|
||
DSGVO); diese Freigabe kannst du jederzeit widerrufen. Sind auf Bildern
|
||
weitere Personen erkennbar, sag uns bitte, was du darüber weißt.
|
||
</p>
|
||
<p>
|
||
Der technische Versand der Formular-Nachrichten als E-Mail läuft über den
|
||
Mailserver unseres Webhosters ALL-INKL.COM (siehe oben) — die Daten bleiben
|
||
damit innerhalb der dort genannten Auftragsverarbeitung. Die Übertragung zum
|
||
Mailserver ist verschlüsselt (STARTTLS). Einen zusätzlichen
|
||
E-Mail-Dienstleister setzen wir nicht ein.
|
||
</p>
|
||
<p class="legal__muted">
|
||
Hinweis: Zum Schutz vor automatisiertem Spam verwenden wir ein verstecktes
|
||
Pflichtfeld und einen signierten Zeitstempel. Außerdem begrenzen wir, wie oft
|
||
von einem Anschluss abgesendet werden kann. Dafür speichern wir deine
|
||
IP-Adresse nicht im Klartext, sondern nur als Hashwert, der mit einem
|
||
geheimen Schlüssel gebildet wird; die Zähler werden spätestens nach 24 Stunden
|
||
gelöscht. Externe Dienste (z. B. reCAPTCHA) binden wir nicht ein.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Interne Dateiablage</h2>
|
||
<p>
|
||
Unter <code>/dateien</code> betreiben wir einen
|
||
<strong>passwortgeschützten Bereich</strong>, in dem Mitglieder Fotos und
|
||
Videos von Vereinsveranstaltungen für die Website abliefern können. Er ist
|
||
nicht öffentlich, nicht verlinkt und von Suchmaschinen ausgenommen; die
|
||
Zugangsdaten geben wir nur intern weiter.
|
||
</p>
|
||
<p>
|
||
Verarbeitet werden dort ausschließlich die hochgeladenen Dateien selbst
|
||
(einschließlich der darin enthaltenen Aufnahmen von Personen und der
|
||
technischen Bilddaten wie Aufnahmezeit oder Kameramodell) sowie der
|
||
gewählte Benutzername mit dem Zeitpunkt der Anmeldung. Fehlgeschlagene
|
||
Anmeldeversuche halten wir zum Schutz gegen automatisierte Angriffe kurz
|
||
fest, dabei die IP-Adresse nur als nicht zurückrechenbare Prüfsumme.
|
||
</p>
|
||
<p>
|
||
Die Dateien liegen ausschließlich auf unserem eigenen Webspace, außerhalb
|
||
des öffentlich erreichbaren Bereichs, und werden nicht an Dritte
|
||
weitergegeben. Rechtsgrundlage ist Art. 6 Abs. 1 lit. f DSGVO
|
||
(berechtigtes Interesse an der Vereinskommunikation); für die
|
||
Veröffentlichung von Personenaufnahmen auf der Website gilt zusätzlich der
|
||
Abschnitt „Foto- und Videoaufnahmen“. Wer nicht möchte, dass eine Aufnahme
|
||
von ihm dort abgelegt oder veröffentlicht wird, kann sich jederzeit an die
|
||
oben genannten Kontaktdaten wenden – wir löschen sie dann.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Keine Analyse-, Tracking- oder Werbedienste</h2>
|
||
<p>
|
||
Wir verzichten bewusst vollständig auf Dienste, die dein Verhalten
|
||
auswerten oder Daten an Dritte weitergeben. Insbesondere setzen wir
|
||
<strong>nicht</strong> ein:
|
||
</p>
|
||
<ul>
|
||
<li>keine Webanalyse (z. B. Google Analytics, Matomo, Hotjar)</li>
|
||
<li>keine externen Schriftarten – alle Fonts liegen auf unserem Server</li>
|
||
<li>keine eingebetteten Karten (z. B. Google Maps) und keine Video-Embeds</li>
|
||
<li>keine Social-Media-Plugins, „Like“-Buttons oder Tracking-Pixel</li>
|
||
<li>keine Werbenetzwerke oder Conversion-Tracking</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Instagram-Inhalte auf dieser Website</h2>
|
||
<p>
|
||
Auf unserer Website zeigen wir aktuelle Beiträge unseres öffentlichen
|
||
Instagram-Profils. Diese Inhalte werden <strong>nicht</strong> über ein
|
||
Instagram-Plugin oder einen externen Einbettungscode geladen. Stattdessen
|
||
rufen wir die Beiträge in regelmäßigen Abständen serverseitig ab, speichern
|
||
sie auf unserem eigenen Server und liefern Bilder und Texte ausschließlich von
|
||
unserer Domain aus. Beim Ansehen unserer Website wird dadurch
|
||
<strong>keine Verbindung zu Instagram oder Meta hergestellt</strong> und es
|
||
werden keine Daten an diese Anbieter übertragen. Erst wenn du aktiv einen
|
||
Link zu Instagram anklickst, verlässt du unsere Website (siehe nächster
|
||
Abschnitt).
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Externe Links & Social Media</h2>
|
||
<p>
|
||
Unsere Website enthält Links zu externen Angeboten, etwa zu unseren Profilen
|
||
bei Instagram und Facebook oder zu einer Routenplanung über Google Maps. Wenn
|
||
du einen solchen Link anklickst, verlässt du unsere Website und es gelten die
|
||
Datenschutzbestimmungen des jeweiligen Anbieters. Auf deren Datenverarbeitung
|
||
haben wir keinen Einfluss.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Foto- und Videoaufnahmen</h2>
|
||
<p>
|
||
Im Rahmen unseres Vereinslebens, von Spielen und Veranstaltungen entstehen
|
||
Foto- und Videoaufnahmen, die wir zur Darstellung des Vereins auf dieser
|
||
Website, in unseren Social-Media-Kanälen und in Printmedien verwenden. Die
|
||
Veröffentlichung erfolgt auf Grundlage einer Einwilligung
|
||
(Art. 6 Abs. 1 lit. a DSGVO) bzw. unseres berechtigten Interesses an der
|
||
Vereinsöffentlichkeitsarbeit (Art. 6 Abs. 1 lit. f DSGVO). Wenn du mit der
|
||
Veröffentlichung einer dich zeigenden Aufnahme nicht einverstanden bist,
|
||
genügt eine formlose Nachricht an
|
||
<a href="mailto:<?= e($club['email']) ?>"><?= e($club['email']) ?></a> – wir
|
||
entfernen die entsprechende Aufnahme dann zeitnah.
|
||
</p>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Deine Rechte</h2>
|
||
<p>Dir stehen hinsichtlich deiner personenbezogenen Daten folgende Rechte zu:</p>
|
||
<ul>
|
||
<li>Recht auf Auskunft (Art. 15 DSGVO)</li>
|
||
<li>Recht auf Berichtigung (Art. 16 DSGVO)</li>
|
||
<li>Recht auf Löschung (Art. 17 DSGVO)</li>
|
||
<li>Recht auf Einschränkung der Verarbeitung (Art. 18 DSGVO)</li>
|
||
<li>Recht auf Datenübertragbarkeit (Art. 20 DSGVO)</li>
|
||
<li>Recht auf Widerspruch gegen die Verarbeitung (Art. 21 DSGVO)</li>
|
||
</ul>
|
||
<p>
|
||
Eine erteilte Einwilligung kannst du jederzeit mit Wirkung für die Zukunft
|
||
widerrufen. Zur Ausübung deiner Rechte genügt eine Nachricht an die oben
|
||
genannten Kontaktdaten.
|
||
</p>
|
||
<p>
|
||
Außerdem hast du das Recht, dich bei einer Datenschutz-Aufsichtsbehörde zu
|
||
beschweren. Die für uns zuständige Behörde ist:
|
||
</p>
|
||
<div class="legal__card">
|
||
<address>
|
||
<strong>Bayerisches Landesamt für Datenschutzaufsicht (BayLDA)</strong><br>
|
||
Promenade 18<br>
|
||
91522 Ansbach
|
||
</address>
|
||
</div>
|
||
</section>
|
||
|
||
<section>
|
||
<h2>Aktualität dieser Datenschutzerklärung</h2>
|
||
<p class="legal__muted">
|
||
Stand: <?= e(date('m/Y')) ?>. Durch die Weiterentwicklung unserer Website
|
||
oder geänderte gesetzliche Vorgaben kann es nötig werden, diese
|
||
Datenschutzerklärung anzupassen. Es gilt jeweils die hier veröffentlichte
|
||
aktuelle Fassung.
|
||
</p>
|
||
</section>
|
||
</div>
|
||
</div>
|
||
</section>
|