Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 160 additions & 0 deletions AUTO_BLOCKING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# Auto-Blocking für manuell eingefügtes HTML

## Übersicht

Das Inline-Consent-System kann jetzt automatisch Scripts, iframes und Divs erkennen und blocken, die mit speziellen `data-consent-*` Attributen versehen sind.

**✅ Neu in Version 5.3.0:**
- Automatisches Scannen und Blocken von externem Code
- Einfache Aktivierung über die Einstellungen
- Code-Assistent zum Vorbereiten von Scripts/iframes
- Keine PHP-Kenntnisse erforderlich

## Aktivierung

### 1. Auto-Blocking aktivieren

**Backend:** `Consent Manager → Einstellungen`

✅ **Auto-Blocking für manuell eingefügtes HTML** aktivieren

### 2. Code-Assistent nutzen (empfohlen)

**Direkt in den Einstellungen:** Button **"Code-Assistent öffnen"** klicken

Copy link

Copilot AI Jan 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Die Doku sagt hier, dass der Code-Assistent „direkt in den Einstellungen“ per Button verfügbar ist. In der aktuellen pages/config.php-Änderung wird aber nur das Checkbox-Setting hinzugefügt, ohne Modal/Button. Bitte Doku an die tatsächliche UI anpassen (z.B. auf die Editorial-Seite verweisen) oder den Assistant auch im Config-Screen implementieren.

Copilot uses AI. Check for mistakes.
Der interaktive Assistent öffnet sich als Modal und hilft beim Vorbereiten von externem Code:
1. Original-Code einfügen
2. Service aus Dropdown auswählen (oder eigenen eingeben)
3. Optional: Anbieter, Datenschutz-URL, Titel, Platzhalter-Text
4. **Code generieren** klicken
5. Generierter Code kopieren und einfügen
Copy link

Copilot AI Jan 26, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Die Doku beschreibt den Code-Assistenten als Teil der Einstellungen („Direkt in den Einstellungen“). In der aktuellen Implementierung ist der Assistent jedoch nur auf der neuen Editorial-Seite vorhanden (pages/editorial.php) und nicht in pages/config.php. Bitte Doku und Implementierung angleichen (Assistent auch in Config integrieren oder den Abschnitt/Workflow entsprechend anpassen).

Copilot uses AI. Check for mistakes.

**Hinweis:** Redakteure können nur aus bereits angelegten Services wählen. Admins können über "Eigenen Service-Schlüssel eingeben" auch neue Services verwenden (müssen diese aber später in den Einstellungen anlegen).

## Manuelle Verwendung

### 1. HTML mit data-consent-Attributen markieren

Fügen Sie folgende Attribute zu externen Scripts/iframes hinzu:

```html
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
width="560" height="315"
data-consent-block="true"
data-consent-service="youtube"
data-consent-provider="YouTube"
data-consent-privacy="https://policies.google.com/privacy"
data-consent-title="Video abspielen"></iframe>
```

### 2. Pflicht-Attribute

- **`data-consent-block="true"`** - Aktiviert das Blocking (Pflicht)
- **`data-consent-service="servicekey"`** - Service-Schlüssel aus dem Consent Manager (Pflicht)

### 3. Optionale Attribute

- **`data-consent-provider="Name"`** - Anbieter-Name (z.B. "YouTube")
- **`data-consent-privacy="URL"`** - Link zur Datenschutzerklärung
- **`data-consent-title="Titel"`** - Titel für den Placeholder
- **`data-consent-text="Text"`** - Individueller Platzhalter-Text (z.B. "Zur Buchung verwenden wir diesen Dienst. Bitte stimmen Sie zu.")

### 4. Automatisches Scannen aktivieren

~~Fügen Sie in Ihrem Template den Scanner hinzu:~~ **NICHT MEHR NÖTIG!**

Das Auto-Blocking wird automatisch aktiviert, sobald die Einstellung in `Consent Manager → Einstellungen` aktiviert ist. Kein Template-Code erforderlich!

~~```php
<?php
// Am Ende des Templates, vor </body>
if (class_exists('\FriendsOfRedaxo\ConsentManager\InlineConsent')) {
// CSS/JS einbinden
echo \FriendsOfRedaxo\ConsentManager\InlineConsent::getCSS();
echo \FriendsOfRedaxo\ConsentManager\InlineConsent::getJavaScript();
}
?>
```~~

