Implementation für EU-Cookie Verordnung

Version: 3.1nR

Changelog:

Voraussetzungen

modified eCommerce Shopsystem
Verwendbar für modified 1.06 rev4642
und mit kleinen Anpassungen auch für frühere und spätere Versionen.


Lizenz

General Public License .
Credits in files and in application must be kept.


Was bewirkt die Erweiterung

Bei Aufruf des Shops fährt von oben (oder von unten) ein Container in den View Port.
Dort kann der Besucher sich eine Liste der verwendeten Cookies anschauen und die für den Betrieb der Seite nicht-essentiellen Cookies deaktivieren.
Die Erweiterung kann im Backend unter Konfiguration => Zusatzmodule aktiviert oder deaktiviert werden.


Anleitung

Einbau:

Am besten man öffnet die vorliegende Datei im Firefox-Browser um sicher zugehen, daß das Kopieren des Codes fehlerfrei funktioniert. Einbau durch den Benutzer selbst auf eigene Gefahr.
Bei Einbauproblemen kann für einen Kostenbeitrag von 30,- EUR der Einbau durch den Autor bestellt werden.

Wichtig !

Wie's geht:

Datenbank-Änderungen

Auch hier unbedingt Datensicherung vornehmen bevor Datenbank-Änderungen vorgenommen werden.

Folgenden SQL-Befehl in der Datenbank ausführen (mit phpMyAdmin oder ähnlicher API)
INSERT INTO configuration VALUES ('', 'EU_COOKIE_DIRECTIVE', 'true', 17, 20, NULL, NOW(), NULL, 'xtc_cfg_select_option(array(\'true\', \'false\'),');

Die Sortierung (Ziffer 20 in oben aufgeführter SQL-Anweisung) muß evtl. geändert werden falls man schon Erweiterungen mit dieser Sortierung eingebaut hat.


Hochzuladende Dateien

Den Ordner /templates/xtc5/javascript/CookieGuard komplett in /templates/DEIN_TEMPLATE/javascript hochladen.


Änderungen Core-Dateien:

In /lang/german/admin/configuration.php unten vor dem evtl. vorhandenen schließenden ?> einfügen
// BOC EU cookie directive, noRiddle
define('EU_COOKIE_DIRECTIVE_TITLE', 'Eu-Cookie-Anzeige im Frontend aktivieren ?');
define('EU_COOKIE_DIRECTIVE_DESC', 'Wenn diese Funktion aktiviert wird erscheint bei Aufruf des Shops ein Container ganz oben auf der Shopseite.<br />Dort kann der Besucher verwendete Cookies einsehen und die für den Betrieb der Seite nicht essentiellen Cookies blockieren oder erlauben.<br />Nachdem der Besucher seine Entscheidung getroffen hat wird ein Cookie mit den Präferenzen gesetzt.<br />Die vom Besucher gewählte Einstellung kann nur durch Löschen oder Ablauf der entsprechenden Cookies im Browser rückgängig gemacht werden.');
// EOC EU cookie directive, noRiddle

In /lang/english/admin/configuration.php unten vor dem evtl. vorhandenen schließenden ?> einfügen
// BOC EU cookie directive, noRiddle
define('EU_COOKIE_DIRECTIVE_TITLE', 'Activate Eu-Cookie indication in frontend ?');
define('EU_COOKIE_DIRECTIVE_DESC', 'If this function is activated a container will appear on top of the shop page.<br />In this container the visitor may view the used cookies and opt to block or allow the for the site operation non-essential cookies.<br />After the user has choosen his preferences a cookie will be generated to store these preferences.<br />The by the visitor choosen preferences can only be revised by deleting the correspondent cookies in the browser or when the cookies have expired.');
// EOC EU cookie directive, noRiddle

