ソースを参照

changed zipfile name, adding hint about deleting old entries

Medowar 1 週間 前
コミット
edd50d02b9
2 ファイル変更75 行追加52 行削除
  1. 11 2
      admin/download-zip.php
  2. 64 50
      admin/index.php

+ 11 - 2
admin/download-zip.php

@@ -29,7 +29,16 @@ if ($submission === null) {
 
 $app = Bootstrap::config('app');
 $baseUploads = rtrim((string) $app['storage']['uploads'], '/');
-$zipPath = sys_get_temp_dir() . '/antrag_' . $id . '_' . bin2hex(random_bytes(4)) . '.zip';
+
+$formData = (array) ($submission['form_data'] ?? []);
+$vorname = preg_replace('/[^a-zA-Z0-9-]/', '_', (string) ($formData['vorname'] ?? ''));
+$nachname = preg_replace('/[^a-zA-Z0-9-]/', '_', (string) ($formData['nachname'] ?? ''));
+$namePart = trim($vorname . '_' . $nachname, '_');
+if ($namePart === '') {
+    $namePart = $id;
+}
+
+$zipPath = sys_get_temp_dir() . '/antrag_' . $namePart . '_' . bin2hex(random_bytes(4)) . '.zip';
 
 $zip = new ZipArchive();
 if ($zip->open($zipPath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
@@ -68,7 +77,7 @@ $zip->close();
 
 header('Content-Type: application/zip');
 header('Content-Length: ' . (string) filesize($zipPath));
-header('Content-Disposition: attachment; filename="antrag_' . $id . '.zip"');
+header('Content-Disposition: attachment; filename="antrag_' . $namePart . '.zip"');
 readfile($zipPath);
 unlink($zipPath);
 exit;

+ 64 - 50
admin/index.php

@@ -37,6 +37,7 @@ if ($query !== '') {
 }
 ?><!doctype html>
 <html lang="de">
+
 <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
@@ -44,59 +45,72 @@ if ($query !== '') {
     <link rel="stylesheet" href="<?= htmlspecialchars(Bootstrap::url('assets/css/tokens.css')) ?>">
     <link rel="stylesheet" href="<?= htmlspecialchars(Bootstrap::url('assets/css/base.css')) ?>">
 </head>
+
 <body class="admin-page">
-<header class="site-header">
-    <div class="container header-inner">
-        <a class="brand" href="<?= htmlspecialchars(Bootstrap::url('admin/index.php')) ?>">
-            <img class="brand-logo" src="<?= htmlspecialchars(Bootstrap::url('assets/images/feuerwehr-logo-invers.webp')) ?>" alt="Feuerwehr Logo">
-            <div class="brand-title"><?= htmlspecialchars((string) ($app['project_name'] ?? 'Admin')) ?></div>
-        </a>
-    </div>
-</header>
-<main class="container">
-    <section class="card">
-        <div class="admin-toolbar">
-            <div>
-                <h1>Abgeschlossene Anträge</h1>
-                <a href="<?= htmlspecialchars(Bootstrap::url('admin/login.php?logout=1')) ?>">Abmelden</a>
-            </div>
-            <form method="get" class="field">
-                <label for="q">Suche Name oder E-Mail</label>
-                <input id="q" name="q" value="<?= htmlspecialchars($query) ?>">
-            </form>
+    <header class="site-header">
+        <div class="container header-inner">
+            <a class="brand" href="<?= htmlspecialchars(Bootstrap::url('admin/index.php')) ?>">
+                <img class="brand-logo"
+                    src="<?= htmlspecialchars(Bootstrap::url('assets/images/feuerwehr-logo-invers.webp')) ?>"
+                    alt="Feuerwehr Logo">
+                <div class="brand-title"><?= htmlspecialchars((string) ($app['project_name'] ?? 'Admin')) ?></div>
+            </a>
         </div>
+    </header>
+    <main class="container">
+        <section class="card">
+            <div class="admin-toolbar">
+                <div>
+                    <h1>Abgeschlossene Anträge</h1>
+                    <a href="<?= htmlspecialchars(Bootstrap::url('admin/login.php?logout=1')) ?>">Abmelden</a>
+                </div>
+                <form method="get" class="field">
+                    <label for="q">Suche Name oder E-Mail</label>
+                    <input id="q" name="q" value="<?= htmlspecialchars($query) ?>">
+                </form>
+            </div>
 
-        <?php if (empty($list)): ?>
-            <p>Keine Anträge vorhanden.</p>
-        <?php else: ?>
-            <div class="table-responsive">
-                <table class="responsive-table table-dense admin-submissions-table">
-                    <thead>
-                        <tr>
-                            <th>Vorname</th>
-                            <th>Nachname</th>
-                            <th>E-Mail</th>
-                            <th>Eingereicht</th>
-                            <th>Aktion</th>
-                        </tr>
-                    </thead>
-                    <tbody>
-                        <?php foreach ($list as $item):
-                            $formData = (array) ($item['form_data'] ?? []);
-                        ?>
+            <div class="alert alert-warning">
+                <strong>Hinweis:</strong> Anträge werden nach <?= (int) ($app['retention']['submission_days'] ?? 90) ?>
+                Tagen aus Datenschutzgründen automatisch gelöscht.
+            </div>
+
+            <?php if (empty($list)): ?>
+                <p>Keine Anträge vorhanden.</p>
+            <?php else: ?>
+                <div class="table-responsive">
+                    <table class="responsive-table table-dense admin-submissions-table">
+                        <thead>
                             <tr>
-                                <td data-label="Vorname"><?= htmlspecialchars((string) ($formData['vorname'] ?? '')) ?></td>
-                                <td data-label="Nachname"><?= htmlspecialchars((string) ($formData['nachname'] ?? '')) ?></td>
-                                <td data-label="E-Mail"><?= htmlspecialchars((string) ($item['email'] ?? '')) ?></td>
-                                <td data-label="Eingereicht"><?= htmlspecialchars((string) ($item['submitted_at'] ?? '')) ?></td>
-                                <td data-label="Aktion"><a href="<?= htmlspecialchars(Bootstrap::url('admin/application.php?id=' . urlencode((string) ($item['application_key'] ?? '')))) ?>">Details</a></td>
+                                <th>Vorname</th>
+                                <th>Nachname</th>
+                                <th>E-Mail</th>
+                                <th>Eingereicht</th>
+                                <th>Aktion</th>
                             </tr>
-                        <?php endforeach; ?>
-                    </tbody>
-                </table>
-            </div>
-        <?php endif; ?>
-    </section>
-</main>
+                        </thead>
+                        <tbody>
+                            <?php foreach ($list as $item):
+                                $formData = (array) ($item['form_data'] ?? []);
+                                ?>
+                                <tr>
+                                    <td data-label="Vorname"><?= htmlspecialchars((string) ($formData['vorname'] ?? '')) ?></td>
+                                    <td data-label="Nachname"><?= htmlspecialchars((string) ($formData['nachname'] ?? '')) ?>
+                                    </td>
+                                    <td data-label="E-Mail"><?= htmlspecialchars((string) ($item['email'] ?? '')) ?></td>
+                                    <td data-label="Eingereicht"><?= htmlspecialchars((string) ($item['submitted_at'] ?? '')) ?>
+                                    </td>
+                                    <td data-label="Aktion"><a
+                                            href="<?= htmlspecialchars(Bootstrap::url('admin/application.php?id=' . urlencode((string) ($item['application_key'] ?? '')))) ?>">Details</a>
+                                    </td>
+                                </tr>
+                            <?php endforeach; ?>
+                        </tbody>
+                    </table>
+                </div>
+            <?php endif; ?>
+        </section>
+    </main>
 </body>
-</html>
+
+</html>