# 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