Sprint-Uebersicht

Aktueller Entwicklungsstand und Sprint-Status

Sprints Entwicklung Status Roadmap

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 .old gesichert
  • Interaktive Bestaetigung (oder --yes fuer 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.php fuer Produktart-Auswahl
  • Modal zeigt alle aktiven Produktarten als Karten beim Erstellen
  • Weiterleitung zu Editor mit ?produktart=xyz Parameter
  • 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.php fuer 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.php fuer Feldgruppen-Definition
  • Neues Modul class-field-groups-settings.php fuer 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-group Attribute 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.php fuer 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_buchungen mit 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

Inhalt