In /lang/german/german.php unten vor dem evtl. vorhandenen schließenden ?> einfügen
// BOC for cookieguard, noRiddle
define('COOKIES_PRIMARY_TXT', 'Diese Webseite benutzt Cookies (<a href="http://de.wikipedia.org/wiki/Cookie" target="_blank">was ist das ?</a>)<br/>');
define('COOKIES_SECONDARY_TXT', 'Sie können Cookies die nicht essentiell für den Betrieb dieser Seite sind blockieren.<br />Bereits gesetzte nicht essentielle Cookies werden dann gelöscht.');
define('COOKIES_ESSENTIAL_TXT', 'Essentielle Cookies <span>- Diese Cookies sind nötig um die Seite zu betreiben.</span>');
define('COOKIES_NONESSENTIAL_TXT', 'Nicht essentielle Cookies <span>- Der Seitenbetreiber hat diese Cookies genehmigt, Sie können sie jedoch deaktivieren.</span>');
define('COOKIES_COOKIEGUARD_TXT', ' - Dieses Cookie ist essentiell um den Status Ihrer Entscheidung über die Benutzung von nicht essentiellen Cookies zu speichern.');
define('COOKIES_UNKNOWN_TXT', 'Unbekannte Cookies <span>- Der Seitenbetreiber hat diese Cookies nicht kategorisiert.</span>');
define('COOKIES_NEWFOUND_TXT', 'Cookie Guard hat neue Cookies gefunden.<br/>');
define('COOKIES_NEWBLOCK_TXT', 'Sie können sich entscheiden diese Cookies zu blockieren.');
define('COOKIES_NOTALLOWED_TXT', 'Die aufgelisteten Cookies wurden nun für diese Seite erlaubt.');
define('COOKIES_NOWALLOWED_TXT', 'Nicht essentielle und unbekannte Cookies wurden nun blockiert für diese Seite.');
define('COOKIES_SHOW_TXT', 'Cookies zeigen');
define('COOKIES_HIDE_TXT', 'Cookies verstecken');
define('COOKIES_ALLOW_TXT', 'Cookies erlauben');
define('COOKIES_BLOCK_TXT', 'Cookies blockieren');
define('COOKIES_OKAY_TXT', 'Okay');
define('COOKIE_MODSID_TXT', 'Dieses Cookie ist nötig für die Funktion der Seite um wichtige Informationen an folgende Seiten weiterzugeben.');
define('COOKIE_PIWIK_TXT', 'Diese Cookies werden verwendet um Informationen zu sammeln darüber wie Besucher unsere Seite benutzen. Wir verwenden diese Informationen um Reports zu erstellen und um uns zu helfen die Seite zu verbessern. Die Cookies sammeln Informationen in anonymer Form. Das beinhaltet die Zahl der Besucher dieser Seite, woher Besucher zu dieser Seite kamen und welche Seite sie vorher besucht haben.');
// EOC for cookieguard, noRiddle

In /lang/english/english.php unten vor dem evtl. vorhandenen schließenden ?> einfügen
// BOC for cookieguard, noRiddle
define('COOKIES_PRIMARY_TXT', 'This website uses cookies (<a href="http://en.wikipedia.org/wiki/Magic_cookie" target="_blank">what is this ?</a>)<br/>');
define('COOKIES_SECONDARY_TXT', 'You may choose to block non-essential and unknown cookies.<br />Such cookies will be deleted if already set.');
define('COOKIES_ESSENTIAL_TXT', 'Essential Cookies <span>- These cookies are essential to the running of the present site.</span>');
define('COOKIES_NONESSENTIAL_TXT', 'Non-Essential Cookies <span>- The site owner has approved these cookies but you may turn them off.</span>');
define('COOKIES_COOKIEGUARD_TXT', ' - This cookie is essential for storing the status of your cookie choices whilst using this site.');
define('COOKIES_UNKNOWN_TXT', 'Unknown Cookies <span>- The site owner has not approved these cookies.</span>');
define('COOKIES_NEWFOUND_TXT', 'Cookie Guard has found new cookies.<br/>');
define('COOKIES_NEWBLOCK_TXT', 'You may choose to block these cookies.');
define('COOKIES_NOTALLOWED_TXT', 'The listed cookies have now been allowed on this site.');
define('COOKIES_NOWALLOWED_TXT', 'Non-essential and unknown cookies have now been blocked on this site.');
define('COOKIES_SHOW_TXT', 'Show');
define('COOKIES_HIDE_TXT', 'Hide');
define('COOKIES_ALLOW_TXT', 'Allow');
define('COOKIES_BLOCK_TXT', 'Block');
define('COOKIES_OKAY_TXT', 'Okay');
define('COOKIE_MODSID_TXT', 'This cookie is used to track important logical information for the smooth operation of the site.');
define('COOKIE_PIWIK_TXT', 'These cookies are used to collect information about how visitors use our site. We use the information to compile reports and to help us improve the site. The cookies collect information in an anonymous form, including the number of visitors to the site, where visitors have come to the site from and the pages they visited.');
// EOC for cookieguard, noRiddle