~~Und verwenden Sie den OUTPUT_FILTER zum automatischen Scannen:~~ **BEREITS INTEGRIERT!**

~~```php
<?php
// In boot.php des Project-Addons oder im Template
rex_extension::register('OUTPUT_FILTER', function(rex_extension_point $ep) {
$content = $ep->getSubject();

if (class_exists('\FriendsOfRedaxo\ConsentManager\InlineConsent')) {
$content = \FriendsOfRedaxo\ConsentManager\InlineConsent::scanAndReplaceConsentElements($content);
}

return $content;
});
?>
```~~

✅ **Der OUTPUT_FILTER ist bereits in der boot.php integriert** - einfach in den Einstellungen aktivieren!

## Beispiele

### YouTube Video

```html
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
width="560" height="315"
data-consent-block="true"
data-consent-service="youtube"
data-consent-provider="YouTube"
data-consent-privacy="https://policies.google.com/privacy"
data-consent-title="Video abspielen"></iframe>
```

### Calendly Widget

```html
<div data-consent-block="true"
data-consent-service="calendly"
data-consent-provider="Calendly"
data-consent-privacy="https://calendly.com/privacy">
<script src="https://assets.calendly.com/assets/external/widget.js"></script>
</div>
```

### Custom iframe

```html
<iframe src="https://example.com/widget"
width="100%"
height="500"
data-consent-block="true"
data-consent-service="custom-widget"
data-consent-provider="Example Inc."
data-consent-privacy="https://example.com/privacy"
data-consent-title="External Widget"></iframe>
```

## Service im Consent Manager anlegen

Vergessen Sie nicht, den Service (z.B. "youtube") im Consent Manager zu konfigurieren:

1. **Consent Manager → Cookies**
2. **Neuen Cookie anlegen**
3. **Service-Schlüssel:** `youtube` (muss mit `data-consent-service` übereinstimmen)
4. **Service-Name:** YouTube
5. **Cookie-Gruppe** zuweisen (z.B. "Marketing" oder "Externe Medien")

## Vorteile

✅ **Automatisch** - Kein manueller PHP-Code nötig
✅ **Flexibel** - Funktioniert mit Scripts, iframes und Divs
✅ **DSGVO-konform** - Inhalte werden erst nach Zustimmung geladen
✅ **Benutzerfreundlich** - Klare Platzhalter mit Anbieter-Infos
✅ **Einfach** - Nur Attribute im HTML hinzufügen

## Technische Details

- Der Scanner läuft über einen OUTPUT_FILTER
- Regex-Pattern erkennt Tags mit `data-consent-block="true"`
- Tags werden durch `InlineConsent::doConsent()` Platzhalter ersetzt
- Original-Tags werden im Platzhalter gespeichert
- Nach Consent-Erteilung werden die Original-Tags geladen
49 changes: 33 additions & 16 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,43 @@
# REDAXO consent_manager - Changelog

## Version 5.3.0 - 25.01.2026
## Version 5.3.0 - 26.01.2026

**🚀 Release-Highlights:**
Setup-Wizard für Erstkonfiguration, Domain-spezifische Themes mit Live-Preview, moderne Theme-Vorschau mit 32 Varianten, Google Consent Mode v2 Optimierungen, vollständiges Security-Audit mit CSP-Nonce-Schutz, Multi-Language-Verbesserungen mit editierbaren Script-Feldern, automatische Frontend-Einbindung per Domain-Option mit Template-Positivliste, erweiterte Debug-Tools mit Cookie-Analyse und Performance-Optimierungen.
Setup-Wizard für Erstkonfiguration, Domain-spezifische Themes mit Live-Preview, moderne Theme-Vorschau mit 32 Varianten, Google Consent Mode v2 Optimierungen, vollständiges Security-Audit mit CSP-Nonce-Schutz, Multi-Language-Verbesserungen mit editierbaren Script-Feldern, automatische Frontend-Einbindung per Domain-Option mit Template-Positivliste, erweiterte Debug-Tools mit Cookie-Analyse, Performance-Optimierungen, und neue Editorial-Seite für Redakteure mit Snippet-Manager und Auto-Blocking-Assistent.

