Coder Social home page Coder Social logo

friendsofredaxo / consent_manager Goto Github PK

View Code? Open in Web Editor NEW
57.0 6.0 14.0 9.75 MB

Stellt ein Opt-In Cookie Banner zur Verfügung

License: MIT License

JavaScript 6.91% PHP 48.82% SCSS 44.27%
redaxo redaxo-addon cookie cookie-consent hacktoberfest consent-management dsgvokonform dsgvo datenschutz cookie-hinweis

consent_manager's Introduction

Consent-Manager für das REDAXO CMS

logo

Stellt ein Datenschutz-Opt-In-Banner für Dienste und ggf. deren zugehörige Cookies zur Verfügung. Die Dienste können in selbst definierte Gruppen zusammengefasst werden. Der Website Besucher bekommt eine Consent-Box angezeigt in der er allen oder einzelnen Dienste-Gruppen zustimmen kann. Es existiert eine Gruppe Notwendig, die nicht deaktiviert werden kann. Die Consent-Box kann erneut (zum Beispiel über einen Link im Impressum, oder Footer) aufgerufen werden. So können nachträglich Änderungen durchgeführt werden. Alle Texte sowie die Gestaltung der Consent-Box sind frei konfigurierbar. Eine Themeauswahl bietet unterschiedliche Designs für den Start.

Rechtlicher Hinweis

Die im AddOn gelieferten Texte und Cookie-Definitionen sind Beispiele und ggf. unvollständig oder nicht aktuell. Es liegt in der Verantwortung der Betreiber und Entwickler der Website sicherzustellen, das die Funktionalität der Abfrage, die Texte, Dienste, Cookies der geltenden Rechtslage und den Datenschutzbestimmungen entsprechen. Dies gilt auch für die korrekte Integration der Lösung.

Wir empfehlen für die Formulierung der Texte und Cookie-Listen Spezialisten zu kontaktieren. (z.B: Datenschutzbeauftragte, Rechtsabteilung)

Screenshot

Kurzanleitung

  1. AddOn consent_manager über den Installer herunterladen und installieren.
  2. Domains hinterlegen
  3. Dienste anlegen und JS Scripte hinterlegen
  4. Dienste-Gruppen anlegen
  5. Der jeweiligen Domain-Gruppe die gewünschten Domains und Dienste zuordnen
  6. REX_CONSENT_MANAGER[forceCache=0 forceReload=0] in den <head>-Bereich der gewünschten Templates einfügen, bzw.
    echo consent_manager_frontend::getFragment(false, false, 'consent_manager_box_cssjs.php');,
    wenn via PHP.
  7. Alle weiteren Einstellungen sind optional.

Hinweis: Wird keine Auswahlbox angezeigt Punkte 2 bis 6 nochmal checken ... und/oder siehe Fehlerbehebung

Hinweis: Im Reiter Setup besteht die Möglichkeit einen Import gängiger Dienste durchzuführen.

Einrichten

Domains hinzufügen

Consent-Manager kann für mehrere Domains einzeln gesteuert werden. Jede Domain der REDAXO-Instanz die Consent-Manager nutzen soll muss einzeln (ohne Protokoll http/https) hinterlegt werden.

Zum Beispiel: www.meinedomain.tld und meinedomain.tld

Die Datenschutzerklärung und das Impressum wird für jede Domain hinterlegt. Die Seiten werden nachher automatisch in der Consent-Box verlinkt. Beim Aufruf wird die hier hinterlegte Domain mit $_SERVER['HTTP_HOST'] verglichen und die Consent-Box wird bei Übereinstimmung angezeigt.

Dienste anlegen

Für jeden Dienst (zum Beispiel Google Analytics oder Matamo) wird ein einzelner Eintrag erstellt. Hat ein Dienst mehrere Cookies werden diese trotzdem in einem einzigen Eintrag beschrieben. Alle Angaben dienen nur zur Information des Webseiten Besuchers und haben keinen Einfluss auf das Setzen/Löschen der Cookies bzw. deren Eigenschaften! Im Reiter Setup besteht die Möglichkeit einen Import gängiger Dienste durchzuführen.

Screenshot

Schlüssel:

ist zur internen Verwendung und darf keine Sonderzeichen/Leerzeichen enthalten.

Dienstname:

wird später in der Consent-Box angezeigt.

Cookie Definitionen:

enthält die Beschreibung aller Cookies des Dienstes die in der Consent-Box angezeigt werden sollen. Die Beschreibung wird im YAML-Format hinterlegt, zum Beispiel:

-
 name: _ga
 time: 2 Jahre
 desc: Speichert für jeden Besucher der Website eine anonyme ID. Anhand der ID können Seitenaufrufe einem Besucher zugeordnet werden.
-
 name: _gat
 time: 1 Tag
 desc: Verhindert, dass in zu schneller Folge Daten an den Analytics Server übertragen werden.
