Schön, dass du hier bist! Wähle ein Repository aus, um freundliche Einblicke in die Projekte von rinkelzz zu erhalten.
Repository: rinkelzz/timeCal
Keine Beschreibung verfügbar.
⬇️ ZIP herunterladen
Branch: main
Owner
rinkelzz
README
# timeCal – Terminplanung für die Physiopraxis
Eine kleine PHP-Anwendung zum Verwalten von Leistungen, Therapeuten, Patienten und Terminen. Das Dashboard zeigt für jeden Therapeuten einen eigenen Kalender auf Basis von [FullCalendar](https://fullcalendar.io/). Termine berücksichtigen automatisch die Dauer der gewählten Leistung.
## Voraussetzungen
- PHP 8.1 oder höher (CLI + PDO-MySQL Erweiterung)
- MySQL 8 (oder kompatibel)
## Installation
1. Repository klonen und in das Projektverzeichnis wechseln.
2. Datenbank und Benutzer anlegen, zum Beispiel:
```sql
CREATE DATABASE timecal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'timecal_user'@'localhost' IDENTIFIED BY 'secret';
GRANT ALL PRIVILEGES ON timecal.* TO 'timecal_user'@'localhost';
FLUSH PRIVILEGES;
```
> **Hinweis:** Verfügt der angegebene Benutzer über die nötigen Rechte, erstellt `install.php` die Datenbank automatisch.
3. Umgebung konfigurieren. Entweder die Standardwerte in `config.php` anpassen oder Umgebungsvariablen setzen:
```bash
export DB_HOST=127.0.0.1
export DB_NAME=timecal
export DB_USER=timecal_user
export DB_PASSWORD=secret
export DB_PORT=3306
```
4. Eingebaute PHP-Entwicklungsumgebung starten:
```bash
php -S 127.0.0.1:8000
```
5. Anwendung im Browser unter <http://127.0.0.1:8000/index.php> öffnen.
6. Installation ausführen, indem `http://127.0.0.1:8000/install.php` aufgerufen wird. Das Skript legt die benötigten Tabellen an. Alternativ können die SQL-Befehle aus dem Abschnitt [Datenbankschema](#datenbankschema) manuell ausgeführt werden.
7. Melde dich anschließend unter <http://127.0.0.1:8000/login.php> mit dem Standardzugang `admin` / `admin123` an und passe die Zugangsdaten über die Seite **Zugangsdaten** im Menü an.
## Anmeldung
timeCal schützt alle Verwaltungsseiten hinter einer Anmeldung. Während der Installation wird automatisch ein Standardbenutzer mit den Zugangsdaten `admin` / `admin123` erzeugt. Nach dem ersten Login kannst du Benutzername und Passwort komfortabel auf der Seite **Zugangsdaten** aktualisieren.
Optional lässt sich ein Passwort-Hash auch manuell über die Kommandozeile erzeugen:
```bash
php -r "echo password_hash('neues-passwort', PASSWORD_DEFAULT), PHP_EOL;"
```
```sql
UPDATE users SET password_hash = '<hier-den-Hash-einfügen>' WHERE username = 'admin';
```
## Updates installieren
Die Navigationsleiste enthält den Punkt **Systemupdate**. Dort kannst du sowohl klassische Git-Updates als auch – falls auf dem Server keine Shell-Kommandos erlaubt sind – GitHub-ZIP-Pakete einspielen.
### Git-Update
Voraussetzungen:
- der Webserver-Benutzer darf das `git`-Kommando ausführen (`exec`/`shell_exec` müssen erlaubt sein)
- das Projektverzeichnis ist ein Git-Repository mit konfiguriertem Upstream (z. B. `origin/main`)
Ablauf:
1. Über **Auf Updates prüfen** werden die Remote-Informationen (`git fetch --all`) aktualisiert.
2. Wird ein neuer Stand gefunden, lässt sich dieser über **Update jetzt installieren** via `git pull --ff-only` einspielen.
### GitHub-ZIP-Update
Für Keyhelp- oder Shared-Hosting-Umgebungen ohne Git-Zugriff kann ein ZIP-Update konfiguriert werden:
1. Aktiviere das Feature per Umgebungsvariable (oder `define('TIME_CAL_UPDATE_ZIP_ENABLED', true);` in `config.php`):
```bash
export TIME_CAL_UPDATE_ZIP_ENABLED=true
```
2. Standardmäßig zeigt die Anwendung auf das GitHub-Repository `Coding-Agent/timeCal`. Wenn du einen Fork verwendest,
passe entweder die Konstanten am Anfang der `config.php` an oder setze Umgebungsvariablen:
```bash
export TIME_CAL_UPDATE_GITHUB_OWNER=dein-github-account
export TIME_CAL_UPDATE_GITHUB_REPO=dein-repository
export TIME_CAL_UPDATE_GITHUB_BRANCH=main # optional, Standard ist "main"
```
> Alternativ kannst du in `config.php` vor dem Abschnitt zur GitHub-Konfiguration `define('TIME_CAL_UPDATE_GITHUB_OWNER', '...');` setzen.
3. Aktiviere die PHP-Erweiterung `zip`.
4. Öffne **Systemupdate** und klicke auf **ZIP-Update einspielen**. Die Anwendung lädt den aktuellen Stand des angegebenen Branches von GitHub, entpackt ihn und kopiert die Dateien ins Projekt (ausgenommen `config.php`).
Der Dialog merkt sich den zuletzt installierten Commit. So erkennst du, ob der heruntergeladene Stand neuer ist als die lokal eingespielte Version.
## Datenbankschema
```sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE services (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
duration_minutes INT NOT NULL,
calendar_color CHAR(7) NOT NULL DEFAULT '#0d6efd'
);
CREATE TABLE therapists (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NULL,
phone VARCHAR(50) NULL,
calendar_color CHAR(7) NOT NULL DEFAULT '#0d6efd'
);
CREATE TABLE therapist_working_hours (
id INT AUTO_INCREMENT PRIMARY KEY,
therapist_id INT NOT NULL,
day_of_week VARCHAR(10) NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL,
CONSTRAINT fk_working_hours_therapist FOREIGN KEY (therapist_id) REFERENCES therapists(id) ON DELETE CASCADE,
UNIQUE KEY uniq_therapist_day (therapist_id, day_of_week)
);
CREATE TABLE therapist_absences (
id INT AUTO_INCREMENT PRIMARY KEY,
therapist_id INT NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
all_day TINYINT(1) NOT NULL DEFAULT 0,
note VARCHAR(255) NULL,
CONSTRAINT fk_absences_therapist FOREIGN KEY (therapist_id) REFERENCES therapists(id) ON DELETE CASCADE
);
CREATE TABLE patients (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
email VARCHAR(255) NULL,
phone VARCHAR(50) NULL,
notes TEXT NULL
);
CREATE TABLE appointments (
id INT AUTO_INCREMENT PRIMARY KEY,
therapist_id INT NOT NULL,
patient_id INT NOT NULL,
service_id INT NOT NULL,
start_time DATETIME NOT NULL,
end_time DATETIME NOT NULL,
notes TEXT NULL,
arrived TINYINT(1) NOT NULL DEFAULT 0,
CONSTRAINT fk_appointments_therapist FOREIGN KEY (therapist_id) REFERENCES therapists(id) ON DELETE CASCADE,
CONSTRAINT fk_appointments_patient FOREIGN KEY (patient_id) REFERENCES patients(id) ON DELETE CASCADE,
CONSTRAINT fk_appointments_service FOREIGN KEY (service_id) REFERENCES services(id) ON DELETE CASCADE
);
```
## Funktionen
- **Dashboard** mit Kennzahlen, Farblegende für Leistungen und Kalenderansicht pro Therapeut.
- **Leistungen** mit Behandlungsdauer und Kalenderfarbe verwalten.
- **Therapeuten** inklusive Kalenderfarbe, Kontaktdaten und individuellen Arbeitszeiten pflegen.
- **Arbeitszeiten je Therapeut**: Lege Tagesintervalle fest – der Slot-Finder berücksichtigt sie zusammen mit Abwesenheiten.
- **Patienten** mit Notizen erfassen.
- **Termine** anlegen und bearbeiten; Endzeit wird anhand der Leistungsdauer berechnet.
- **REST-API** (`api/appointments.php`) für den Kalenderabruf durch FullCalendar.
- **Login** schützt die Anwendung, ein Standardzugang (`admin` / `admin123`) wird bei der Installation angelegt.
- **Zugangsdaten** lassen sich über eine eigene Einstellungsseite für den angemeldeten Benutzer anpassen.
## Entwicklungshinweise
- Kalenderzeiten und Öffnungszeiten können in `config.php` angepasst werden.
- Flash-Nachrichten informieren über CRUD-Aktionen.
- Das Projekt verzichtet bewusst auf Frameworks, um einen einfachen Einstieg zu ermöglichen.