TC Ingelfingen Arbeitszeiterfassung
Strato-taugliche PHP-Webanwendung für die Arbeitszeiterfassung des TC Ingelfingen.
Eigenschaften
- Läuft direkt aus
httpdocsohne 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
- 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
- Separater CSV-Export für alle Stundenbuchungen
- SQL-Dump-Export und SQL-Dump-Wiederherstellung für vollständige App-Backups
- Separater CSV-Export der Logansicht für Administratoren
- Admin-Funktion zum Löschen der Audit-Logeinträge
- Admin-Funktion zum Zurücksetzen aller Arbeitsstunden auf 0
- Tabler CSS via CDN für UI, Cards, Tabellen und Formulare
Strato-Setup
- Inhalt von
httpdocs/in das Webverzeichnis der App hochladen - Wenn die App in einem Unterordner wie
/arbeitsstunden/läuft, muss genau dieser Ordner das Webroot der App enthalten config.phpnicht inhttpdocs/, sondern eine Ebene darüber ablegen- Optional diese Umgebungsvariablen oder Konfigurationswerte setzen:
DB_HOSTDB_NAMEDB_USERDB_PASSSETUP_KEYoptional, schützt die Ersteinrichtung
- PHP 8.1+ und
pdo_mysqlaktivieren
Strato Schritte
- DB in Strato anlegen
DB_HOST,DB_NAME,DB_USER,DB_PASSsetzen oderconfig.phpoberhalb des Webroots anlegen- Dateien aus
httpdocs/in den Zielordner der App hochladen, z. B.https://tc-ingelfingen.de/arbeitsstunden/ install.phpüber den App-Pfad öffnen, z. B./arbeitsstunden/install.php, und erstes Admin-Konto anlegen- Danach mit dem neuen Admin einloggen
- 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 Stundenbuchungeneditor: darf Stunden buchen, Mitglieder anlegen, alle Stundenbuchungen sehen und die Vereinskonfiguration pflegenadmin: darf alles, inklusive Mitglieder anlegen, Rollen vergeben, Administration, CSV-/SQL-Exporte, CSV-/SQL-Importe 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
membersieht die eigenen Pflichtstunden, geleisteten Stunden und offenen Stundeneditorundadminsehen aggregierte Gesamtwerte aller Mitglieder inklusive EUR-Werten- Ein zusätzlicher Informationskasten kann durch Admins gepflegt werden
- Stundenbuchungen
membersieht nur eigene Buchungeneditorundadminsehen alle Buchungeneditorundadminkönnen 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
- Administration
- SQL-Dump für vollständige Datensicherung herunterladen
- SQL-Dump zur Wiederherstellung hochladen
- Benutzerdaten aus CSV importieren
- Alle Arbeitsstunden auf 0 zurücksetzen
- Logansicht mit 50 Einträgen pro Seite
- Logansicht als CSV exportieren
- Audit-Logeinträge direkt in der Administration löschen
- Audit-Log für Verwaltungsaktionen sowie Login und Logout
Listen Und Paginierung
Die folgenden Bereiche nutzen eine Paginierung mit 50 Einträgen pro Seite:
- Benutzerliste in der Benutzerverwaltung
- Stundenbuchungen
- Logansicht in der Administration
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:
firstnamelastnameemailrolehours_worked
Beispiel-Kopfzeile:
firstname,lastname,email,role,hours_worked
Backup Und Wiederherstellung
Zusätzlich zu den CSV-Exporten gibt es in der Administration einen SQL-Dump für vollständige Backups der App-Datenbank.
Enthalten sind die App-Tabellen:
userswork_logssettingsaudit_logspassword_resets
Hinweise:
- Der SQL-Dump ist für vollständige Sicherungen und Wiederherstellung gedacht.
- Die SQL-Wiederherstellung überschreibt die bestehenden App-Daten.
- CSV-Exporte bleiben zusätzlich für Auswertungen und Teilimporte erhalten.
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
return [
'db' => [
'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.phpsollte nicht inhttpdocs/, sondern im Projektwurzelverzeichnis liegen. - Bei einem Deployment in einem Unterordner wie
/arbeitsstunden/liegtconfig.phpeine Ebene über diesem Webroot.
Ersteinrichtung
Wenn noch kein Benutzer vorhanden ist, leite index.php automatisch auf install.php weiter. Dort kannst du ein erstes Admin-Konto anlegen.
Handouts
Für die Weitergabe an Anwender stehen folgende Anleitungen bereit:
ANLEITUNG_MITGLIEDER.mdANLEITUNG_BEARBEITER.mdANLEITUNG_ADMIN.md
Dateien
httpdocs/index.phpEinstieghttpdocs/install.phpErsteinrichtunghttpdocs/app/bootstrap.phpDB, Login und Business-Logikhttpdocs/app/views.phpTabler-UIconfig.phplokale Konfiguration oberhalb des Webrootsconfig.php.exampleVorlage für DB- und Mail-KonfigurationANLEITUNG_MITGLIEDER.mdHandout für MitgliederANLEITUNG_BEARBEITER.mdHandout für BearbeiterANLEITUNG_ADMIN.mdHandout für Administratoren