---

### 🧙 Setup-Wizard (NEU)

Interaktiver Setup-Assistent für schnelle Erstkonfiguration:
- **Quickstart-Button** mit animiertem Farbverlauf-Rahmen auf der Konfigurationsseite
- **4-Schritt-Wizard**: Domain einrichten → Services importieren → Theme auswählen → Fertig
- **Animierte Loading-Anzeige** mit Wellen-Animation und pulsierenden Punkten
- **YRewrite-Integration**: Automatische Auswahl aus vorhandenen YRewrite-Domains
- **Auto-Inject-Option**: Toggle-Switch für automatische Frontend-Einbindung
- **Template-Positivliste**: Multi-Select für Auswahl aktiver Templates, in denen Consent Manager eingebunden werden soll
- **Standard/Minimal Setup**: Auswahl zwischen 25 vorkonfigurierten Services oder nur notwendigen Cookies
- **Duplikat-Prävention**: Überspringt bereits vorhandene Services automatisch
- **Success-Screen mit Animation**: "HEUREKA!"-Banner mit Blau-Grün-Gradient und animiertem Emoji
- **Code-Generator**: Fertiger Footer-Link-Code zum Kopieren mit `data-consent-action="settings"` (empfohlen)
- **Required Group Assignment**: Die "Technisch notwendig"-Gruppe wird automatisch der neuen Domain zugeordnet
### 📝 Editorial-Seite für Redakteure (NEU)

Neue dedizierte Seite für Redakteure ohne Admin-Rechte:
- **Moderne Card-basierte UI** mit Bootstrap 3 Farben und REDAXO-Design
- **Code-Snippet-Manager**: Speichern, Laden und Verwalten von häufig genutzten Consent-Codes im Browser LocalStorage
- **Auto-Blocking-Assistent**: Interaktives Modal zum automatischen Hinzufügen von data-consent-Attributen zu externem Code (YouTube, Maps, Calendly, etc.)
- **Service-Dropdown**: Auswahl aus bereits konfigurierten Services + Custom-Option für neue Services
- **Metadata-Felder**: Provider, Datenschutz-URL, Titel und Custom-Text für Platzhalter
- **Copy-to-Clipboard**: Ein-Klick-Kopieren des generierten Codes
- **Snippet-Verwaltung**: Benennung, Metadaten und Löschfunktion für gespeicherte Snippets
- **Akkordeon-Bereiche**: "So funktioniert's", "Service nicht in Liste?", "Datenschutzerklärung nicht vergessen!"
- **Issue-Tracker-Integration**: Falls installiert, direkte Links zum Melden fehlender Services
- **Admin-Info-Panel**: Admins können wichtige Hinweise für Redakteure hinterlegen (HTML-Support)
- **CKE5-Integration-Anleitung**: Schritt-für-Schritt-Anleitung für die Nutzung im Editor
- **Responsive Layout**: 2/3 Snippets, 1/3 Service/Datenschutz auf Desktop
- **Dark Theme Support**: Vollständige Unterstützung für REDAXO Dark Theme und prefers-color-scheme
- **Berechtigung**: `consent_manager[editorial]` für Zugriff ohne Admin-Rechte
- **Benutzerführung**: Klare Hinweise zu richtiger vs. falscher Verwendung (Content vs. Head/Footer)

### 🔧 Inline-Consent & Auto-Blocking

Erweiterte Funktionen für manuelle Content-Integration:
- **data-consent-text Attribut**: Individueller Platzhalter-Text pro Element (z.B. "Wir wollen was buchen")
- **Custom Privacy Notice**: Wird in Fragment `inline_placeholder.php` als `$options['privacy_notice']` übergeben
- **Script-Ausführung-Fix**: Recreate-Strategie für <script>-Tags nach Consent (Browser Security Workaround)
- **data-consent-* Attribute-Entfernung**: Verhindert Re-Blocking durch OUTPUT_FILTER nach Consent
- **Regex-basiertes Scanning**: `scanAndReplaceConsentElements()` findet automatisch blockierte Elemente
- **UIKit-Theme-Kompatibilität**: Transparent Backgrounds, currentColor, inherit für .uk-light/.uk-dark Support
- **Backdrop-Filter**: Moderner Glaseffekt für Platzhalter
- **Console Debugging**: Detaillierte Logs für Script-Ausführung und Consent-Events
- **Rexstan-konform**: Alle Checks bestanden, strikte Boolean-Vergleiche, Long Ternary

