# Cabinet Display CMS - Dokumentation

## Übersicht

Das Display CMS ermöglicht die zentrale Verwaltung der Inhalte für die Digital Signage Display-Seite im Cabinet Showroom Bielefeld.

**Einheitlicher Pfad:** Das System nutzt `public/_cabinet/` für Testserver und Live-Server.

## Zugriff

### Testserver
- **Display:** `http://portal.b2in.test/_cabinet/`
- **CMS:** `http://portal.b2in.test/admin/cms/cabinet`
- **API:** `http://portal.b2in.test/api/display/config`

### Live-Server
- **Display:** `https://cabinet.b2in.eu/` (Subdomain zeigt auf `/_cabinet/`)
- **CMS:** `https://b2in.eu/admin/cms/cabinet`
- **API:** `https://b2in.eu/api/display/config`

## Funktionen

### 1. Video-Verwaltung
- ✅ Videos aus dem `public/_cabinet/assets/` Ordner verwalten
- ✅ Reihenfolge per Pfeiltasten ändern
- ✅ Video-Position (0-100%) für optimalen Bildausschnitt einstellen
- ✅ Videos aktivieren/deaktivieren
- ✅ Titel für bessere Übersicht vergeben

### 2. Footer-Content-Verwaltung mit Tracking
- ✅ Überschrift, Unterzeile und **optional** Ziel-URL eingeben
- ✅ **Automatische Short-Link-Generierung** (nur wenn URL angegeben)
- ✅ **Echtzeit-Klick-Tracking** über Short-Links
- ✅ **Klick-Statistiken** direkt im CMS
- ✅ **Ohne URL:** Nur Text wird angezeigt, kein QR-Code
- ✅ **Mit URL:** QR-Code mit Short-Link wird automatisch generiert
- ✅ Reihenfolge ändern (werden alle 30 Sekunden rotiert)
- ✅ Inhalte aktivieren/deaktivieren
- ✅ Short-Code neu generieren
- ✅ Klick-Zähler zurücksetzen

### 3. Short-Link-System

#### Wie funktioniert es?

**Mit URL (QR-Code wird angezeigt):**
1. **Beim Erstellen** mit URL wird automatisch ein 6-stelliger Short-Code generiert (z.B. `c59kjb`)
2. **Short-URL** wird automatisch erstellt:
   - Testserver: `http://portal.b2in.test/_cabinet/go.php?z=c59kjb`
   - Live-Server: `https://cabinet.b2in.eu/go.php?z=c59kjb`
3. **QR-Code** auf dem Display zeigt die Short-URL
4. **Bei Klick** wird der User zur Original-URL weitergeleitet
5. **Klicks werden gezählt** und im CMS angezeigt

**Ohne URL (nur Text):**
1. **Beim Erstellen** ohne URL wird kein Short-Code generiert
2. **Nur Text** wird im Footer angezeigt (Überschrift + Unterzeile)
3. **Kein QR-Code** wird angezeigt
4. **Text-Bereich** nutzt die volle Breite des Footers

#### Vorteile

- ✅ Kürzere URLs für bessere QR-Codes
- ✅ Automatisches Tracking aller Scans
- ✅ Zentrale Verwaltung aller Links
- ✅ Statistiken direkt im CMS
- ✅ Links können geändert werden ohne QR-Code neu zu generieren
- ✅ Funktioniert identisch auf Test- und Live-Server

## CMS-Interface

### Video-Playlist

```
┌─────────────────────────────────────────────┐
│ Video-Playlist                        [+]   │
├─────────────────────────────────────────────┤
│ ↑↓ [Aktiv] Herbst 2025                     │
│    📁 herbst_2025.mp4 📍 Position: 25%      │
│    [👁] [✏] [🗑]                            │
├─────────────────────────────────────────────┤
│ ↑↓ [Aktiv] Frühjahr 2025                   │
│    📁 fruehjahr_2025.mp4 📍 Position: 10%   │
│    [👁] [✏] [🗑]                            │
└─────────────────────────────────────────────┘
```