Die Texte für das Frontend können natürlich nach Gusto formuliert werden.
Es muß evtl. um weitere Sprach-Konstanten erweitert werden, je nachdem welche Cookies auf der Shopseite benutzt werden (siehe Erklärungen zu general.js.php).
Im Beispiel-Code oben ist für das Cookie MODsid, welches auf jedem modified-Shop gesetzt wird, bereits ein Text formuliert worden.
Außerdem ist beispielhaft ein Text für die Nutzung von PIWIK enthalten.


Template-Dateien

In /templates/DEIN_TEMPLATE/css/general.css.php folgendes suchen
<?php // BOF - web28 - 2010-07-09 - TABS/ACCORDION in product_info ?>
<?php
if (strstr($PHP_SELF, FILENAME_PRODUCT_INFO )) {
?>
<link rel="stylesheet" href="<?php echo 'templates/'.CURRENT_TEMPLATE; ?>/css/jquery-ui.css" type="text/css" media="screen" />
<?php
}
?>
<?php // EOF - web28 - 2010-07-09 - TABS/ACCORDION in product_info ?>
und darunter folgendes einfügen
<?php
// BOC cookieGuard, noRiddle
if (EU_COOKIE_DIRECTIVE == 'true') {
?>
<link rel="stylesheet" href="<?php echo 'templates/'.CURRENT_TEMPLATE; ?>/javascript/CookieGuard/cookieStyles.css" type="text/css" media="screen" />
<?php
}
// EOC cookieGuard, noRiddle
?>

