Freundlicher GitHub Repository Explorer

Willkommen! Entdecke die Projekte dieses GitHub-Owners.

⬇️ ZIP herunterladen Standard-Branch: main

Aktueller Besitzer: github.com/rinkelzz

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.

Sterne:
0
Forks:
0
Watchers:
0
Open Issues:
2

Owner

Avatar von rinkelzz
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.