added privacy and imprint pages to meet german DSGVO criteria

This commit is contained in:
2026-04-24 16:09:53 +02:00
parent 076e82213d
commit 9c8e641557
2 changed files with 119 additions and 0 deletions

55
public/imprint.php Normal file
View File

@@ -0,0 +1,55 @@
<?php
// =====================================================================
// Imprint Page
// =====================================================================
require_once __DIR__ . '/api/db.php';
$pdo = get_db();
$stmt = $pdo->prepare("SELECT * FROM municipalities WHERE slug = :slug");
$stmt->execute([':slug' => 'lohne']);
$municipality = $stmt->fetch();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Impressum — <?= htmlspecialchars($municipality['name']) ?></title>
<link rel="icon" href="assets/icon-municipality.png" type="image/png">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
:root { --color-primary: <?= htmlspecialchars($municipality['primary_color']) ?>; }
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Segoe UI', system-ui, sans-serif; background: #f4f5f7; color: #1a1a2e; }
.page-header { background: var(--color-primary); color: white; padding: 16px 24px; }
.page-header h1 { font-size: 1.2rem; }
.page-header a { color: white; opacity: 0.8; text-decoration: none; font-size: 0.85rem; }
.page-header a:hover { opacity: 1; }
.page-header-inner { max-width: 800px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; }
.page-content { max-width: 800px; margin: 32px auto; padding: 32px; background: white; border-radius: 8px; border: 1px solid #e0e0e0; line-height: 1.7; }
.page-content h2 { font-size: 1.1rem; margin: 24px 0 8px 0; color: var(--color-primary); }
.page-content h2:first-child { margin-top: 0; }
.page-content p { margin-bottom: 12px; color: #5a5a7a; }
@media (max-width: 768px) { .page-content { margin: 16px; padding: 20px; } }
</style>
</head>
<body>
<div class="page-header">
<div class="page-header-inner">
<h1><i class="fa-solid fa-scale-balanced"></i> Impressum</h1>
<a href="index.php"><i class="fa-solid fa-arrow-left"></i> Zurück zur Karte</a>
</div>
</div>
<div class="page-content">
<h2>Angaben gemäß § 5 TMG</h2>
<p>Stadt <?= htmlspecialchars($municipality['name']) ?></p>
<p>Die vollständigen Angaben (Adresse, Telefon, E-Mail, Vertretungsberechtigte) werden hier ergänzt, sobald das Portal in den Produktivbetrieb geht.</p>
<h2>Technische Umsetzung</h2>
<p><a href="https://endex-geodaten.de" target="_blank" style="color:var(--color-primary);">endex GmbH</a></p>
<h2>Haftungsausschluss</h2>
<p>Die Inhalte der Bürgerbeiträge geben die Meinung der jeweiligen Verfasser wieder. Die Stadt <?= htmlspecialchars($municipality['name']) ?> übernimmt keine Gewähr für deren Richtigkeit.</p>
</div>
</body>
</html>

64
public/privacy.php Normal file
View File

@@ -0,0 +1,64 @@
<?php
// =====================================================================
// Privacy Policy Page
// =====================================================================
require_once __DIR__ . '/api/db.php';
$pdo = get_db();
$stmt = $pdo->prepare("SELECT * FROM municipalities WHERE slug = :slug");
$stmt->execute([':slug' => 'lohne']);
$municipality = $stmt->fetch();
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Datenschutz — <?= htmlspecialchars($municipality['name']) ?></title>
<link rel="icon" href="assets/icon-municipality.png" type="image/png">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>
:root { --color-primary: <?= htmlspecialchars($municipality['primary_color']) ?>; }
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: 'Segoe UI', system-ui, sans-serif; background: #f4f5f7; color: #1a1a2e; }
.page-header { background: var(--color-primary); color: white; padding: 16px 24px; }
.page-header h1 { font-size: 1.2rem; }
.page-header a { color: white; opacity: 0.8; text-decoration: none; font-size: 0.85rem; }
.page-header a:hover { opacity: 1; }
.page-header-inner { max-width: 800px; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; }
.page-content { max-width: 800px; margin: 32px auto; padding: 32px; background: white; border-radius: 8px; border: 1px solid #e0e0e0; line-height: 1.7; }
.page-content h2 { font-size: 1.1rem; margin: 24px 0 8px 0; color: var(--color-primary); }
.page-content h2:first-child { margin-top: 0; }
.page-content p { margin-bottom: 12px; color: #5a5a7a; }
@media (max-width: 768px) { .page-content { margin: 16px; padding: 20px; } }
</style>
</head>
<body>
<div class="page-header">
<div class="page-header-inner">
<h1><i class="fa-solid fa-shield-halved"></i> Datenschutzerklärung</h1>
<a href="index.php"><i class="fa-solid fa-arrow-left"></i> Zurück zur Karte</a>
</div>
</div>
<div class="page-content">
<h2>Verantwortliche Stelle</h2>
<p>Stadt <?= htmlspecialchars($municipality['name']) ?></p>
<p>Die vollständigen Kontaktdaten werden hier ergänzt, sobald das Portal in den Produktivbetrieb geht.</p>
<h2>Erhobene Daten</h2>
<p>Das Bürgerbeteiligungsportal speichert die von Ihnen eingegebenen Beiträge (Titel, Beschreibung, Geometrie, Name) sowie Ihre Abstimmungen zur Durchführung der Bürgerbeteiligung.</p>
<h2>Zweck der Verarbeitung</h2>
<p>Die Daten werden ausschließlich zur Durchführung und Auswertung der Bürgerbeteiligung verwendet.</p>
<h2>Weitergabe an Dritte</h2>
<p>Ihre Daten werden nicht an Dritte weitergegeben.</p>
<h2>Ihre Rechte</h2>
<p>Sie haben das Recht auf Auskunft, Berichtigung und Löschung Ihrer Daten. Kontaktieren Sie hierzu die verantwortliche Stelle.</p>
<h2>Cookies und Sitzungsdaten</h2>
<p>Das Portal verwendet Sitzungscookies zur Speicherung Ihres Namens während der Nutzung. Diese werden beim Schließen des Browsers gelöscht.</p>
</div>
</body>
</html>