In /templates/DEIN_TEMPLATE/javascript/general.js.php folgendes suchen
<script src="<?php echo 'templates/'.CURRENT_TEMPLATE; ?>/javascript/jquery.js" type="text/javascript"></script>
und darunter einfügen
<?php //BOC Cookie Guard noRiddle
if (EU_COOKIE_DIRECTIVE == 'true') {
?>
<script src="<?php echo 'templates/'.CURRENT_TEMPLATE; ?>/javascript/CookieGuard/cookie_guard_nR.min.js"></script>
<script>
/* <![CDATA[ */
var ce = (navigator.cookieEnabled) ? true : false;
if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
    document.cookie = 'ce_cookie';
    ce = (document.cookie.indexOf('ce_cookie') != -1) ? true : false;
}
if (ce) {  // if cookies enabled

    //BOC this is not needed here in case jQuery basis is loaded in head area and rest of javascript before closing body tag, noRiddle
    $('body').append('<div id="show-cook-again">Cookies</div>');
    $('#show-cook-again').click(function () {
        if ($('#cookieGuardMsg').is(':visible')) {
            $.cookieguard.hideMessage();
        } else {
            $.cookieguard.buildMessage(true, $.cookieguard.settings.cookiesUsed, '');
            $.cookieguard.displayMessage(0, 0);
        }
    });
    //EOC this is not needed here in case jQuery basis is loaded in head area and rest of javascript before closing body tag, noRiddle
    
    $(function(){
        $.cookieguard(
            {
                'messageShowDelay'       : 1000,  //set time in msec after which cookie container appears
                'answeredHideDelay'      : 2000,  //set time in msec after which container disappears after user chose preferences
                'slideSpeed'             : 500,   //self-explanatory
                'showTop'                : true,  // true: show on top, false: show on bottom | ! css must be adapted !
            //BOC language constants
                'cookiesPrimaryTxt'      : '<?php echo COOKIES_PRIMARY_TXT; ?>',
                'cookiesSecondaryTxt'    : '<?php echo COOKIES_SECONDARY_TXT; ?>',
                'cookiesEssentialTxt'    : '<?php echo COOKIES_ESSENTIAL_TXT; ?>',
                'cookiesNonEssentialTxt' : '<?php echo COOKIES_NONESSENTIAL_TXT; ?>',
                'cookiesCookieGuardTxt'  : '<?php echo COOKIES_COOKIEGUARD_TXT; ?>',
                'cookiesUnknownTxt'      : '<?php echo COOKIES_UNKNOWN_TXT; ?>',
                'cookiesNewFoundTxt'     : '<?php echo COOKIES_NEWFOUND_TXT; ?>',
                'cookiesNewBlockTxt'     : '<?php echo COOKIES_NEWBLOCK_TXT; ?>',
                'cookiesNotAllowedTxt'   : '<?php echo COOKIES_NOTALLOWED_TXT; ?>',
                'cookiesNowAllowedTxt'   : '<?php echo COOKIES_NOWALLOWED_TXT; ?>',
                'cookiesShowTxt'         : '<?php echo COOKIES_SHOW_TXT; ?>',
                'cookiesHideTxt'         : '<?php echo COOKIES_HIDE_TXT; ?>',
                'cookiesAllowTxt'        : '<?php echo COOKIES_ALLOW_TXT; ?>',
                'cookiesBlockTxt'        : '<?php echo COOKIES_BLOCK_TXT; ?>',
                'cookiesOkayTxt'         : '<?php echo COOKIES_OKAY_TXT; ?>'
            //EOC language constants
            }
        );

        $.cookieguard.cookies.add('PHP Session', 'MODsid', '<?php echo COOKIE_MODSID_TXT; ?>', true); //true if essential cookie, false if not, noRiddle
        $.cookieguard.cookies.add('PIWIK', '_pk_id.1.c9a7,_pk_ses.1.c9a7', '<?php echo COOKIE_PIWIK_TXT; ?>', false);
        $.cookieguard.run();
    });
}  // END if cookies enabled
/*]]>*/
</script>
<?php
}
//EOC Cookie Guard noRiddle
?>

Die Options-Parameter die vor den Sprachkonstanten stehen (messageShowDelay, answeredHideDelay, slideSpeed) können auch weggelassen werden wenn sie nicht überschrieben werden sollen.
Im obigen Code sind dort die Default-Werte angegeben.

Jede Cookie-Art muß mittels
$.cookieguard.cookies.add()
aufgeführt werden (siehe Beispiele im Code oben).
Die auf der Shopseite verwendeten Cookies müssen im Browser nachgeschaut werden.
Cookies die zur selben Implementation gehören können komma-separiert eingetragen werden (siehe PIWIK-Beispiel oben).
Der Text der bei dem Cookie erscheint muß in den Sprachdateien (/lang/SPRACHE/SPRACHE.php) per Sprachkonstante nach Vorbild definiert werden.
Benutzt man beispielsweise GoogleAnalytics müssen die verwendeten Cookies wie im Beispiel PIWIK aufgeführt werden
(zweiter Parameter in $.cookieguard.cookies.add())
und es muß eine Sprachkonstante in den genannten Sprach-Dateien angelegt werden nach dem Muster define('COOKIE_GOOGLE_ANAL_TXT', 'DEIN_ERKLÄRUNGS_TEXT');

Bitte den Kommentar bezüglich Laden der Javascript-Files oben im Code beachten ("this is not needed here...").
Lädt man die jQuery-Basis im head-Bereich, alle anderen Files jedoch vor dem schließenden body-tag
- was ein schnelleres Laden der Seite zur Folge hat und als "good practise" gilt -
kann der kommentierte Code weggelassen werden.


Screenshots

Screenshot Frontend eingeklappt
screenshot1 for eu cookie directive

Screenshot Frontend ausgeklappt
screenshot2 for eu cookie directive

Screenshot Backend
screenshot3 for eu cookie directive


» nach oben