diff --git a/ANLEITUNG_ADMIN.md b/ANLEITUNG_ADMIN.md index 9375e77..e1f4eed 100644 --- a/ANLEITUNG_ADMIN.md +++ b/ANLEITUNG_ADMIN.md @@ -80,6 +80,7 @@ Dazu gehören: - Benutzerdaten per CSV importieren - alle Arbeitsstunden auf 0 zurücksetzen - Logansicht aller Verwaltungsaktionen +- Logansicht als CSV exportieren Die Logansicht ist auf 50 Einträge pro Seite paginiert. @@ -127,6 +128,8 @@ In der Logansicht werden unter anderem folgende Aktionen protokolliert: - Passwort zurücksetzen - eigenes Passwort ändern - Passwort per Reset-Link neu setzen +- erfolgreiche Anmeldungen +- erfolgreiche Abmeldungen - Speichern von Vereinswerten - CSV-Exporte - CSV-Import diff --git a/ANLEITUNG_BEARBEITER.md b/ANLEITUNG_BEARBEITER.md index 1732ffc..c2fd7bc 100644 --- a/ANLEITUNG_BEARBEITER.md +++ b/ANLEITUNG_BEARBEITER.md @@ -84,7 +84,7 @@ Die Liste ist in Seiten mit jeweils 50 Einträgen aufgeteilt. Hinweis: -- Das Löschen von Stundenbuchungen ist ausschließlich Administratoren möglich. +- Bearbeiter können Stundenbuchungen bei Bedarf auch wieder löschen. ## 6. Vereinskonfiguration @@ -116,6 +116,7 @@ Dort befinden sich Funktionen wie: - CSV-Import - Zurücksetzen aller Arbeitsstunden auf 0 - Logansicht der Verwaltungsaktionen +- Log-Export als CSV ## 8. Passwort Vergessen diff --git a/README.md b/README.md index e125f01..3080b30 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Strato-taugliche PHP-Webanwendung für die Arbeitszeiterfassung des TC Ingelfing - Dashboard-Infokasten für alle Mitglieder, pflegbar durch Admins mit einfacher Markdown-Unterstützung - Aggregierte Dashboard-Übersicht für Bearbeiter und Admins über alle Mitglieder - Stundenbuchungen mit Rollenansicht: Mitglieder nur eigene, Bearbeiter und Admins alle -- Admins können einzelne Stundenbuchungen löschen +- Bearbeiter und Admins können einzelne Stundenbuchungen löschen - Paginierung mit 50 Einträgen pro Seite in Benutzerliste, Stundenbuchungen und Logansicht - Audit-Log für Verwaltungsaktionen sowie Login- und Logout-Vorgänge - CSV-Export und CSV-Import für Benutzerdaten inklusive geleisteter Stunden @@ -74,7 +74,7 @@ Die Anwendung ist so aufgebaut, dass sie mit oder ohne DB läuft. Bei gesetzter - Stundenbuchungen - `member` sieht nur eigene Buchungen - `editor` und `admin` sehen alle Buchungen - - `admin` kann einzelne Buchungen löschen + - `editor` und `admin` können einzelne Buchungen löschen - Die Liste ist auf 50 Einträge pro Seite paginiert - Vereinskonfiguration - Pflichtstunden und Stundenwert pflegen diff --git a/httpdocs/app/bootstrap.php b/httpdocs/app/bootstrap.php index 6d494a7..1e0c3d8 100644 --- a/httpdocs/app/bootstrap.php +++ b/httpdocs/app/bootstrap.php @@ -629,7 +629,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $notice = 'Stunden gebucht.'; } - if ($user && $action === 'delete_booking' && ($user['role'] ?? '') === 'admin' && $pdo) { + if ($user && $action === 'delete_booking' && hasRole($user, ['editor', 'admin']) && $pdo) { $bookingId = (int)($_POST['booking_id'] ?? 0); $stmt = $pdo->prepare('DELETE FROM work_logs WHERE id = ?'); $stmt->execute([$bookingId]); diff --git a/httpdocs/app/views.php b/httpdocs/app/views.php index 39f7198..83c76a5 100644 --- a/httpdocs/app/views.php +++ b/httpdocs/app/views.php @@ -645,7 +645,7 @@ function renderAppShell(string $page): void
| Datum | Mitglied | Gebucht von | Stunden | Notiz | Aktionen |
|---|---|---|---|---|---|
| = htmlspecialchars(formatDateTime((string)$booking['ts'])) ?> | = htmlspecialchars((string)$booking['member']) ?> | = htmlspecialchars((string)$booking['actor']) ?> | = number_format((float)$booking['hours'], 2, ',', '.') ?> h | = htmlspecialchars((string)$booking['note']) ?> | Keine Aktionen |
| Keine Stundenbuchungen vorhanden. | |||||
| Datum | Mitglied | Gebucht von | Stunden | Notiz | Aktionen |
|---|---|---|---|---|---|
| = htmlspecialchars(formatDateTime((string)$booking['ts'])) ?> | = htmlspecialchars((string)$booking['member']) ?> | = htmlspecialchars((string)$booking['actor']) ?> | = number_format((float)$booking['hours'], 2, ',', '.') ?> h | = htmlspecialchars((string)$booking['note']) ?> | Keine Aktionen |
| Keine Stundenbuchungen vorhanden. | |||||
Exportfunktionen für Benutzerdaten und Stundenbuchungen.
Importiert Benutzerdaten aus einer CSV-Datei mit den Spalten firstname, lastname, email, role und hours_worked.
firstname,lastname,email,role,hours_workedSetzt alle gebuchten Arbeitsstunden für alle Mitglieder auf 0. Diese Aktion ist für den Jahreswechsel gedacht.
Exportfunktionen für Benutzerdaten und Stundenbuchungen.
Importiert Benutzerdaten aus einer CSV-Datei mit den Spalten firstname, lastname, email, role und hours_worked.
firstname,lastname,email,role,hours_workedSetzt alle gebuchten Arbeitsstunden für alle Mitglieder auf 0. Diese Aktion ist für den Jahreswechsel gedacht.
| Nachname | Vorname | Rolle | Geleistet | Aktionen | |
|---|---|---|---|---|---|
| = htmlspecialchars((string)($item['lastname'] ?? '')) ?> | = htmlspecialchars((string)($item['firstname'] ?? '')) ?> | = htmlspecialchars($item['email']) ?> | = htmlspecialchars(roleLabel((string)$item['role'])) ?> | = number_format((float)$item['hours_worked'], 1, ',', '.') ?> h |