commit 9afc6c39a60ac92511e04e415ffeda17209cffc4 Author: Erik Thiele Date: Fri May 22 10:50:01 2026 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..aa05641 --- /dev/null +++ b/README.md @@ -0,0 +1,156 @@ +# TC Ingelfingen Arbeitszeiterfassung + +Strato-taugliche PHP-Webanwendung für die Arbeitszeiterfassung des TC Ingelfingen. + +## Eigenschaften + +- Läuft direkt aus `httpdocs` ohne Shell, Node oder Container +- Optional an externe MySQL/MariaDB-Datenbank anbindbar +- Mitglieder-Login mit Rollenmodell +- Mitglieder sehen Stundenstand, Reststunden und möglichen EUR-Abzug +- Bearbeiter buchen Stunden und legen Mitglieder an +- Admins können alles, inklusive Mitglieder anlegen, Rollen vergeben und Logs ansehen +- Eigene Profilseite für Vorname, Nachname und Passwortänderung +- Passwort-Reset über E-Mail-Link auf der Anmeldeseite +- Darkmode-Schalter in der Kopfzeile mit lokaler Speicherung +- 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 +- Paginierung mit 50 Einträgen pro Seite in Benutzerliste, Stundenbuchungen und Logansicht +- Audit-Log für Verwaltungsaktionen wie Benutzer anlegen, löschen, Rollen ändern und Passwortaktionen +- CSV-Export und CSV-Import für Benutzerdaten inklusive geleisteter Stunden +- Separater CSV-Export für alle Stundenbuchungen +- Admin-Funktion zum Zurücksetzen aller Arbeitsstunden auf 0 +- Tabler CSS via CDN für UI, Cards, Tabellen und Formulare + +## Strato-Setup + +1. Inhalt von `httpdocs/` auf das Strato-Webverzeichnis hochladen +2. Optional diese Umgebungsvariablen oder Konfigurationswerte setzen: + - `DB_HOST` + - `DB_NAME` + - `DB_USER` + - `DB_PASS` + - `SETUP_KEY` optional, schützt die Ersteinrichtung +3. PHP 8.1+ und `pdo_mysql` aktivieren + +## Strato Schritte + +1. DB in Strato anlegen +2. `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASS` setzen +3. `httpdocs/install.php` öffnen und erstes Admin-Konto anlegen +4. Danach mit dem neuen Admin einloggen +5. Falls keine DB konfiguriert ist, nutzt die App Demo-Zugänge nur zum Anzeigen + +## Datenbank + +Die Anwendung ist so aufgebaut, dass sie mit oder ohne DB läuft. Bei gesetzter DB werden Tabellen automatisch angelegt, sonst werden Demo-Daten genutzt. + +- Mitglieder +- Benutzer/Rollen +- Arbeitsstunden +- Audit-Log +- Einstellungen + +## Rollen + +- `member`: sieht das eigene Dashboard, die eigene Profilseite und die eigenen Stundenbuchungen +- `editor`: darf Stunden buchen, Mitglieder anlegen und alle Stundenbuchungen sehen +- `admin`: darf alles, inklusive Mitglieder anlegen, Rollen vergeben, CSV-Import/Export und globalem Stunden-Reset + +## Funktionen + +- Profil + - Jeder Benutzer kann Vorname, Nachname und das eigene Passwort ändern + - Die E-Mail-Adresse wird im Profil angezeigt, ist aber nicht editierbar + - Für vergessene Passwörter gibt es einen Reset-Link per E-Mail +- Dashboard + - `member` sieht die eigenen Pflichtstunden, geleisteten Stunden und offenen Stunden + - `editor` und `admin` sehen aggregierte Gesamtwerte aller Mitglieder inklusive EUR-Werten + - Ein zusätzlicher Informationskasten kann durch Admins gepflegt werden +- Stundenbuchungen + - `member` sieht nur eigene Buchungen + - `editor` und `admin` sehen alle Buchungen + - `admin` kann einzelne Buchungen löschen + - Die Liste ist auf 50 Einträge pro Seite paginiert +- Vereinskonfiguration + - Pflichtstunden und Stundenwert pflegen + - Informationskasten für das Dashboard pflegen + - Benutzerdaten als CSV exportieren + - Alle Stundenbuchungen als CSV exportieren + - Benutzerdaten aus CSV importieren + - Alle Arbeitsstunden auf 0 zurücksetzen + - Logansicht mit 50 Einträgen pro Seite + - Audit-Log für Verwaltungsaktionen + +## Listen Und Paginierung + +Die folgenden Bereiche nutzen eine Paginierung mit 50 Einträgen pro Seite: + +- Benutzerliste in der Benutzerverwaltung +- Stundenbuchungen +- Logansicht in der Vereinskonfiguration + +## Markdown Im Informationskasten + +Der Informationskasten im Dashboard unterstützt eine einfache Markdown-Teilmenge: + +- Absätze +- Listen mit `- ` +- `*kursiv*` +- `**fett**` + +## CSV-Format + +Der CSV-Export und CSV-Import für Benutzerdaten verwenden diese Spalten: + +- `firstname` +- `lastname` +- `email` +- `role` +- `hours_worked` + +Beispiel-Kopfzeile: + +`firstname,lastname,email,role,hours_worked` + +## Passwort-Reset Und Konfiguration + +Für den Passwort-Reset per E-Mail wird eine `config.php` im Projektwurzelverzeichnis verwendet. Eine Vorlage liegt als `config.php.example` vor. + +Mindestens sinnvoll ist ein Absender für E-Mails: + +```php + [ + 'host' => '127.0.0.1', + 'name' => 'arbeitsstunden', + 'user' => 'dbuser', + 'pass' => 'dbpass', + ], + 'smtp' => [ + 'from_email' => 'noreply@example.de', + 'from_name' => 'TC Ingelfingen', + ], +]; +``` + +Hinweis: + +- Die aktuelle Implementierung nutzt PHP `mail()` fuer den Versand. +- Wenn das Hosting E-Mails direkt versenden kann, funktioniert der Passwort-Reset auch ohne vollstaendige SMTP-Implementierung. +- Die Datei `config.php` sollte nicht in `httpdocs/`, sondern im Projektwurzelverzeichnis liegen. + +## Ersteinrichtung + +Wenn noch kein Benutzer vorhanden ist, leite `index.php` automatisch auf `install.php` weiter. Dort kannst du ein erstes Admin-Konto anlegen. + +## Dateien + +- `httpdocs/index.php` Einstieg +- `httpdocs/install.php` Ersteinrichtung +- `httpdocs/app/bootstrap.php` DB, Login und Business-Logik +- `httpdocs/app/views.php` Tabler-UI +- `config.php.example` Vorlage für DB- und Mail-Konfiguration