-
 name: _gid
 time: 1 Tag
 desc: Speichert für jeden Besucher der Website eine anonyme ID. Anhand der ID können Seitenaufrufe einem Besucher zugeordnet werden.

Anbieter:

Hier kann optional der Anbieter hinterlegt werden (zum Beispiel Google). Die Angaben werden in der Beschreibung angzeigt.

Link Datenschutzerklärung:

Standardmäßig wird die Datenschutzerklärung der Domain angezeigt. Exisitiert für den Dienst eine separate Datenschutzerklärung (zum Beispiel: https://policies.google.com/privacy) kann diese hier hinterlegt werden. Auch REDAXO-Links (redaxo://1) können genutzt werden.

Platzhalter Text:

Hier kann optional ein Platzhalter Text hinterlegt werden

Platzhalter Bild:

Hier kann optional ein Platzhalter Bild aus dem Medienpoolhinterlegt werden

Skripte, die nach Einverständnis geladen werden:

Hier werden alle Scripte (inklusive <script>-Tag hinterlegt, die geladen werden, sobald der Nutzer mit der Gruppe einverstanden ist). Werden unterschiedliche Skripte je Domain benötigt, muss je Domain der Dienst extra angelegt werden. Die Scripte müssen nicht inline ausgeführt werden. Aufrufe externer Scripte sind möglich, z.B.: <script type="text/javascript" src="/ressources/script.js">.

Gruppen anlegen

Gruppen sind die Gruppen, die der Websitebsucher später einzeln akzeptieren oder ablehnen kann. Außerdem werden hier über die zugewiesenen Dienste die Scripte hinterlegt, die geladen werden, sobald der Benutzer die Gruppe akzeptiert hat.

Screenshot

Feld Beschreibung
Schlüssel Zur internen Verwendung und darf keine Sonderzeichen/Leerzeichen enthalten
Technisch notwendige Dienste Wenn aktiv, wird die Gruppe vorausgewählt und kann nicht deaktiviert werden Dienste
Domain Hier wird die zuvor angelegte Domain ausgewählt, bei deren Aufruf die Gruppe angezeigt werden soll.
Name Name der Gruppe (wird dem Website-Besucher angezeigt).
Beschreibung Allgmeine Beschreibung der Gruppe (wird dem Website-Besucher angezeigt).
Dienste Hier werden die zuvor angelegten Dienste ausgewählt, die der Gruppe angehören sollen

Beispielkonfiguration importieren

Über den Menüpunkt Setup kann eine Beispielkonfiguration mit Gruppen importiert werden. Vorhandene Dienste und Gruppen werden dabei gelöscht!

Im Template einfügen

Der Platzhalter REX_CONSENT_MANAGER[] wird im <head>-Bereich des Templates oder vor dem </body>-Tag eingefügt. Gibt es mehrere Templates die die Consent-Box aufrufen sollen, muss der Platzhalter entsprechend in allen Templates eingefügt werden.

Wichtig: Der Platzhalter funktioniert ausschließlich in REDAXO-Templates, nicht innerhalb von php-includes, Modulen oder Fragmenten.

Durch den Parameter forceReload=1 kann ein Reload der Webseite bei Auswahl der Cookies erzwungen werden. REX_CONSENT_MANAGER[forceReload=1]

Beispiel:

<head>
    <meta charset="UTF-8">
    <title>Meine Webseite</title>
    ...
    <link rel="stylesheet" href="<?php echo template_asset_url('theme/css/meincss.min.css'); ?>">
REX_CONSENT_MANAGER[forceReload=1]
</head>

oder

<head>
    <meta charset="UTF-8">
    <title>Meine Webseite</title>
    ...
    <link rel="stylesheet" href="<?php echo template_asset_url('theme/css/meincss.min.css'); ?>">
</head>
<body>
    ...
REX_CONSENT_MANAGER[forceReload=1]
</body>

Beispiel PHP-Ausgabe

...
<body>
...
<?php echo consent_manager_frontend::getFragment(false, false, 'consent_manager_box_cssjs.php'); ?>
...
</body>
...

Beispiel-Modul zur nachträglichen Abfrage

Eingabe-Modul (mit MForm)

<?php
$mform = new mform();
$cookies = [];
$qry = 'SELECT uid,service_name FROM '.rex::getTable('consent_manager_cookie').' WHERE clang_id = '.rex_clang::getCurrentId();
foreach (rex_sql::factory()->getArray($qry) as $v) {
    if ($v['uid'] == 'consent_manager') continue;
    $cookies[$v['uid']] = $v['service_name'];
}
$mform->addSelectField(1);
$mform->setOptions($cookies);
$mform->setSize(1);
$mform->setLabel('Dienst');

$mform->addTextAreaField(2, ['label' => 'HTML/JS das bei Consent geladen wird']);
$mform->addCheckboxField(5, [1 => 'Seitenreload nötig']);

$mform->addTextAreaField(3, ['label' => 'Platzhaltertext']);
$mform->addMediaField(1, ['label' => 'Platzhalterbild']);

echo $mform->show();

Ausgabe-Modul

<?php
$serviceName = '';
$cookieUid = 'REX_VALUE[1]';
$needsReload = (bool)'REX_VALUE[5]' ? '-reload' : '';
$consented = false;
$placeholderImage = '';
$placeholderText = '';

$consent_manager = new consent_manager_frontend();
$consent_manager->setDomain($_SERVER['HTTP_HOST']);

// "globale" platzhalter aus dem addon setzen
if (isset($consent_manager->cookies[$cookieUid])) {
    $placeholderImage = $consent_manager->cookies[$cookieUid]['placeholder_image'];
    $placeholderText = $consent_manager->cookies[$cookieUid]['placeholder_text'];
}

if (isset($_COOKIE['consent_manager'])) {
    $cookieData = json_decode($_COOKIE['consent_manager'], true);
    foreach ($cookieData['consents'] as $consent) {
        if ($cookieUid == $consent) {
            $consented = true;
            break;
        }
    }

}
?>

<?php if (rex::isFrontend()): ?>
    <?php if ($consented): ?>
        <div class="consent_manager-module" data-uid="<?= $cookieUid ?>">
            REX_VALUE[2 output=html]
        </div>
    <?php else: ?>
        <div class="consent_manager-module" data-payload="<?= base64_encode('REX_VALUE[2 output=html]') ?>" data-uid="<?= $cookieUid ?>">
            <div class="consent_manager-module__placeholder">
                <div class="consent_manager-module__placeholder-image">
                    <img src="/media/<?= ('REX_MEDIA[1]' ? 'REX_MEDIA[1]' : $placeholderImage) ?>" alt="">
                </div>
                <div class="consent_manager-module__placeholder-text">
                    <div class="consent_manager-module__placeholder-text-background">
                        <?= nl2br('REX_VALUE[3 output=html]' ? 'REX_VALUE[3 output=html]' : $placeholderText) ?>
                        <div class="consent_manager-show-box<?= $needsReload ?>"><b>Datenschutz-Einstellungen anpassen</b></div>
                    </div>
                </div>
            </div>
        </div>
    <?php endif ?>
<?php else: ?>
    <label><?= $serviceName ?></label>
    <textarea readonly disabled style="width:100%;" id="consent_manager-module-textarea-REX_SLICE_ID">REX_VALUE[2 output=html]</textarea>
<?php endif ?>

zusätzliches JS

jQuery(function ($) {
    'use strict';
    $('.consent_manager-module').each(function () {
        var $this = $(this),
            uid = $this.data('uid');
        $(document).on('consent_manager-saved', function (e) {
            var consents = JSON.parse(e.originalEvent.detail);
            consents.forEach(function (v) {
                if (v === uid) {
                    $this.html(window.atob($this.data('payload')));
                }
            });
        });
    });
});

Einstellungen und Optionen

Die folgenden Einstellungen sind optional. Mit ihnen kann man Consent-Manager an die eigenen Bedürfnisse anpassen. Sie ändern jedoch nichts an der Funktionalität des AddOns.

Dienste-Texte anpassen

Hier können alle allgemeinen Texte der Consent-Box angepasst werden.

Wir empfehlen hierzu einen Spezialisten zu kontaktieren. (z.B: Datenschutzbeauftragte, Rechtsabteilung)

Mehrsprachigkeit

Verfügt die Website über mehrere Sprachen oder wird eine neue Sprache angelegt, werden die Inhalte der Startsprache automatisch übertragen und können nachher angepasst werden. Einige Felder wie Schlüssel, Scripte, Domain und Cookie-Auswahl können nur in der Startsprache geändert werden. Die Änderungen werden automatisch auf alle weiteren Sprachen übertragen.

Themes für die Consent-Box

Screenshot

Das AddOn liefert bereits eine Auswahl Themes mit, die im Reiter nur ausgewählt und aktiviert werden müssen.

Um ein eigenes Theme zu erstellen, empfiehlt es sich, ein bestehendes Theme zu kopieren und im Verzeichnis /project/consent_manager_themes/ des Projekt-AddOns abzulegen. Der neue Dateiname sollte der Schreibweise consent_manager_frontend_theme*.scss entsprechen.

z.B: /project/consent_manager_themes/consent_manager_frontend_theme_mein_theme.scss

Anschließend können die gewünschten Anpassungen vorgenommen werden und das neue Theme kann unter "Themes" in der Theme-Vorschau ausgewählt werden.

Gerne können eigene Themes auch als PR eingereicht werden 😀. Bitte mit Screenshot oder Demo-Link.

Tipp:

Zum Testen und Entwickeln des eigenen Themes (im Ordner /project/consent_manager_themes/) kann man die Vorschau auch direkt aufrufen:

z.B:

/redaxo/index.php?page=consent_manager/theme&preview=project:consent_manager_frontend_mein_theme.scss

Einfach mit der rechten Maustaste auf den Button Theme Vorschau klicken und Link in neuem Fenster öffnen.

Individuelles Design

Reicht die Lösung über ein Theme nicht, kann die Box auch vollständig individualisert werden. Der HTML-Code der Cookie Box liegt im Fragment /redaxo/src/addons/consent_manager/fragments/consent_manager_box.php. Änderungen in dieser Datei werden beim nächsten Update überschrieben. Deshalb ist es empfehlenswert, das Fragment zu kopieren und zum Beispiel im Project oder Theme AddOn abzulegen 'theme/private/fragments/consent_manager_box.php' und die Änderungen hier vorzunehmen. Das eigene CSS stellt man entweder über ein Theme scss bereit oder individuell im Template als eigene CSS-Datei.

Ausgabe-Einstellungen

Über den Menüpunkt Einstellungen kann die Ausgabe für CSS und JavaScript im Frontend gesteuert werden. Standardmäßig wird auf jeder Seite das benötigte JavaScript und die CSS-Datei consent_manager_frontend.css ausgegeben.

Der Platzhalter REX_CONSENT_MANAGER[] im Template wird durch folgenden Code ersetzt.

<style><style>/*consent_manager_frontend.css*/ @keyframes fadeIn{0%{opacity:0}100%{opacity:1}}</style>
<script src="./index.php?consent_manager_outputjs=1&amp;lang=1&amp;a=6&amp;i=false&amp;h=false&amp;cid=43&amp;v=4&amp;r=0&amp;t=16732118931" id="consent_manager_script" defer></script>

Sind im eigenen Frontend-Theme Styles für die Consent-Box vorhanden kann hier die Ausgabe der CSS-Datei consent_manager_frontend.css durch aktivieren der Einstellung Eigenes CSS verwenden unterdrückt werden. Es wird dann nur die JavaScript-Zeile ausgegeben.

Gesetzte Cookies / Einwilligungshistorie

Mit Hilfe des Platzhalters REX_COOKIEDB[] können alle derzeit gesetzten Cookies sowie die Einwilligungshistorie z.B. in der Datenschutzerklärung ausgegeben werden.

Wichtig: Der Platzhalter funktioniert ausschließlich in REDAXO-Templates, nicht innerhalb von php-includes, Modulen oder Fragmenten.

Tipps & Tricks

Hast du eigene Tipps & Tricks? Füge Sie auf Github direkt in die Readme hinzu oder lege ein Issue an.

Cookie-Box manuell aufrufen

Soll der Nutzer die Möglichkeit bekommen, seine Einstellungen nachträglich anzupassen (zum Beispiel im Impressum oder auf einer Cookie-Seite) ist das mit folgenden Links möglich:

Link zur Consent-Box

<a class="consent_manager-show-box">Datenschutz-Einstellungen</a>

Link mit Reload

öffnet die Cookie-Box und erzwingt einen Page-Reload nach der Einwilligung.

<a class="consent_manager-show-box-reload">Datenschutz-Einstellungen</a>

Aufruf per Javascript

Die Cookie-Box kann auch durch einen JavaScript-Aufruf geöffnet werden consent_manager_showBox().

// Achtung hier mit Unterstrichen da sonst der Beispiel-Code verstümmelt wird.
// Unterstriche bei `on_click` und `java_script` müssen entfernt werden!
<button on_click="java_script:consent_manager_showBox();">Datenschutz-Einstellungen</button>

Consent per JavaScript ermitteln

Um mit JavaScript einen Consent abzufragen die Funktion consent_manager_hasconsent() verwenden.

<script>
window.addEventListener('load', (event) => {
    if (true === consent_manager_hasconsent('youtube')) {
        alert('youtube Ok');
    }
});
</script>

Consent mit PHP ermitteln

Um mit PHP einen Consent abzufragen die Klassen-Funktion consent_manager_util::has_consent() verwenden.

<?php
if (true === consent_manager_util::has_consent('youtube')) {
    echo('youtube Ok');
}
?>

Seite ohne Consent-Box

Um z.B. einen Link zu teilen bei dem keine Consent-Box erscheinen soll kann in den Einstellungen ein TOKEN hinterlegt werden. An die URL dann einfach skip_consent=MEINTOKEN anhängen.

z.B.: https://meinedomain.de/SeiteOhneToken.html?skip_consent=MEINTOKEN

Scripte per PHP laden

Neben der Einbindung der Scripte direkt über das Addon lassen sich Scripte auch per PHP einbinden. Somit kann man (am Beispiel GoogleMaps) eine Meldung ausgeben, dass bestimmte Cookies akzeptiert werden müssen um die Karte zu laden. Problem dabei: öffnet man die Cookie-Box und akzeptiert die Cookies, wird zwar das Script geladen, aber ohne Page-Reload ändert sich der Inhalt der Seite nicht. Deshalb sollte man hier den Link: <a class="consent_manager-show-box-reload">Cookie Einstellungen bearbeiten</a> verwenden.

$arr = json_decode($_COOKIE['consent_manager'], true);
$check = [];
if ($arr)
{
$check = array_flip($arr['consents']);
}
#dump($arr);
if ($check['google-maps']) {
  // Code Ausgabe bei akzeptierter CookieGruppe
  // GoogleMaps-Code
} else {
  // Code Ausgabe bei abgelehnter CookieGruppe
  // Warnhinweis + <a class="consent_manager-show-box-reload">Cookie Einstellungen bearbeiten</a>
}

Berechtigung für Redakteure

Um die Cookie-Texte auch für Redakteure zur Änderung bereitzustellen muss diesen das Recht consent_manager[] und zusätzlich das Recht consent_manager[texteditonly] zugewiesen werden. Die Redakteure können dann nur die Cookie-Texte ändern, alle anderen Funktionen werden ausgeblendet.

Fehlerbehebung

Die Consent-Box wird nicht angzeigt

  • Ist eine Domain hinterlegt und in der Cookie-Gruppe zugeordnet? - Bei mehreren Domains sind die Gruppen für jede Domain einzeln anzulegen.
  • Stimmt die zugeordnete Domain mit der aufgerufenen Domain überein? - www.meinedomain.de und meinedomain.de sind zwei verschiedene Domains.
  • Ist die Website über die zugeordnete Domain (www.meinedomain.tld) erreichbar? - Unterordner Installationen funktionieren nicht.
  • Sind der Platzhalter REX_CONSENT_MANAGER[] oder der PHP-Code in einem Template im head-Bereich hinterlegt? .
  • Unter Einstellungen ist Eigenes CSS verwenden aktiviert aber es wird kein eigenes CSS eingebunden (HTML der Box wird am Seitenende angezeigt und nicht als Popup)
  • Ist der Startkartikel der Seite auch als Not Found Artikel (404) konfiguriert? - Die Cookie-Box wird beim 404 Artikel nicht ausgegeben

Die Consent-Box wird angezeigt, aber die Cookies werden nicht angezeigt

  • Ist eine entsprechende Cookie-Gruppe angelegt?
  • Wurde Dienst in der entsprechenden Gruppe aktiviert?

Die Consent-Box und Cookies werden angezeigt, Scripte aber nicht geladen.

  • Sind die Scripte in der entsprechenden Cookies hinterlegt?
  • Sind die Scripte inklusive <script>...</script>-Tag hinterlegt?

Fehler melden

Du hast einen Fehler gefunden oder wünscht dir ein Feature? Lege ein Issue auf Github an.

Lizenz, Autor, Credits, Sponsoren

Lizenz

MIT Lizenz, siehe LICENSE.md cookie.js: MIT Lizenz

Autor

Friends Of REDAXO https://github.com/FriendsOfREDAXO

Projekt-Leads Ingo Winter, Andreas Eberhard

Credits

Contributors:

First Release: Ingo Winter.

Sponoren:

Thomas Blum wird eine Menge Code aus seinem Sprog Addon in Consent-Manager wiederfinden. Thomas Skerbis hat unermüdlich getestet und für die Entwicklung gespendet, Peter Bickel hat für die Entwicklung gespendet, Oliver Kreischer hat den Keks gebacken.

consent_manager's People

Contributors

191977 avatar aeberhard avatar alxndr-w avatar anveno avatar bitshiftersgmbh avatar iceman-fx avatar imgbotapp avatar ingowinter avatar interweave-media avatar marcohanke avatar mc-pmoe avatar ngwngw avatar omphteliba avatar polarpixel avatar ritzfritz avatar schuer avatar shauste avatar skerbis avatar tbaddade avatar thorol avatar tobiaskrais avatar tyrant88 avatar xong avatar ynamite avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

consent_manager's Issues

2 Buttons + Link: Impressum können nicht übersetzt werden

Vorweg erst einmal vielen DANK für das tolle Addon !!!

Ich hab es nun erstmalig auf einer Webseite mit 3 Sprachen eingesetzt.
Es läßt sich ja alles super ersetzen, aber ich habe für nachfolgende 2 Buttons und das Wort Impressum bisher keine Möglichkeit gefunden.

< a class="iwcc-save-selection iwcc-close" >Auswahl bestätigen< /a >
< a class="iwcc-accept-all iwcc-close" >Alle auswählen< /a >

Und der Link-Text: Impressum

Habe ich da was übersehen oder kann man das ggf. noch editierbar machen ?

Ich hoffe ich kann mit solchen Hinweisen die Entwicklung zumindest etwas unterstützen.

Liebe Grüße und bleibt gesund
Mirco

Domains - aus System oder yrewrite verwenden?

Jetzt müsste man an noch einer weiteren Stelle die Domains pflegen, was bei einer Multidomainseite recht aufwendig werden kann. Sobald yrewrite dabei ist, könnte man von dort die Domains verwenden und als Fallback die unter System hinterlegte.

REX_IWCC[] erweitern um Cookie-Check

Um die Ausgabe in Modulen zu steuern könnte das REX-Var hilfreich sein.
Eingebundener Code könnte erst ausgegeben werden, wenn dem Cookie zugestimmt wurde.

Beispiel:
REX_IWCC[id=1 group=google]

Fragment "Aktuell gesetzte Cookies"?

Unsere Datenschutzerklärung enthält auch den Punkt "Aktuell gesetzte Cookies" um den Besucher zu informieren, welche Cookies derzeit von der Website gesetzt sind. Über folgendes Fragment lässt sich das mit der Cookie-Datenbank von iwcc verknüpfen.

Wäre das eine wünschenswerte Ergänzung?

<?php
$iwcc = new iwcc_frontend($this->getVar('forceCache'));
$iwcc->setDomain($_SERVER['HTTP_HOST']);

if ($this->getVar('debug'))
{
	print_r($_COOKIE);
}

if ($iwcc->cookiegroups) {

	$cookieDatabase = array();
	
	foreach ($iwcc->cookiegroups as $cookiegroup)
	{
		foreach ($cookiegroup['cookie'] as $cookie)
		{
			$cookieDatabase[$cookie['cookie_name']]=array(			
				"service_name"=>$cookie['service_name'],
				"provider"=>$cookie['provider'],
				"category"=>$cookiegroup['name'],
				"required"=>$cookiegroup['required'],
				"lifetime"=>$cookie['cookie_lifetime'],
				"description"=>$cookie['description']
			);
		}
	}

	$outputDatabase = '<table class="cookieInfoTable uk-table">';
	$outputDatabase .= '<tr>
							<th class="cookieName">Cookie-Name</th>
							<th class="cookieService">Service</th>
							<th class="cookieProvider">'. $iwcc->texts['provider'] .'</th>
							<th class="cookieLifetime">'. $iwcc->texts['lifetime'] .'</th>
							<th class="cookieDescription">Verwendungszweck</th>
							<th class="cookieCategory">Kategorie</th>
							<th class="cookieValue">Wert</th>
							<th class="cookieDelete">&nbsp;</th>
						</tr>';

	foreach ($_COOKIE as $cookieName => $cookieValue) 
	{
		$outputDatabase .= '<tr>';
		$outputDatabase .= '<td class="cookieName">'. $cookieName .'</td>';
		if (isset($cookieDatabase[$cookieName]) || array_key_exists($cookieName, $cookieDatabase)) 
		{
			$outputDatabase .= '<td class="cookieService">'. $cookieDatabase[$cookieName]['service_name'] .'</td>';
			$outputDatabase .= '<td class="cookieProvider">'. $cookieDatabase[$cookieName]['provider'] .'</td>';
			$outputDatabase .= '<td class="cookieLifetime">'. $cookieDatabase[$cookieName]['lifetime'] .'</td>';
			$outputDatabase .= '<td class="cookieDescription">'. $cookieDatabase[$cookieName]['description'] .'</td>';
			$outputDatabase .= '<td class="cookieCategory">'. $cookieDatabase[$cookieName]['category'] .'</td>';	
			$outputDatabase .= '<td class="cookieValue">'. $cookieValue .'</td>';
			if (!$cookieDatabase[$cookieName]['required']) 
			{
				$outputDatabase .= '<td class="cookieDelete"><a href="javascript:Cookies.remove(\''. $cookieName .'\', { path: \'/\' });Cookies.remove(\''. $cookieName .'\', { path: \'/\', domain: \''.str_replace('www','',$_SERVER['HTTP_HOST']).'\' })"><span>X</span></a></td>';
			}
			else 
			{
				$outputDatabase .= '<td></td>';
			}
		}
		else 
		{
			$outputDatabase .= '<td colspan="6">Keine Informationen vorhanden</td>';
		}
		$outputDatabase .= '</tr>';
	}

	$outputDatabase .= '</table>';

	echo $outputDatabase;

}

So sieht's aus:

cookie-database

Button "Auswahl bestätigen" "Alle auswählen"

Hallo,
ich nutze das "Cookie-Gedöns" für eine Webseite mit drei Sprachen, 98% der Texte lassen sich im AddOn übersetzen nur die zwei Button "Auswahl bestätigen" "Alle auswählen" lassen sich nicht übersetzen, ich hab es mit Platzhalter (Sprog) im der iwcc_box.php hat aber leider auch nicht geklappt.
Gruß
Jochen

Probleme bei Mehrsprachigkeit

Hi, ich entwickle zur Zeit eine Redaxo-Webseite, die DE/EN unterstützt.
Die Konfiguration/Einrichtung/Anzeige des AddOns für DE ist problemlos.

Für EN treten jedoch eine Ungereimheiten auf, die wohl so nicht gedacht waren. Gerne lasse ich mich aber auch eines besseren belehren.

  1. Keine Möglichkeit, unter "Cookie Texte" die Einträge für die Sprache EN vornehmen zu können. Also zumindest das Übersetzen der schon vorhandenen DE Einträge:
    image

versus

image

Damit kann dann auch für clang=2 nichts im Cookiebanner angezeigt werden.

  1. "Cookie Gruppen" und "Cookies" werden für DE alle angezeigt, also DE und EN,
    image

und

image

während in EN tatsächlich nur die für die Sprache relevanten Einträge gezeigt werden:
image

und

image

Viele Grüße, Roland

Neue Textfelder für Buttons werden nicht angelegt

Ich hatte eben den Fall, dass mit dem Upgrade von 1.0.8 auf 1.0.9 die neuen Textfelder für die beiden Buttons "button_select_all" und "button_accept" nicht in der DB (Tabelle rex_iwcc_text) angelegt wurden. Grundlage war die 1.0.9 aus github. Ich habe mir beholfen, in dem ich die Felder händisch in der DB angelegt habe. Sollte jedoch bei ReInstall automatisch funktionieren.

Wunsch: Cookies importieren oder via yform bearbeiten?

Aufgrund der pid als auto-increment-Wert und eines weiteren id-Feldes, lässt sich die Tabelle nicht mit yform bearbeiten um so z.B. schnell Cookies zu importieren. Gibt es eine andere Möglichkeit dazu, um nicht bei jeder neuen Installation die Cookies per Hand einzutragen?

AddOnnamen und Präfix überdenken?

Da jetzt Cookie consent archiviert wurde (gab es dazu eine Abstimmung?), könnte man dann hier den Namen Gedöns loswerden und eventuell auch das Präfix iw für Ingo Winter?

Code pro Dienst festlegen, nicht pro Gruppe

Es wäre glaube ich besser, wenn der Code am Dienst hinterlegt wird (z.B. google-analytics), statt an der Cookie-Gruppe - denn am Dienst ist ja auch die logische Zugehörigkeit.

Verständnisfrage - Skripte, die nach Einverständnis geladen werden

Aus der Readme

Pro Gruppe können Skripte hinterlegt werden, die nach Akzeptieren der Gruppe ausgeführt werden.

Sind das Skripte die

  1. nur einmal nach akzeptieren der Gruppe ausgelöst werden oder
  2. sind das Skripte die ständig geladen werden, sofern das Einverständnis vorhanden ist

Wenn 2. zutrifft, wo erscheinen die Skripte im Quelltext?

Cookie Definitionen als YAML hinterlegen

Die Felder Name/Laufzeit/Beschreibung werden durch eine einzelne Textarea "Cookie Definitionen" ersetzt, die YAML erwartet:

-
  name: _ga
  time: 2 Jahre
  desc: Speichert für jeden Besucher der Website eine anonyme ID. Anhand der ID können Seitenaufrufe einem Besucher zugeordnet werden.
-
  name: _gat
  time: 1 Tag
  desc: Verhindert, dass in zu schneller Folge Daten an den Analytics Server übertragen werden.
-
  name: _gid
  time: 1 Tag
  desc: Speichert für jeden Besucher der Website eine anonyme ID. Anhand der ID können Seitenaufrufe einem Besucher zugeordnet werden.

Damit sind sämtliche Cookies für einen Dienst in einem Datensatz vorhanden, die Eingabe geht schneller und die Liste wird übersichtlicher.

Verständnisfrage : Cookie Gruppe bearbeiten

Skripte, die nach Einverständnis geladen werden

Wird das Skript nur einmalig nach dem Einverständnis geladen oder immer sofern das Cookie noch gesetzt ist?

Hintergrund ist, dass das Javascript nicht erscheint. Sollte man daher das Matomo Skript selbst in das Template notieren? Wie ist eure Erfahrung?

Scripte

Wie kann man abfragen

  • ob der Schliessen-Button
  • ob einer der beiden Buttons
    geklickt wurde?

Schriftkonflikt

Hallo, iwcc führt zu einem Schriftkonflikt mit Fonts wie Font-Awesome oder Line-Icons.
In der fontello.css wird die Klasse "icon-" behandelt. Dieser Klassenname wird häufiger benutzt. Es wäre also gut die Iconklasse bei iwcc spezifischer zu machen, z.B. "iwccicon-"

fontello.css, Zeile 25
[class^="icon-"]::before, [class*=" icon-"]::before {

Gruß Heinz

Platzhalter REX_IWCC[] abfangen

Moin,

vielleicht eher eine kleine kosmetische Sache, vermutlich läuft auch kaum jemand rein, aber spricht etwas dagegen das Ersetzen des Platzhalters REX_IWCC[] nochmal auf aktiviertes Addon zu validieren?

Habe den Cookie Hinweis gerade bei einem Kunden vorbereitet und anschließend das Addon deaktiviert und es hat etwas geknallt. Hab es jetzt im Template abgefangen, aber dann geht es weiter und iwcc_frontend.js schmeißt den nächsten Fehler, weil das Template Script nicht gefunden werden kann.

Fatal Error wenn Sprog Standard Tags in Cookie Definition genutzt werden

In Sprog wird für öffnendes/schließendes Tag per Standard "{{ " und " }}" verwendet. Wird dieses Tag in einer Cookie Definition verwendet kommt folgender fatal error:

rex_yaml_parse_exception: Malformed inline YAML string: {{ iwcc_cookies_iwcc_cookie_iwcc }} at line 4 (near "desc: {{ iwcc_cookies_iwcc_cookie_iwcc }}").
File: redaxo/src/core/lib/util/string.php
Line: 148

Stacktrace
Function File Line
rex_string::yamlDecode redaxo/src/addons/iwcc/lib/iwcc_cache.php 87
iwcc_cache->prepareData redaxo/src/addons/iwcc/lib/iwcc_cache.php 32
iwcc_cache->writeCache redaxo/src/addons/iwcc/lib/iwcc_cache.php 24
iwcc_cache::write redaxo/src/core/lib/extension.php 45
rex_extension::registerPoint redaxo/src/core/lib/form/form.php 369
rex_form->save redaxo/src/core/lib/form/form_base.php 1151
rex_form_base->get redaxo/src/addons/iwcc/pages/cookie.php 56
include redaxo/src/core/lib/packages/package.php 245
rex_package->includeFile redaxo/src/core/lib/be/controller.php 471
rex_be_controller::includePath redaxo/src/core/lib/be/controller.php 428
rex_be_controller::includeCurrentPageSubPath redaxo/src/addons/iwcc/pages/index.php 8
include redaxo/src/core/lib/packages/package.php 245
rex_package->includeFile redaxo/src/core/lib/be/controller.php 471
rex_be_controller::includePath redaxo/src/core/lib/be/controller.php 413
rex_be_controller::includeCurrentPage redaxo/src/core/backend.php 216
require redaxo/src/core/boot.php 137
require redaxo/index.php 9
System report (REDAXO 5.10.0, PHP 7.3.11-nmm1)
REDAXO
Version 5.10.0
PHP
Version 7.3.11-nmm1
OPcache no
Xdebug no
Database
Version MySQL 5.6.44
Character set utf8
Server
OS Linux
SAPI fpm-fcgi
Webserver Apache
Request
Browser Firefox/74.0
Protocol HTTP/1.1
HTTPS yes
Packages
accessdenied 1.0.6
be_style 2.10.0
be_style/customizer 2.10.0
be_style/redaxo 2.10.0
cookie_consent 3.0.0-beta3
cronjob 2.7.0
d2u_address 1.1.2
d2u_helper 1.6.2
d2u_helper/translation_helper 1.6.1
d2u_history 1.0.0
d2u_jobs 1.1.0
d2u_jobs/hr4you_import 1.1.0
d2u_linkbox 1.2.3
d2u_machinery 1.3.2
d2u_machinery/industry_sectors 1.3.2
d2u_machinery/machine_features_extension 1.3.2
d2u_machinery/machine_steel_processing_extension 1.3.2
d2u_machinery/used_machines 1.3.2
d2u_news 1.1.2
d2u_news/fairs 1.1.2
d2u_partner 1.0
d2u_references 1.0.7
d2u_staff 1.0.3
d2u_videos 1.0.8
emailobfuscator 3.0.0
install 2.7.0
iwcc 1.0.8
media_manager 2.9.0
media_manager_autorewrite 1.1.0
mediapool 2.8.0
metainfo 2.7.0
multinewsletter 3.2.7
phpmailer 2.8.0
search_it 6.7.0
search_it/autocomplete 6.7.0
search_it/documentation 6.7.0
search_it/plaintext 6.7.0
search_it/stats 6.7.0
sprog 1.2.0
structure 2.10.0
structure/content 2.10.0
tinymce4 1.2.1
uploader 2.0.5
url 2.0.0-beta3
users 2.6.1
ycom 4.0.1
ycom/auth 4.0.1
ycom/docs 4.0.1
ycom/group 4.0.1
ycom/media_auth 4.0.1
yform 3.3.1
yform/docs 3.3.1
yform/email 3.3.1
yform/manager 3.3.1
yrewrite 2.6
yrewrite_scheme 3.2.1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.