# Config Reference (`config.php`)

`config.php` wird nicht versioniert. Vorlage: `config.sample.php` (auf dem Server nach `config.php` kopieren und anpassen).

## Relevante Konstanten

| Konstante | Zweck |
|---|---|
| `SITE_NAME` | Primärer Markenname in Oberfläche und Mails |
| `SITE_SERVICE_NAME` | Servicename für Fließtexte, Betreffzeilen und textliche Verweise |
| `SITE_SERVICE_HEADER` | Service-Bezeichnung für Header, Seitentitel und sichtbare Überschriften |
| `SITE_DEPARTMENT_NAME` | Fachbereichskennzeichnung für Footer und Kommunikation |
| `SITE_ADDRESS_LINE` | Postanschrift des verantwortlichen Amts im Footer |
| `SITE_IMPRINT_URL` | Ziel-URL für den Impressumslink |
| `SITE_PRIVACY_URL` | Ziel-URL für den Datenschutzlink |
| `SITE_FULL_NAME` | Kombinierter Anzeigename aus Marke und Service-Header |
| `SITE_URL` | Basispfad oder Basis-URL für Links und Assets |
| `SITE_CANONICAL_ORIGIN` | Optional: `https://hostname` (ohne Pfad) für absolute E-Mail-Links, falls `HTTP_HOST` unzuverlässig ist |
| `ADMIN_LOGIN_RATE_LIMIT_MAX` | Optional: max. fehlgeschlagene Admin-Logins pro IP und Zeitfenster (Standard: 10) |
| `ADMIN_LOGIN_RATE_LIMIT_WINDOW` | Optional: Zeitfenster in Sekunden für Admin-Login-Limit (Standard: 900) |
| `CHECKOUT_RATE_LIMIT_MAX` | Optional: max. Checkout-Versuche pro IP und Fenster (Zähler erst nach erfolgreich gespeicherter Bestellung; Standard: 30) |
| `CHECKOUT_RATE_LIMIT_WINDOW` | Optional: Zeitfenster in Sekunden für Checkout-Limit (Standard: 3600) |
| `DISCLAIMER_LINES` | Hinweistext auf der Startseite |
| `ORDER_PREFIX` | Präfix für Bestellnummern |
| `ORDER_RECIPIENT_EMAIL` | Standard-Empfänger für interne Bestellmails |
| `ATTACH_ORDER_PDF_TO_ADMIN_EMAIL` | Standard, ob interne Bestellmails ein PDF erhalten |
| `ADMIN_EMAIL` | Fallback für Admin-Profile ohne gültige Mailadresse |
| `FROM_EMAIL` | Absenderadresse ausgehender Mails |
| `FROM_NAME` | Anzeigename ausgehender Mails |
| `DATA_DIR` | Verzeichnis für JSON-Daten und Unterordner (`data/`) |
| `UPLOADS_DIR` | Verzeichnis für Produktbilder (`data/uploads/`) |
| `UPLOADS_URL` | Öffentliche URL-Basis für Uploads (`SITE_URL` + `/data/uploads`) |
| `PRODUCTS_FILE` | JSON-Datei für Produkte |
| `ORDERS_FILE` | JSON-Datei für Bestellungen |
| `ORGANIZATIONS_FILE` | JSON-Datei für Organisationen |
| `SETTINGS_FILE` | JSON-Datei für im Admin veränderbare Systemeinstellungen |
| `ADMINS_FILE` | JSON-Datei für Adminkonten |
| `CATEGORIES_FILE` | JSON-Datei für Kategorien |
| `FAQ_FILE` | JSON-Datei für FAQ-Inhalte |
| `MANUAL_BACKORDERS_FILE` | JSON-Datei für manuelle Nachbestell-Einträge (ohne Bestellbezug) |
| `BACKUP_DIR` | Lokales Verzeichnis für Daten-Backups (Standard: `DATA_DIR . 'backups/'`) |
| `BACKUP_LOCAL_RETENTION` | Anzahl lokal aufzubewahrender Backup-ZIPs (Standard: 4) |
| `BACKUP_AUTO_INTERVAL_SECONDS` | Intervall für Backups durch Admin-Aktivität (Standard: 604800 = wöchentlich; 0 deaktiviert) |
| `BACKUP_REMOTE_TARGETS` | Optionale Remote-Ziele für Backup-Uploads (`s3`, `sftp`, `custom`, `managed`) |

## Runtime (`data/settings.json`)

Im Admin unter **Einstellungen** überschreibbar (schreibt `data/settings.json`):

- `order_recipient_email` — Empfänger interner Bestellmails (hat Vorrang vor `ORDER_RECIPIENT_EMAIL`)
- `attach_order_pdf_to_admin_email` — PDF-Anhang an interne Bestellmails

Der Startseiten-Introtext wird unter **FAQ** gepflegt (`startpage_intro_text` in derselben Datei). Beim Speichern der Einstellungen bleibt der Introtext erhalten.

## Rate limits und Logging

- Rate-Limit-Zähler liegen unter `data/ratelimit/` (wird bei Bedarf angelegt).
- Wenn das Verzeichnis nicht beschreibbar ist, gelten Limits als **nicht aktiv** (Anfragen werden zugelassen — Verfügbarkeit auf Shared Hosting).
- Zugriffs- und Fehlerprotokolle: `data/logs/` (siehe `logAccess` / `logError` in `includes/functions.php`).
- Logs werden ab `LOG_MAX_BYTES` rotiert, es bleiben `LOG_KEEP_FILES` rotierte Dateien erhalten, und rotierte Logs älter als `LOG_MAX_AGE_SECONDS` werden entfernt.

## Backups

- Manuelle Backups werden im Admin unter **Einstellungen** erstellt.
- Automatische Backups werden nur durch Admin-Aktivität auf der Einstellungsseite ausgelöst, wenn das konfigurierte Intervall abgelaufen ist.
- Backups enthalten `data/*.json` und `data/uploads/**`; App-Dateien, Logs, Updates, Rate-Limits und bestehende Backups werden ausgeschlossen.
- SFTP benötigt die optionale PHP-SSH2-Erweiterung. Ohne Erweiterung bleibt das lokale Backup gültig, der Remote-Upload wird als fehlgeschlagen protokolliert.
- Zugangsdaten für Remote-Ziele gehören in `config.php`, nicht in `data/settings.json`.
- Details und Beispiele: [Backup-Konfiguration](BACKUP_CONFIGURATION.md).

## Hinweis

Die Konstanten definieren die Startwerte. Änderbare Betriebsparameter wie interne Empfängeradresse können zusätzlich im Adminbereich unter `Einstellungen` angepasst werden.
