# ITSWEBER CMS

Ein modernes, leichtgewichtiges PHP-CMS für kleine bis mittlere Webseiten.

## Features
- Web-Installer für einfache Einrichtung (mit Starter-Content für Demos)
- Professionelles Admin-Backend
- Seiten-, Blog-, Galerie-, Event- und Medienverwaltung
- Flexibles Menüsystem (Hauptmenü, Footer-Menü)
- Theme-System mit mehreren mitgelieferten Themes (Default, Business, Creative, ITSWEBER)
- SEO-Grundfunktionen (Meta-Tags, Breadcrumbs, OG-Tags, Twitter Cards)
- Globales Branding-System (Logo-Upload, Mediathek-Picker, CSS-Darstellungsmodus)
- Site-Backup & Restore (ZIP mit DB-Dump + Uploads, gehärtete Validierung, Wartungsmodus)
- CMS-Updater (Preflight-Check, geschützte Pfade, deterministische Migrations-Reihenfolge, Wartungsmodus)
- Cookie-Consent-Management (DSGVO-konform, standardmäßig deaktiviert)
- Kontaktformular mit Spam-Schutz (CSRF + Honeypot)
- Passwort-Reset per E-Mail (Token-basiert, 1h TTL)
- WebP-Bildoptimierung und Thumbnail-Erzeugung
- WYSIWYG-Editor (jodit) für Seiten und Blog-Beiträge
- Bildupload und Medienverwaltung mit Ordnern

## Anforderungen
- PHP 8.1+
- MySQL 5.7+ / MariaDB 10.3+
- Apache mit mod_rewrite oder Nginx
- PHP-Extensions: `pdo_mysql`, `mbstring`, `gd`, `json`, `fileinfo`, `zip` (für Backup/Restore)
- **Kein** `intl`-Extension erforderlich

## Installation
1. Dateien auf den Webserver hochladen
2. Document Root auf `public/` setzen
3. `/installer` im Browser aufrufen
4. Installationsschritte (7 Schritte) durchlaufen
5. Im Admin-Backend anmelden: `/admin`

## Projektstruktur
```
app/               Core-Logik, Models, Services, Config, HTTP-Layer
  Config/          Routing-, Datenbank- und App-Konfiguration
  Core/            Bootstrap, Router, DB, View, Auth, Session, CSRF
  Helpers/         Globale Hilfsfunktionen (e(), slugify(), etc.)
  Http/            Controllers und Middleware
  Models/          Active-Record-ähnliche Model-Klassen
admin/             Backend-Interface (Controller, Views, Assets)
installer/         Web-Installer (Controller, Views, Steps)
public/            Document Root – einziger per Webserver erreichbarer Bereich
  themes/          Statische Theme-Assets (CSS/JS/Images) per HTTP erreichbar
  admin/assets/    Admin-CSS und -JS per HTTP erreichbar
  installer/assets/ Installer-CSS per HTTP erreichbar
  uploads/         Hochgeladene Dateien
themes/            Theme-Quellverzeichnisse (Templates + Asset-Quellen)
storage/           Cache, Logs, Sessions, temporäre Dateien
database/          Migrations und Seeds
docs/              Projektdokumentation und Architekturentscheidungen
```

## Asset-Strategie
Statische Dateien (CSS, JS, Bilder) müssen innerhalb von `public/` liegen, damit der Webserver sie direkt ausliefern kann. Theme-Assets werden deshalb unter `public/themes/{name}/assets/` abgelegt. Alle asset-Unterverzeichnisse enthalten eine `.htaccess`, die PHP-Ausführung blockiert.

Nach jeder Asset-Änderung Spiegel synchronisieren:
```bash
bash sync-assets.sh          # alle Paare kopieren
bash sync-assets.sh --check  # nur auf Unterschiede prüfen
php tools/check-asset-sync.php  # Alternative für Umgebungen ohne Bash
```

## Mail-Konfiguration

Der Installer (Step 6) konfiguriert die Mail-Einstellungen direkt. Nach der Installation können die Werte in `app/Config/app.php` angepasst werden.

### PHP mail() (Standard)
```php
'mail' => [
    'transport'    => 'mail',
    'from_address' => 'noreply@yourdomain.com',
    'from_name'    => 'Your Site Name',
    'reply_to'     => '',
],
```
Der Server muss eine funktionierende MTA haben (PHP `mail()` muss Mails versenden können).

### SMTP
```php
'mail' => [
    'transport'       => 'smtp',
    'from_address'    => 'noreply@yourdomain.com',
    'from_name'       => 'Your Site Name',
    'reply_to'        => '',
    'smtp_host'       => 'smtp.example.com',
    'smtp_port'       => 587,          // 587 (STARTTLS), 465 (SSL), 25 (plain)
    'smtp_username'   => 'user@example.com',
    'smtp_password'   => 'secret',
    'smtp_encryption' => 'tls',        // 'tls' | 'ssl' | 'none'
],
```
SMTP wird über einen nativen PHP-Client abgewickelt (kein PHPMailer, kein Composer). Unterstützt STARTTLS (Port 587), Implicit TLS/SMTPS (Port 465) und Plain (Port 25).

## Lizenz
Proprietär – © ITSWEBER. Alle Rechte vorbehalten.