### Footer-Inhalte

```
┌─────────────────────────────────────────────┐
│ Footer-Inhalte                        [+]   │
│ 📊 Gesamt-Klicks: 47                        │
├─────────────────────────────────────────────┤
│ ↑↓ [Aktiv] Beratung & Termin [🔵 23 Klicks]│
│    Jetzt Termin vereinbaren.                │
│    🔗 c59kjb [📋 Short-Link]                │
│    🔗 https://www.cabinet.de/bielefeld...   │
│    [👁] [⋮]                                 │
│         ├─ Bearbeiten                       │
│         ├─ Short-Code neu generieren        │
│         ├─ Klicks zurücksetzen              │
│         └─ Löschen                          │
└─────────────────────────────────────────────┘
```

## Technische Details

### Ordnerstruktur

```
public/_cabinet/
├── index.html          # Display-Seite (lädt dynamisch via API)
├── go.php              # Short-Link-Handler mit Tracking
├── assets/             # Video-Dateien
│   ├── herbst_2025.mp4
│   ├── fruehjahr_2025.mp4
│   └── ...
└── clicks.log          # Tracking-Log (wird automatisch erstellt)
```

### Datenbank-Tabellen

#### `display_videos`
```sql
- id (PK)
- filename            -- Dateiname des Videos
- title              -- Optionaler Titel
- position           -- Vertikale Position (0-100%)
- sort_order         -- Reihenfolge der Wiedergabe
- is_active          -- Aktiv/Inaktiv
- created_at, updated_at
```

#### `display_footer_contents`
```sql
- id (PK)
- headline           -- Überschrift
- subline            -- Unterzeile
- url                -- Original-Ziel-URL
- short_code         -- 6-stelliger eindeutiger Code
- clicks             -- Anzahl der Klicks
- sort_order         -- Reihenfolge der Anzeige
- is_active          -- Aktiv/Inaktiv
- created_at, updated_at
```

### Konfiguration

**Datei:** `config/display.php`

```php
'base_path' => env('DISPLAY_BASE_PATH', '_cabinet'),
'subdomain' => env('DISPLAY_SUBDOMAIN', null),
'domain' => env('DISPLAY_DOMAIN', 'b2in.eu'),
```

**Umgebungsvariablen (.env):**

```env
# Testserver
DISPLAY_BASE_PATH=_cabinet
DISPLAY_SUBDOMAIN=
DISPLAY_DOMAIN=b2in.test

# Live-Server
DISPLAY_BASE_PATH=_cabinet
DISPLAY_SUBDOMAIN=cabinet
DISPLAY_DOMAIN=b2in.eu
APP_ENV=production
```

### API-Response-Format

**Endpunkt:** `/api/display/config`

```json
{
  "videoPlaylist": [
    {
      "src": "assets/herbst_2025.mp4",
      "position": 25
    }
  ],
  "footerContent": [
    {
      "headline": "Beratung & Termin",
      "subline": "Jetzt Termin vereinbaren.",
      "url": "https://cabinet.b2in.eu/go.php?z=c59kjb"
    }
  ]
}
```

## Workflow-Beispiele

### Neuen Footer-Inhalt hinzufügen

1. Im CMS auf **"Inhalt hinzufügen"** klicken
2. Formular ausfüllen:
   - Überschrift: "Beratung & Termin"
   - Unterzeile: "Jetzt Termin vereinbaren."
   - URL: `https://www.cabinet.de/bielefeld?utm_source=...`
3. **Speichern**
4. ✅ Short-Code wird automatisch generiert (z.B. `c59kjb`)
5. ✅ Short-URL wird erstellt: `https://cabinet.b2in.eu/go.php?z=c59kjb`
6. ✅ Display lädt neue Konfiguration (max. 5 Minuten)
7. ✅ QR-Code zeigt automatisch den Short-Link
8. ✅ Klicks werden gezählt und angezeigt

