Sprint-Uebersicht
Aktueller Entwicklungsstand und Sprint-Status
Sprint-Uebersicht
Aktueller Entwicklungsstand des Kurs-Booking Plugins.
Status Gesamt
Fortschritt: 100% - PRODUCTION LIVE
Letztes Update: 09. Januar 2026
Deployment: LIVE auf Hetzner (18.12.2025)
Tests: Phase 1 + 2 abgeschlossen, alle kritischen Bugs behoben
Backup: Vollstaendiges Backup-System mit Restore-Funktion
Sprint-Tabelle
| Sprint | Thema | Status |
|---|---|---|
| 1 | Grundgeruest | ✅ Erledigt |
| 2 | Buchungsflow | ✅ Erledigt |
| 2.5 | Einstellungen komplett | ✅ Erledigt |
| 2.6 | Settings-Integration | ✅ Erledigt |
| 3 | sevDesk Integration | ✅ Erledigt |
| 4.1 | Video Post-Type | ✅ Erledigt |
| 4.2 | Video-Service (Python) | ✅ Erledigt |
| 4.3 | Kurstypen-Matrix | ✅ Erledigt |
| 4.6 | Standalone Video-Verkauf | ✅ Erledigt |
| 4.7 | Video-Upload Admin UI | ✅ Erledigt |
| 4.9 | Video-Bundles | ✅ Erledigt |
| 4.10 | Flexible Preisvarianten | ✅ Erledigt |
| 4.11 | Kurs-spezifische Buchungsfelder | ✅ Erledigt |
| 4.12 | Video-Streaming E2E | ✅ Erledigt |
| 5 | Kadence Migration | 🔄 Pausiert |
| 6 | Stornierung + E-Mail | ✅ Erledigt |
| 6.6 | Portal-Feldsynchronisation | ✅ Erledigt |
| 7 | E-Mail Template Editor | ✅ Erledigt |
| 7.5 | Stammdaten + Vorlagen | ✅ Erledigt |
| 7.6 | Admin-Optimierungen | ✅ Erledigt |
| 7.7 | Modul-System Integration | ✅ Erledigt |
| 7.8 | Frontend-Anzeige-Optionen | ✅ Erledigt |
| 7.9 | Admin-Menue-Optimierung | ✅ Erledigt |
| 8 | Dienstleistungs-Matrix | ✅ Erledigt |
| 8.6 | Feldbaum + Shortcodes | ✅ Erledigt |
| PROD | Production Deployment | ✅ Erledigt |
| 9 | Pop-up Neuigkeiten | ✅ Erledigt |
| 10 | Kontext-Hilfe-System | ✅ Erledigt |
| 11 | Custom Database Tables | ✅ Erledigt |
| DEPLOY | Hetzner Deployment | ✅ LIVE |
| TEST | Systemtests + Migration | ✅ Erledigt |
| BACKUP | Backup & Restore System | ✅ Erledigt |
| 12 | sevDesk Bulk-Sync | ✅ Erledigt |
| 13 | Varianten-Mapping UI | ✅ Erledigt |
| 14 | Kategorie-Zuordnung | ✅ Erledigt |
| 29 | Produktart-Wizard | ✅ Erledigt |
| 30 | Buchungsfelder-Accordion | ✅ Erledigt |
| 31 | Feldgruppen-Konfiguration | ✅ Erledigt |
| 33 | Buchungsfeld-Kategorien UI | ✅ Erledigt |
| 34 | Erinnerungsmodul Grundgeruest | ✅ Erledigt |
| 35 | sevDesk Mahnrechnungen | ✅ Erledigt |
| 35A | Erweiterte Erinnerungsfunktionen | ✅ Erledigt |
| 36 | Dynamische Vorlagen (Feldgruppen + Kategorien) | ✅ Erledigt |
| 37 | Kommunikationsmodule (WhatsApp + Newsletter) | ✅ Erledigt |
| 38 | Multi-Channel Benachrichtigungen (SMS + WhatsApp) | ✅ Erledigt |
| 39 | Leihpferd & Gastbox Modul | ✅ Erledigt |
| 39B | Leihpferd/Gastbox Feldtypen-Integration | ✅ Erledigt |
| 40 | Email-Templates Anzahlung/Restzahlung | ✅ Erledigt |
| 41 | Hybrid-Validierung + Zahlungsauswahl | ✅ Erledigt |
| 42 | Stripe Integration | ✅ Erledigt |
| 43 | PayPal Integration | ✅ Erledigt |
| 44 | Customer Portal Zahlungen | ✅ Erledigt |
| 45 | Session-Inaktivitaet Portal | ✅ Erledigt |
| 46 | Finetuning & Bugfixes | ✅ Erledigt |
| 47 | Autonome Agenten Code-Analyse | ✅ Erledigt |
| 48 | Audit-Fixes & Plausibilitaetspruefung | ✅ Erledigt |
| 49 | UI Review & Admin-Verbesserungen | ✅ Erledigt |
| 50 | Customer Merge (Multiple E-Mails) | ✅ Erledigt |
| 51 | Zahlungshinweise Buchungsbestaetigung | ✅ Erledigt |
| 52 | Settings-Buttons im Kurs-Editor | ✅ Erledigt |
| 53 | Seiten-spezifische Kurs-Einstellungen | ✅ Erledigt |
| 54 | Kaskadierende Filter (Bidirektional) | ✅ Erledigt |
| 55 | Filter AJAX + Counts + DB-Migration | ✅ Erledigt |
| 56 | Anzahlung × Ticket-Anzahl | ✅ Erledigt |
| 57 | Reminder Monitoring Bugfixes (strict_types) | ✅ Erledigt |
| 58 | Safety-Net + sevDesk Abhaengigkeits-Hinweise | ✅ Erledigt |
Payment-Sprints: Modul-Integrationen
Betroffene WordPress-Module
| Modul | Sprint 41 | Sprint 42 | Sprint 43 | Sprint 44 |
|---|---|---|---|---|
class-buchung.php |
Meta-Felder | - | - | - |
class-email.php |
Templates | Zahlungs-Email | Zahlungs-Email | - |
class-ajax.php |
Speichern | Checkout Session | Order Create | - |
class-frontend.php |
Formular UI | Stripe Redirect | PayPal Buttons | - |
class-rest-api.php |
Payment-Response | Stripe Webhook | PayPal Webhook | Portal-Sync |
class-sevdesk.php |
- | bookAmount() | bookAmount() | - |
class-reminder-engine.php |
Status-Check | Cancel bei Zahlung | Cancel bei Zahlung | - |
class-settings.php |
Payment Tab | Stripe Config | PayPal Config | - |
class-invoice.php |
Zahlungsstatus | - | - | - |
class-pdf.php |
Zahlungsart | - | - | - |
class-multichannel-settings.php |
- | SMS bei Zahlung | SMS bei Zahlung | - |
Betroffene Portal-Module
| Modul | Sprint 44 |
|---|---|
models/booking.py |
Payment-Spalten (payment_method, payment_status, etc.) |
services/wordpress_api.py |
Payment-Daten beim Sync |
web/routes/bookings.py |
Zahlungsstatus-Anzeige |
web/routes/profile.py |
Bevorzugte Zahlungsweise |
templates/bookings/detail.html |
Payment-Sektion |
templates/bookings/list.html |
Status-Icons |
templates/profile/*.html |
Zahlungsweise |
Neue WordPress Hooks
| Hook | Beschreibung | Listener |
|---|---|---|
kurs_booking_payment_method_set |
Zahlungsart gewaehlt | - |
kurs_booking_payment_status_changed |
Status geaendert | sevDesk, Email |
kurs_booking_payment_completed |
Zahlung erfolgreich | sevDesk, Email, Reminders, SMS |
kurs_booking_payment_refunded |
Erstattung | sevDesk (Gutschrift) |
Abgeschlossene Sprints (Validierung & Zahlungen)
Sprint 41: Hybrid-Validierung + Zahlungsauswahl (29.12.2025)
Ziel: Zuverlaessige Formularvalidierung fuer alle Feldtypen + Zahlungsart-Konfiguration pro Kurs
Status: ✅ Erledigt
Umsetzung:
1. Hybrid-Validierung mit HTML5 API:
- Kombination aus HTML5 Constraint Validation API + Custom Styling
- validateField() nutzt field.checkValidity() statt manuelle Regex
- getValidationMessage() liefert deutsche Fehlermeldungen
- Pattern-Attribute fuer alle Feldtypen (PLZ, Name, Tel, E-Mail, IBAN, Datum)
2. Pattern-Attribute:
- PLZ: [0-9]{4,5} (AT/DE)
- Name/City: [A-Za-zÄÖÜäöüß\s\-]+
- Tel: [+0-9\s\-()]{6,20}
- E-Mail: [^\s@]+@[^\s@]+\.[^\s@]+
- IBAN: IBAN-Format
- Date: \d{4}-\d{2}-\d{2}
3. No-JavaScript Fallback:
- <noscript> Warnung fuer Benutzer ohne JS
- E-Mail-Kontakt als Alternative
4. Zahlungsart pro Kurs: - Per-Kurs Meta-Box fuer Zahlungsarten - Anzeige der verfuegbaren Zahlungsarten in Step 1
Betroffene Dateien:
| Datei | Aenderung |
|---|---|
assets/js/frontend.js |
validateField() + getValidationMessage() |
templates/booking-form.php |
Pattern-Attribute + <noscript> |
help-service/content/zahlungsarten.md |
Dokumentation |
Git Commit: 0f199d9 Sprint 41: Hybrid-Validierung mit HTML5 API
Details: Session 29.12.2025
Sprint 42: Stripe Integration (29.12.2025)
Ziel: Stripe Checkout als Zahlungsoption fuer Online-Zahlungen integrieren
Status: ✅ Erledigt
Umsetzung:
1. Modulare Architektur (3 neue Klassen):
- class-stripe.php (~450 Zeilen) - Hauptmodul mit Checkout Sessions
- class-stripe-settings.php (~300 Zeilen) - Einstellungen UI
- class-stripe-webhook.php (~280 Zeilen) - Webhook Handler
2. Stripe Checkout Sessions: - PCI-konforme Zahlungsabwicklung via Redirect - Automatische Buchungsnummer als Referenz - Success/Cancel URL Handling - Test/Live Mode Trennung
3. Webhook-Events:
- checkout.session.completed - Zahlung erfolgreich
- charge.refunded - Erstattung
- payment_intent.payment_failed - Zahlung fehlgeschlagen
- REST API Endpoint: /wp-json/kurs-booking/v1/webhook/stripe
4. Settings UI: - API Keys (Test + Live) - Live-Mode Toggle - Verbindungstest mit Account-Info - Webhook-URL Anzeige + Kopier-Button
5. Frontend Integration: - Zahlungsart-Auswahl im Buchungsformular - Redirect zu Stripe Checkout nach Buchung - Erfolgs-Handling nach Rueckkehr
Betroffene Dateien:
| Datei | Aenderung |
|---|---|
includes/class-stripe.php |
NEU - Hauptmodul |
includes/class-stripe-settings.php |
NEU - Settings Tab |
includes/class-stripe-webhook.php |
NEU - Webhook Handler |
includes/class-ajax.php |
Stripe Checkout Session erstellen |
includes/class-settings.php |
Modul-Integration |
assets/js/frontend.js |
Stripe Redirect Handling |
templates/partials/payment-options.php |
Stripe Hinweis |
composer.json |
stripe/stripe-php ^16.0 |
kurs-booking.php |
Version 2.9.0 + Stripe Init |
Composer Dependency:
- stripe/stripe-php v19.1.0
Dokumentation: Stripe Integration
Sprint 43: PayPal Integration (29.12.2025)
Ziel: PayPal als Zahlungsoption fuer Online-Zahlungen integrieren
Status: ✅ Erledigt
Umsetzung:
1. Modulare Architektur (3 neue Klassen):
- class-paypal.php (~480 Zeilen) - Hauptmodul mit Orders API
- class-paypal-settings.php (~340 Zeilen) - Einstellungen UI
- class-paypal-webhook.php (~310 Zeilen) - Webhook Handler
2. PayPal REST API v2: - OAuth2 Client Credentials Authentifizierung - Orders API fuer Zahlungsabwicklung - Sandbox/Live Umgebungstrennung - create_order, capture_order, process_refund Methoden
3. Webhook-Events:
- CHECKOUT.ORDER.APPROVED - Order genehmigt
- PAYMENT.CAPTURE.COMPLETED - Zahlung erfolgreich
- PAYMENT.CAPTURE.REFUNDED - Erstattung
- REST API Endpoint: /wp-json/kurs-booking/v1/webhook/paypal
4. Settings UI: - API Credentials (Client ID + Secret) - Sandbox/Live Mode Toggle - Verbindungstest - Webhook-URL Anzeige + Kopier-Button
Betroffene Dateien:
| Datei | Aenderung |
|---|---|
includes/class-paypal.php |
NEU - Hauptmodul |
includes/class-paypal-settings.php |
NEU - Settings Tab |
includes/class-paypal-webhook.php |
NEU - Webhook Handler |
includes/class-ajax.php |
PayPal Order erstellen |
includes/class-settings.php |
Modul-Integration |
assets/js/frontend.js |
PayPal Redirect Handling |
templates/partials/payment-options.php |
PayPal Hinweis |
composer.json |
paypal/paypal-server-sdk ^2.1 |
kurs-booking.php |
Version 2.10.0 + PayPal Init |
Composer Dependency:
- paypal/paypal-server-sdk v2.1.0
Dokumentation: PayPal Integration
Sprint 44: Customer Portal Zahlungen (29.12.2025)
Ziel: Zahlungsinformationen im Customer Portal anzeigen
Status: ✅ Erledigt
Umsetzung:
1. REST API erweitert:
- Zahlungsfelder in /bookings und /bookings/{id} Response
- payment_method, payment_status
- Provider-ID (Stripe Payment Intent / PayPal Order ID)
- payment_completed_at
2. Portal Booking Model: - Neue Spalten: payment_method, payment_status, payment_provider_id, payment_completed_at - Display-Properties: payment_method_display, payment_status_display, payment_method_icon, payment_status_color - Migration: 007_add_payment_columns.py
3. Sync erweitert: - create_or_update_from_wp() verarbeitet payment Objekt - Fallback fuer List-Endpoint (payment_method, payment_status direkt)
4. Frontend UI: - Buchungsdetails: Zahlungssektion mit Methode, Status, Zeitpunkt - Buchungsliste: Status-Badge mit Icon und Farbe - Admin-Ansicht: Zahlungskarte mit Provider-ID
Betroffene Dateien:
| Datei | Aenderung |
|---|---|
includes/class-rest-api.php |
Payment-Felder in Response |
customer_portal/models/booking.py |
Neue Spalten + Properties |
customer_portal/migrations/007_*.py |
DB-Migration |
templates/bookings/detail.html |
Zahlungssektion |
templates/bookings/list.html |
Status-Badge |
templates/admin/booking_detail.html |
Zahlungskarte |
Abgeschlossene Sprints (Erinnerungen)
Sprint 35A: Erweiterte Erinnerungsfunktionen (25.12.2025)
Ziel: Fehlende MEC-Features im Erinnerungsmodul implementieren
Status: ✅ Erledigt
Umsetzung: - Multiple Erinnerungszeitpunkte (z.B. "7, 3, 1" Tage vor Kurs) - CC-Empfaenger (sichtbare Kopie an Admin/Manager) - BCC-Empfaenger (versteckte Kopie) - BCC nach Benutzerrollen (z.B. alle Administratoren bekommen BCC)
Betroffene Dateien:
- class-reminder-settings.php - Neue Optionen + UI
- class-reminder-engine.php - Loop ueber alle Tage + CC/BCC Header
- class-reminder-repository.php - exists_with_days() Methode
Details: Sprint 35A - Erweiterte Erinnerungen
Abgeschlossene Sprints (Leihpferd & Gastbox)
Sprint 39B: Leihpferd/Gastbox Feldtypen-Integration (26.12.2025)
Ziel: Leihpferd und Gastbox in den Buchungsfelder-Editor integrieren
Status: ✅ Erledigt
Konzept: Zwei-Stufen-Konfiguration
| Wo | Was |
|---|---|
| Buchungsfelder-Editor | Aktivierung + Produktart-Filter |
| Kurs-Editor | Max. Anzahl + Preis (wie bisher) |
Umsetzung:
1. Neue Feldtypen:
- Leihpferd (Zusatzoption) - interner Typ: leihpferd
- Gastbox (Zusatzoption) - interner Typ: gastbox
2. Spezielle UI fuer Addon-Felder: - Keine Pflichtfeld-Option (nicht sinnvoll) - Keine Placeholder-Option (nicht sinnvoll) - Info-Hinweis: "Anzahl und Preis werden im Kurs-Editor konfiguriert"
3. Vereinfachte Kurs-Metabox: - Aktivierungs-Checkboxen entfernt (ueber Buchungsfelder gesteuert) - Nur Max. Anzahl und Preis konfigurierbar - Hinweis auf Buchungsfelder-Editor
4. Neue Prueflogik:
- is_field_active_for_kurs() - prueft ob Feldtyp im Buchungsfelder-Editor aktiv
- Unterstuetzt Produktart-Filter
Betroffene Dateien:
| Datei | Aenderung |
|---|---|
class-settings.php |
Neue Feldtypen + spezielle Render-Logik |
class-leihpferd.php |
is_field_active_for_kurs() + vereinfachte Metabox |
leihpferd.md |
Dokumentation mit 2-Schritt-Anleitung |
Dokumentation: Leihpferd & Gastbox
Abgeschlossene Sprints (Vorlagen + Kommunikation)
Sprint 38: Multi-Channel Benachrichtigungen (26.12.2025)
Ziel: Automatische SMS und WhatsApp Erinnerungen via Twilio/MessageBird
Status: ✅ Erledigt
Umsetzung:
1. Provider-System: - Abstrakte Provider-Klasse mit Factory-Methode - Twilio Implementation (SMS + WhatsApp) - MessageBird Implementation (SMS + WhatsApp) - E.164 Telefonnummer-Formatierung
2. Multi-Channel Settings: - Neues Modul "Multi-Channel Benachrichtigungen" unter Einstellungen → Module - Provider-Auswahl (Twilio/MessageBird) - Provider-Credentials (SID, Token, API-Key) - Verbindungstest mit Guthaben-Anzeige - Pro-Typ Kanal-Konfiguration (Kurserinnerung, Zahlungserinnerung, Mahnungen)
3. Reminder Engine:
- send_sms() und send_whatsapp() Methoden
- Kanal-Routing basierend auf Konfiguration
- SMS-Vorlagen pro Erinnerungstyp (max. 160 Zeichen)
- Test-Modus: An Admin-Telefon statt Kunde
4. REST API:
- GET/POST /customer/{email}/notification-preferences
- Telefonnummer und Kanal-Praeferenzen pro Kunde
5. Customer Portal: - SMS/WhatsApp Block in Einstellungen (nur wenn Modul aktiv) - Telefonnummer-Eingabe mit +49 Format - Kanal-Checkboxen (E-Mail immer aktiv + SMS/WhatsApp optional) - Synchron mit WordPress Modul-Status
Neue Dateien:
- class-sms-provider.php - Abstract Provider
- class-sms-twilio.php - Twilio Implementation
- class-sms-messagebird.php - MessageBird Implementation
- class-multichannel-settings.php - Settings UI
Betroffene Dateien:
- class-settings.php - Modul-UI + Defaults
- class-reminder-settings.php - Multi-Channel UI Integration
- class-reminder-engine.php - send_sms, send_whatsapp
- class-rest-api.php - Notification Preferences Endpoints
- Portal: wordpress_api.py, profile.py, settings.html
Sprint 37: Kommunikationsmodule + DSGVO (26.12.2025)
Ziel: WhatsApp und Newsletter Module, Selbst-Loeschung, Widerrufsbelehrung
Status: ✅ Erledigt
Umsetzung:
1. WhatsApp-Modul: - Einwilligungs-Checkbox im Buchungsformular - Telefonnummer-Konfiguration (+43/+49 Format) - wa.me Link-Badge in Buchungsdetails - Konfigurierbare Checkbox- und Hinweistexte
2. Newsletter-Modul: - Opt-In Checkbox im Buchungsformular - CSV-Export fuer Newsletter-Abonnenten - Deduplizierung nach E-Mail - UTF-8 BOM fuer Excel-Kompatibilitaet - Konfigurierbare Checkbox- und Hinweistexte
3. Selbst-Loeschung (DSGVO Art. 17):
- Gefahrenzone in Portal-Einstellungen
- DELETE-Bestaetigung erforderlich
- Daten werden anonymisiert (nicht geloescht)
- REST API Endpoint /modules/{module}
- Modul kann aktiviert/deaktiviert werden
4. Widerrufsbelehrung als Sub-Tab: - Neuer Sub-Tab unter E-Mail-Vorlagen - Hinweisbox "Rechtlicher Text" - Reset auf Standard moeglich - Nutzt bestehende Option (rueckwaertskompatibel)
Betroffene Dateien:
- class-settings.php - Module-UI + Telefonnummer + Export-Button + Texte
- class-ajax.php - Newsletter CSV-Export Handler
- class-buchung.php - Consent-Anzeige in Admin
- class-rest-api.php - Modul-Status Endpoint
- class-email-template-settings.php - Widerrufsbelehrung Sub-Tab
- templates/booking-form.php - Consent-Checkboxen im Formular
- assets/js/admin.js - Legal Text Reset Funktion
- Portal: profile.py, delete.html, settings.html
Dokumentation: - WhatsApp-Kommunikation - Newsletter-Anmeldung - Datenloeschung (DSGVO)
Sprint 36: Dynamische Vorlagen (25.12.2025)
Ziel: GROUPS und CATEGORIES von hardcoded Konstanten in dynamisches DB-System umwandeln
Status: ✅ Erledigt
Umsetzung: - Eigene Feldgruppen erstellen (fuer Kurs-Editor) - Eigene Kategorien erstellen (fuer Buchungsformular) - System-Vorlagen (10+10) nicht loeschbar - Benutzerdefinierte Vorlagen loeschbar - DB-Migration automatisch bei erstem Aufruf - Editor UI mit Modal-Dialogen
Betroffene Dateien:
- class-field-groups.php - DB-Migration, CRUD-Methoden
- class-settings.php - Neuer Tab "Vorlagen"
- class-ajax.php - AJAX Handler fuer CRUD
Dokumentation: Vorlagen verwalten
Abgeschlossene Sprints (sevDesk Erweiterungen)
Sprint 14: Kategorie-Zuordnung (26.12.2025)
Ziel: sevDesk-Kategorien pro Kurs zuweisen
Status: ✅ Erledigt
Umsetzung:
Modulare Architektur:
- Eigenstaendiges Modul class-sevdesk-categories.php
- Klare Trennung: API-Aufrufe, Caching, Dropdown-Rendering
- Delegiert von class-settings.php und class-sevdesk-settings.php
Features:
- Kategorien-Dropdown in sevDesk → Dienstleistungen Tab
- Automatisches Laden aus sevDesk API (/Category?objectType=Part)
- 1 Stunde Transient-Caching fuer schnelle Ladezeiten
- Refresh-Button (↻) fuer manuelles Neuladen
- AJAX-Handler fuer asynchrones Refresh ohne Seitenneuladen
- Optional: "— Keine Kategorie —" wenn keine Kategorisierung gewuenscht
Neue Klasse: Kurs_Booking_SevDesk_Categories
| Methode | Beschreibung |
|---|---|
get_categories() |
Kategorien abrufen (mit Cache) |
get_categories( true ) |
Kategorien neu laden (Cache umgehen) |
render_dropdown() |
Dropdown mit Refresh-Button rendern |
clear_cache() |
Cache leeren |
ajax_refresh_categories() |
AJAX Handler |
Details: Sprint 14 - Kategorie-Zuordnung
Sprint 13: Varianten-Mapping UI (24.12.2025)
Ziel: Manuelles Verknuepfen von Varianten mit sevDesk-Dienstleistungen
Status: ✅ Erledigt
Umsetzung:
- Neues Modul class-sevdesk-mapping.php
- Metabox im Kurs-Editor mit Dropdown fuer alle sevDesk-Parts
- Manuelle Zuordnung hat Prioritaet vor Auto-Sync
- Details: Sprint 13 - Varianten-Mapping UI
Backup-System (18.12.2025)
Script
Pfad: /opt/backups/server_backup.py
| Befehl | Beschreibung |
|---|---|
backup |
Vollstaendiges Backup erstellen |
list |
Verfuegbare Backups auflisten |
restore |
Wiederherstellung (voll oder selektiv) |
restore -c mariadb postgres |
Nur bestimmte Komponenten |
Komponenten
| Komponente | Beschreibung |
|---|---|
mariadb |
WordPress Datenbank |
postgres |
Customer Portal Datenbank |
redis |
Object Cache |
wordpress |
wp-content Dateien |
video |
Video Storage |
portal |
Customer Portal Code |
help |
Help Service Content |
gitea |
Gitea Daten |
configs |
Caddyfile, Docker Compose, .env |
Features
- Checksummen-Pruefung vor Restore
- Selektive Wiederherstellung einzelner Komponenten
- Alte Daten werden als
.oldgesichert - Interaktive Bestaetigung (oder
--yesfuer Automatisierung)
Systemtests (18.12.2025)
Test-Phasen
| Phase | Bereich | Status |
|---|---|---|
| 1 | WordPress Kurs-Booking | ✅ 14/17 Tests + 2 Fixes |
| 1 | Customer Portal - Kunde | ✅ Alle Tests bestanden |
| 1 | E-Mail-Funktionen | ✅ + 1 Fix |
| 2 | Customer Portal - Admin | ✅ Code-Review bestanden |
| 2 | Sync-Funktionen | ✅ + Daten-Migration |
| 3 | Video Service | ⏳ Optional |
| 3 | Help Service | ⏳ Optional |
Behobene Bugs
| Bug | Schwere | Fix |
|---|---|---|
| Replay-Attack Vulnerability | 🔴 Kritisch | One-Time-Token mit Transients |
| E-Mail Infinite Recursion | 🔴 Kritisch | Direkter Fallback auf Meta-Key |
| BUG-001: E-Mail Default | 🟢 Niedrig | .at → .de im Portal |
| BUG-002: Telefon Default | 🟢 Niedrig | +43 → +49 im Portal |
| BUG-003: Tippfehler | 🟢 Niedrig | "zurueck" → "zurück" |
| BUG-004: Adress-Prefill | 🟡 Mittel | Adressdaten werden vorausgefuellt |
| BUG-005: Token-Timeout | 🟡 Mittel | 15 Min → 60 Min Gueltigkeit |
| BUG-006: Online-Filter | 🟢 Niedrig | Filter bei Online-Angebot entfernt |
Daten-Migration
| Migration | Ergebnis |
|---|---|
| Adress-Parser | 101/119 Kunden migriert |
| MEC Field Mapping | IDs zu lesbaren Namen |
| Telefonnummern-Fix | 18/39 aus Backup repariert |
Live-System
Services
| Service | Domain | Status |
|---|---|---|
| WordPress | kurse.islandpferde-melanieworbs.de | ✅ LIVE |
| Kundenportal | portal.islandpferde-melanieworbs.de | ✅ LIVE |
| Video-Service | videos.islandpferde-melanieworbs.de | ✅ LIVE |
| Help-Service | hilfe.islandpferde-melanieworbs.de | ✅ LIVE |
Sicherheit
- ✅ OTP Rate Limiting (5/Stunde)
- ✅ Session-Timeout (30 Min)
- ✅ CSRF-Schutz (Nonces)
- ✅ One-Time-Token (Replay-Schutz)
- ✅ Turnstile Spam-Schutz
- ✅ Honeypot-Felder
Caching-Stack
| Layer | Funktion |
|---|---|
| Redis Object Cache | DB-Query Caching |
| Nginx FastCGI Cache | HTML ohne PHP |
Abgeschlossene Meilensteine
Sprint 29: Produktart-Wizard (24.12.2025)
- Neues Modul
class-produktart-wizard.phpfuer Produktart-Auswahl - Modal zeigt alle aktiven Produktarten als Karten beim Erstellen
- Weiterleitung zu Editor mit
?produktart=xyzParameter - Dynamische Feldanzeige basierend auf Produktart
- Hinweis-Metabox wenn keine Produktart gewaehlt
- Feldgruppen-Matrix definiert welche Felder pro Produktart benoetigt werden
- Assets:
produktart-wizard.js,produktart-wizard.css,produktart-modal.php
Sprint 30: Buchungsfelder-Accordion (24.12.2025)
- Neues Modul
class-field-categories.phpfuer Feldkategorisierung - Accordion-UI fuer globale Buchungsfelder im Kurs-Editor
- 11 Kategorien (Persoenliche Daten, Adresse, Kontakt, Pferde, etc.)
- Status-Badge pro Kategorie (z.B. "3/4 aktiv")
- "Alle aktivieren/deaktivieren" Buttons
- Kategorie-Dropdown im Feld-Editor (Erweiterte Optionen)
- Auto-Erkennung der Kategorie basierend auf Feldname/Typ
- Accordion-Zustaende werden im Browser gespeichert
Sprint 31: Feldgruppen-Konfiguration (24.12.2025)
- Neues Modul
class-field-groups.phpfuer Feldgruppen-Definition - Neues Modul
class-field-groups-settings.phpfuer Konfiguration-UI - 10 Feldgruppen: Termin, Ort, Zoom, Teilnehmer, Gastboxen, Video, Aufzeichnung, Coaching, Kursleiter, Schulpferd
- Klappbare Zeile pro Dienstleistung mit Checkbox-Grid
- Feldgruppen-Checkboxen werden in Dienstleistungen gespeichert
data-field-groupAttribute in class-kurs.php Metaboxen- Dynamische Feld-Filterung via produktart-wizard.js
- PHP-Config wird an JavaScript uebergeben (wp_localize_script)
- Fallback auf Default-Werte fuer bestehende Produktarten
Sprint 12: Bulk-Sync (24.12.2025)
- Neues Modul
class-sevdesk-bulk-sync.phpfuer Massen-Synchronisation - Neuer Sub-Tab "Synchronisation" in sevDesk-Einstellungen
- Batch-Verarbeitung (5 Kurse pro Batch) mit Fortschrittsanzeige
- Mapping-Tabelle zeigt alle Varianten mit Part-IDs
- Bugfix: Sub-Tab-Speicherproblem (Checkboxen wurden ueberschrieben)
- Neues Pattern: Sub-Tab Pattern
Systemtests + Migration (18.12.2025)
- Phase 1 + 2 Tests komplett durchgefuehrt
- Replay-Attack Vulnerability gefixt (One-Time-Token)
- E-Mail Recursion Bug gefixt
- Kundendaten-Migration (Adressen, MEC Fields)
- Telefonnummern aus Backup wiederhergestellt
Hetzner Deployment (18.12.2025)
- Alle 4 Services erfolgreich deployed
- SSL/HTTPS via Coolify automatisch
- DNS korrekt konfiguriert
- Health-Checks aktiv
Sprint 11: Custom Database Tables (16.12.2025)
- Custom Table
wp_kurs_buchungenmit optimierten Indizes - Repository-Pattern fuer schnelle Abfragen
- Admin-UI fuer Migration mit Fortschrittsbalken
Sprint 10: Kontext-Hilfe-System (16.12.2025)
- Info-Icons mit Tooltips in Admin-UI
- Helper-Methode
render_help_icon()/help_icon()
Sprint 9: Pop-up Neuigkeiten (16.12.2025)
- Marketing-Popup-System fuer Kursbewerbung
- Zufaellige Anzeige aus Kurs-Pool
- Statistiken (Views, Klicks, Schliessungen)
Produktarten-Matrix
| ID | Name | Buchungsart | Terminart |
|---|---|---|---|
| A | Praesenz-Kurs | Direkt | Fix |
| B | Workshop | Direkt | Fix |
| C | Webinar | Direkt | Fix |
| D | Mental Coaching | Direkt | Fix |
| D1 | Einzel-Coaching | Anfrage | Individuell |
| E | Video-Kurs | Direkt | Unbegrenzt |
| F | Video-Paket | Direkt | Unbegrenzt |
| G | Webinar Live | Direkt | Fix |
| H | Workshop Online | Direkt | Fix |
| I | Coaching Online | Anfrage | Individuell |
| J | Online Unterricht | Anfrage | Individuell |
| K | Video-Analyse | Anfrage | - |
| L | Beratung | Anfrage | Individuell |
Plugin-Struktur
kurs-booking/
├── includes/
│ ├── class-kurs.php
│ ├── class-buchung.php
│ ├── class-settings.php
│ ├── class-dienstleistungen.php
│ ├── class-field-filter.php
│ ├── class-field-tree.php
│ ├── class-sevdesk.php
│ └── ...
├── templates/
├── assets/
└── help-service/
Server-Zugang
# SSH
ssh -i ~/.ssh/hetzner_webideen joshko@144.76.167.158
# Coolify Dashboard
http://144.76.167.158:8000
Detaillierte Dokumentation: Siehe Testprotokolle/TEST-MASTER-CHECKLIST.md