Files
arbeitsstunden/README.md
Erik Thiele 9afc6c39a6 first commit
2026-05-22 10:50:01 +02:00

5.4 KiB

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
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.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