### Video hinzufügen

1. Video-Datei in `public/_cabinet/assets/` hochladen
2. Im CMS auf **"Video hinzufügen"** klicken
3. Video aus Dropdown auswählen
4. Titel vergeben (optional)
5. Position einstellen (0-100%)
6. **Speichern**
7. ✅ Video wird zur Playlist hinzugefügt
8. ✅ Display spielt Video ab

### Klick-Statistiken ansehen

1. Im CMS unter **"Footer-Inhalte"** öffnen
2. Bei jedem Inhalt wird die Anzahl der Klicks angezeigt
3. **Gesamt-Klicks** werden oben summiert angezeigt
4. Zum Zurücksetzen: **⋮ → Klicks zurücksetzen**

### Short-Code neu generieren

1. Bei gewünschtem Footer-Inhalt auf **⋮** klicken
2. **"Short-Code neu generieren"** wählen
3. ✅ Neuer Code wird erstellt
4. ⚠️ Alter Code funktioniert nicht mehr
5. ✅ QR-Code aktualisiert sich automatisch beim nächsten Reload

## Logging

### Datenbank-Tracking (Primär)
- Alle Klicks werden in der Datenbank gezählt
- Echtzeit-Statistiken im CMS
- Auswertungen nach Inhalt möglich

### Datei-Logging (Backup)
- Zusätzliches Log: `public/_cabinet/clicks.log`
- Format: `YYYY-MM-DD HH:MM:SS - Code: c59kjb - Headline: ... - URL: ...`
- Nützlich für detaillierte Analysen

**Log ansehen:**
```bash
tail -f public/_cabinet/clicks.log
```

## Wartung & Backup

### Wichtige Daten für Backup
- **Datenbank:** `display_videos`, `display_footer_contents`
- **Video-Dateien:** `public/_cabinet/assets/`
- **Tracking-Log:** `public/_cabinet/clicks.log`

### Videos hinzufügen
```bash
# Upload via SCP
scp video.mp4 user@server:/var/www/html/public/_cabinet/assets/

# Oder via FTP/SFTP
# Dann im CMS hinzufügen
```

### Cache leeren
```bash
php artisan config:clear
php artisan cache:clear
php artisan route:clear
```

## Troubleshooting

### Display zeigt "LADEN..."
**Problem:** API nicht erreichbar  
**Lösung:** Browser-Console (F12) prüfen, API-URL testen

### Short-Links funktionieren nicht
**Problem:** Datenbankverbindung oder Berechtigungen  
**Lösung:** `go.php` Berechtigungen prüfen, Logs prüfen

### Klicks werden nicht gezählt
**Problem:** Datenbankupdate fehlgeschlagen  
**Lösung:** `clicks.log` prüfen, Datenbank-Logs prüfen

### Videos werden nicht abgespielt
**Problem:** Falsches Format oder Pfad  
**Lösung:** Browser-Console prüfen, `.mp4` mit H.264 verwenden

## Performance-Tipps

### Video-Optimierung
```bash
# FFmpeg für kleinere Dateien
ffmpeg -i input.mp4 -c:v libx264 -crf 23 \
       -preset medium -c:a aac -b:a 128k output.mp4
```

### Auto-Reload
- Display lädt alle 5 Minuten neue Konfiguration
- Für sofortiges Update: Display-Seite neu laden

## Support & Dokumentation

- **Setup-Guide:** `DISPLAY_SETUP_LIVE.md`
- **ENV-Variablen:** `ENV_VARIABLES_DISPLAY.md`
- **Laravel-Logs:** `storage/logs/laravel.log`
- **Tracking-Log:** `public/_cabinet/clicks.log`

Bei Problemen:
1. Logs prüfen
2. Browser-Console prüfen
3. API manuell testen
4. Cache leeren