### 🎨 Domain-spezifische Themes

Expand Down
48 changes: 48 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ Das AddOn stellt eine **DSGVO-konforme Lösung** für die Einholung von Einverst
- ✅ Automatische Frontend-Einbindung (Auto-Inject)
- ✅ CKE5 oEmbed Integration (YouTube, Vimeo, etc.)
- ✅ Sprachspezifische Scripts mit automatischem Fallback
- ✅ Auto-Blocking für manuell eingefügtes HTML (Scripts, iFrames, Embeds)
- ✅ **Editorial-Seite** für Redakteure mit Code-Assistent und Snippet-Manager (NEU)
- ✅ **Custom Platzhalter-Texte** pro Element mit `data-consent-text` Attribut (NEU)

![Screenshot](https://github.com/FriendsOfREDAXO/consent_manager/blob/assets/consent_manager.png?raw=true)

Expand Down Expand Up @@ -184,6 +187,51 @@ Für DSGVO-Konformität muss ein Link zu den Cookie-Einstellungen im Footer plat
- Einzelne Unterseiten mit Videos/Maps
- Progressive Consent (nur bei Bedarf)

### Auto-Blocking für manuell eingefügtes HTML

**Auto-Blocking** scannt automatisch das Frontend-HTML und wandelt externe Scripts, iFrames und Embeds mit speziellen Attributen in Consent-Blocker um.

**Aktivierung:** `Consent Manager → Einstellungen → Auto-Blocking für manuelles HTML aktivieren`

**🎯 Für Redakteure:** Dedizierte Editorial-Seite unter `Consent Manager → Redaktions-Bereich` mit:
- **📝 Code-Assistent**: Interaktives Modal zum automatischen Hinzufügen von data-consent-Attributen
- **💾 Snippet-Manager**: Speichern und Laden häufig genutzter Consent-Codes (Browser LocalStorage)
- **📚 CKE5-Integration**: Schritt-für-Schritt-Anleitung für die Nutzung im Editor
- **🔧 Service-Dropdown**: Auswahl aus konfigurierten Services + Custom-Option
- **📋 Copy-to-Clipboard**: Ein-Klick-Kopieren des generierten Codes
- **Keine Admin-Rechte nötig**: Zugriff mit Berechtigung `consent_manager[editorial]`

**Beispiel-Workflow für Redakteure:**

1. **Code kopieren** (z.B. von YouTube, Google Maps, Calendly)
2. **Code-Assistent öffnen** → Code einfügen
3. **Service auswählen** (YouTube, Maps, etc.)
4. **Optional**: Provider, Datenschutz-URL, Custom-Text ergänzen
5. **Code generieren** → `data-consent-*` Attribute werden automatisch hinzugefügt
6. **Als Snippet speichern** für spätere Wiederverwendung
7. **In CKE5 einfügen** → Platzhalter erscheint automatisch im Frontend

**Unterstützte Attribute:**
```html
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
data-consent-block="true"
data-consent-service="youtube"
data-consent-provider="YouTube"
data-consent-privacy="https://policies.google.com/privacy"
data-consent-title="Video abspielen"
data-consent-text="Wir wollen ein Video zeigen">
</iframe>
```

**📖 Ausführliche Dokumentation:** [AUTO_BLOCKING.md](AUTO_BLOCKING.md)

**Anwendungsfall:**
- Redakteure ohne Programmierkenntnisse
- Manuell eingefügte Scripts in CKE5/Redactor
- Content-Embeds (YouTube, Maps, Calendly, etc.)
- Wiederkehrende Consent-Elemente
- Custom Embeds (Analytics, Newsletter-Tools, etc.)

### CKE5 oEmbed Integration

**Automatische Umwandlung** von YouTube/Vimeo-Links in datenschutzkonforme Blocker.
Expand Down
Loading