Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: MODUL: OIL.js Cookie Consent Management

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #195 am: 28. August 2020, 12:39:55
    In /admin/cookie_consent.php verbergen sich noch drei Bugs.
    [...]

    Danke für die Hinweise, die ich gerne in Ticket #1545 ergänzt habe.

    [...]
    Wie ich gerade sehe wird das oil.js nicht mehr weiter entwickelt.
    Eine Alternative dazu gäbe es hier -> https://github.com/kiprotect/klaro
    [...]

    Ich sehe darin kein Problem. Es handelt sich ja um keine Bibliothek, sondern um ein einzelnes Skript, dessen Entwicklung abgeschlossen ist, da es den Zweck erfüllt, für den es erstellt wurde.
    Ein erneuter Austausch des Skriptes ist nicht geplant.

    Grüße

    Torsten

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #196 am: 28. August 2020, 14:42:58
    Hallo Peter33,

    ich habe die Idee aus meiner Antwort #191 jetzt mit Code konkretisiert, kannst du testen wenn du möchtest.

    In der Datei /includes/external/smarty/plugins/function.piwik.php ab ca. Zeile 55 folgende Codesequenz:

    Code: PHP  [Auswählen]
      $beginCode = '<script>';
      if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) {
        $beginCode = '<script async data-type="text/javascript" type="as-oil" data-purposes="7" data-managed="as-oil">';
      }
      $beginCode .= '
          var _paq = _paq || [];
            var u="//'
    .$url.'/";
            _paq.push([\'setSiteId\', '
    .$id.']);
            _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
            _paq.push([\'trackPageView\']);
            _paq.push([\'enableLinkTracking\']);'
    ."\n";

    mit dieser Codesequenz ersetzen:

    Code: PHP  [Auswählen]
      $beginCode = '<script>';
      if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) {
        $beginCode = '<script async id="matomo-test" data-type="text/javascript" type="as-oil" data-purposes="7" data-managed="as-oil"></script>'."\n".
                     '<script id="matomo" type="text/plain">';                        
      }
           
      $beginCode .= '
          var _paq = _paq || [];
            var u="//'
    .$url.'/";
            _paq.push([\'setSiteId\', '
    .$id.']);
            _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
            // _paq.push([\'disableCookies\']);
            _paq.push([\'trackPageView\']);
            _paq.push([\'enableLinkTracking\']);'
    ."\n";

    Dann in der Datei /templates/dein_template/javascript/general_bottom.js.php ganz am Ende, also nach "?>" folgenden Code einfügen:

    Code: PHP  [Auswählen]
    <?php if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) { ?>
    <script>    
      $(document).ready(function(){
     
        function getCookie(cname) {
          var name = cname + "=";
          var decodedCookie = decodeURIComponent(document.cookie);
          var ca = decodedCookie.split(';');
          for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
              c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
              return c.substring(name.length, c.length);
            }
          }
          return "";
        }
               
        (function () {
          var oilCookie = getCookie('oil_data');
          var type = $('#matomo-test').attr('type');
          var text = $('#matomo').text();
          if (oilCookie != "" && type == 'as-oil') {
            $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).attr('type','text/javascript');
          } else if (oilCookie != "" && type == 'text/javascript') {
            $('#matomo').attr('type','text/javascript');
          }
        })();
       
        $('.as-oil__btn-optin').click(function() {
          var oilCookie = getCookie('oil_data');
          var type = $('#matomo-test').attr('type');
          var text = $('#matomo').text();
          if (oilCookie != "" && type == 'as-oil') {
            $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).attr('type','text/javascript');
          } else if (oilCookie != "" && type == 'text/javascript') {
            $('#matomo').attr('type','text/javascript');
          }
        });
                 
      });
    </script>
    <?php } ?>

    Gruss
    Hanspeter

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #197 am: 28. August 2020, 15:16:18
    [...]
    Dann in der Datei /templates/dein_template/javascript/general_bottom.js.php ganz am Ende, also nach "?>" folgenden Code einfügen:
    [...]

    Alternativ eine neue Datei in "/templates/dein_template/javascript/extra/" erstellen.

    Grüße

    Torsten

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #198 am: 28. August 2020, 15:24:04
    Präzis, aber es geht nur mal ums testen.

    Gruss
    Hanspeter

    Peter33

    • Fördermitglied
    • Beiträge: 73
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #199 am: 28. August 2020, 21:46:39
    @ hpzeller

    ich habe das gerade eingebaut, aber im Moment funktioniert es leider nicht. Es wird weder getrackt noch bei ALLE AKZEPTIEREN oder "ALLE AKTIVIEREN" und anschließender Speicherung das Matomo Cookie gesetzt. Von der Idee her sieht es, soweit ich es verstehe, sehr gut aus. Wenn ich das im Developer Tools des Browser betrachte, gibt es aber keinen switch zwischen

    Code: Javascript  [Auswählen]
     // _paq.push([\'disableCookies\']);

    und

    Code: Javascript  [Auswählen]
      _paq.push([\'disableCookies\']);

    Sieht so aus, als würde es durch Klicken auf "Speichern" nicht angesprochen. Fehlermeldungen gibt es aber keine.

     Ich hatte heute Vormittag eine etwas unelegante Lösung gefunden. Im Backend des Moduls (Cookie Consent) habe ich das "lesbares Cookie setzen" auf "true" gesetzt und in der Datei /includes/external/smarty/plugins/function.piwik.php den Code so verändert:

    Code: PHP  [Auswählen]
      if ((defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true')) {
        if (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING')) {
     //     $beginCode = '<script async data-type="text/javascript" type="as-oil" data-purposes="7" data-managed="as-oil">';
            $matomoallow = '"7\":true';
            if (isset($_COOKIE['MODOilTrack']) && strpos(($_COOKIE['MODOilTrack']),$matomoallow)){
          $beginCode .= '
              var _paq = _paq || [];
                var u="//'
    .$url.'/";
                _paq.push([\'setSiteId\', '
    .$id.']);
                _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
                _paq.push([\'trackPageView\']);
                _paq.push([\'enableLinkTracking\']);'
    ."\n";
        } else {
          $beginCode = '<script>';
          $beginCode .= '
              var _paq = _paq || [];
                var u="//'
    .$url.'/";
                _paq.push([\'setSiteId\', '
    .$id.']);
                _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
                _paq.push([\'disableCookies\']);
                _paq.push([\'trackPageView\']);
                _paq.push([\'enableLinkTracking\']);'
    ."\n";
        }
      }
      }

    Das funktioniert im Prinzip soweit, aber mit dem Manko, dass erst nach Refresh der Seite, oder wenn der Besucher weitersurft, das gewünschte Matomo Cookie gesetzt wird. Und außerdem wird von dem Consent Tool noch ein zusätzliches Cookie gesetzt ("MODOilTrack"). Deine Lösung wäre mir da lieber.

    Grüße
    Peter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #200 am: 30. August 2020, 13:54:41
    Hallo Peter,

    ich habe den Code aus meiner Antwort #196 jetzt nochmals überarbeitet, kannst du testen wenn du möchtest.

    In der Datei /includes/external/smarty/plugins/function.piwik.php ab ca. Zeile 55 folgende Codesequenz:

    Code: PHP  [Auswählen]
      $beginCode = '<script>';
      if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) {
        $beginCode = '<script async data-type="text/javascript" type="as-oil" data-purposes="7" data-managed="as-oil">';
      }
      $beginCode .= '
          var _paq = _paq || [];
            var u="//'
    .$url.'/";
            _paq.push([\'setSiteId\', '
    .$id.']);
            _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
            _paq.push([\'trackPageView\']);
            _paq.push([\'enableLinkTracking\']);'
    ."\n";

    mit dieser Codesequenz ersetzen.

    Code: PHP  [Auswählen]
      $beginCode = '<script>';
      if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) {
        $beginCode = '<script async data-type="text/javascript" type="as-oil" data-purposes="7" data-managed="as-oil"></script>'."\n".
                     '<script id="matomo" type="text/plain">';                        
      }
           
      $beginCode .= '
          var _paq = _paq || [];
            var u="//'
    .$url.'/";
            _paq.push([\'setSiteId\', '
    .$id.']);
            _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);
            // _paq.push([\'disableCookies\']);
            _paq.push([\'trackPageView\']);
            _paq.push([\'enableLinkTracking\']);'
    ."\n";

    Dann in der Datei /templates/dein_template/javascript/general_bottom.js.php ganz am Ende, also nach "?>" folgenden Code einfügen.

    Code: PHP  [Auswählen]
    <?php if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) { ?>
    <script>    
      $(document).ready(function(){
     
        function getCookie(cname) {
          var name = cname + "=";
          var decodedCookie = decodeURIComponent(document.cookie);
          var ca = decodedCookie.split(';');
          for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
              c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
              return c.substring(name.length, c.length);
            }
          }
          return "";
        }
               
        (function () {
          var oilCookie = getCookie('oil_data');
          var type = $('script[data-purposes="7"]').attr('type');
          var text = $('#matomo').text();
          if (oilCookie != "" && type == 'as-oil') {
            $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).removeAttr('type');                
            $('#matomo').replaceWith(document.getElementById("matomo").outerHTML);                
          } else if (oilCookie != "" && (type == 'text/javascript' || type == null)) {
            $('#matomo').removeAttr('type');
            $('#matomo').replaceWith(document.getElementById("matomo").outerHTML);                
          }
        })();
       
        $('.as-oil__btn-optin').click(function() {
          var oilCookie = getCookie('oil_data');
          var type = $('script[data-purposes="7"]').attr('type');
          var text = $('#matomo').text();
          if (oilCookie != "" && type == 'as-oil') {
            $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).removeAttr('type');                
            $('#matomo').replaceWith(document.getElementById("matomo").outerHTML);                
          } else if (oilCookie != "" && (type == 'text/javascript' || type == null)) {
            $('#matomo').removeAttr('type');
            $('#matomo').replaceWith(document.getElementById("matomo").outerHTML);                
          }
        });
                 
      });
    </script>
    <?php } ?>

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #201 am: 30. August 2020, 21:38:13
    Nachtrag:

    Sollte der gepostet Code grundsätzlich funktionieren aber der erste Aufruf des Shopbesuchers nicht getrackt werden, könnte dies am Timing liegen. Ich poste hier deshalb noch eine andere Variante des Codes welcher in die Datei /templates/dein_template/javascript/general_bottom.js.php ganz am Ende, also nach "?>" einzufügen ist.

    Code: PHP  [Auswählen]
    <?php if (defined('MODULE_COOKIE_CONSENT_STATUS') && strtolower(MODULE_COOKIE_CONSENT_STATUS) == 'true' && (in_array(7, $_SESSION['tracking']['allowed']) || defined('COOKIE_CONSENT_NO_TRACKING'))) { ?>
    <script>  
      $(document).ready(function(){

        function getCookie(cname) {
          var name = cname + "=";
          var decodedCookie = decodeURIComponent(document.cookie);
          var ca = decodedCookie.split(';');
          for(var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
              c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
              return c.substring(name.length, c.length);
            }
          }
          return "";
        }

        (function () {
          var oilCookie = getCookie('oil_data');
          var type = $('script[data-purposes="7"]').attr('type');
          var text = $('#matomo').text();
          if (oilCookie != "") {
            if (type == 'as-oil') {
              $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).removeAttr('type').replaceWith(document.getElementById("matomo").outerHTML);              
            } else if (type == 'text/javascript' || type == null) {
              $('#matomo').removeAttr('type').replaceWith(document.getElementById("matomo").outerHTML);              
            }
          }
        })();

        $('.as-oil__btn-optin').click(function() {
          setTimeout(function() {
            var oilCookie = getCookie('oil_data');
            var type = $('script[data-purposes="7"]').attr('type');
            var text = $('#matomo').text();
            if (oilCookie != "") {
              if (type == 'as-oil') {
                $('#matomo').text(text.replace("// _paq.push(['disableCookies']);", "_paq.push(['disableCookies']);")).removeAttr('type').replaceWith(document.getElementById("matomo").outerHTML);              
              } else if (type == 'text/javascript' || type == null) {
                $('#matomo').removeAttr('type').replaceWith(document.getElementById("matomo").outerHTML);              
              }
            }
          }, 300);
        });

      });
    </script>
    <?php } ?>

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #202 am: 30. August 2020, 22:34:11
    In /admin/cookie_consent.php verbergen sich noch drei Bugs.
    [...]

    Danke für die Hinweise, die ich gerne in Ticket #1545 ergänzt habe.

    [...]
    Wie ich gerade sehe wird das oil.js nicht mehr weiter entwickelt.
    Eine Alternative dazu gäbe es hier -> https://github.com/kiprotect/klaro
    [...]

    Ich sehe darin kein Problem. Es handelt sich ja um keine Bibliothek, sondern um ein einzelnes Skript, dessen Entwicklung abgeschlossen ist, da es den Zweck erfüllt, für den es erstellt wurde.
    Ein erneuter Austausch des Skriptes ist nicht geplant.
    [...]

    Also ich habe das Skript oil.min.js aus dem Downloadpaket durch unminify.com laufen lassen. Das Ergebnis zeigt mir, dass das OIL.js 5251 Codezeilen hat, meiner Meinung nach kann man doch nicht erwarten das ein so umfangreiches Skript ohne Fehler ist und keiner Pflege bedarf.

    PS:
    Im Downloadpaket fehlt der Quellcode des Skripts oil.min.js, welcher ja bei einer unter GPL 2.0 lizenzierten Software laut Lizenzbestimmungen zwingend geliefert werden muss.

    Gruss
    Hanspeter

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #203 am: 30. August 2020, 23:51:13
    Wo fehlt der Quellcode!? Meinst du Dateiheader!? Der ist gesetzt.
    Falls du die dekomprimierte Datei meinst, so liegst du auf dem Holzweg! Komprimiert ist weiterhin quelloffen! Nicht zu verwechseln mit verschlüsselt! :!:

    Wir bleiben jetzt erstmal bei "oil.js". Wir sehen aktuell keinerlei Grund zu einem erneuten Wechsel!

    Grüße

    Torsten

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #204 am: 31. August 2020, 00:15:16
    Mit Quellcode meinte ich was man z.B. hier -> https://github.com/as-ideas/oil/releases bekommt.

    Gruss
    Hanspeter

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #205 am: 31. August 2020, 00:26:36
    Ja und!? Nur weil dort mehr Dateien zur Verfügung gestellt werden, heisst das für uns nicht, dass wir die alle mit ausliefern müssen, wenn wir nur die "oil.min.js" verwenden.
    Der Dateiheader der "oil.min.js" wurde unverändert übernommen und das ist alles, was zählt.
    Ich weiss nicht, woher du deine GPL-Kenntnisse her nimmst!? :-?

    Grüße

    Torsten

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #206 am: 31. August 2020, 00:33:36
    Ja und!? Nur weil dort mehr Dateien zur Verfügung gestellt werden, heisst das für uns nicht, dass wir die alle mit ausliefern müssen, wenn wir nur die "oil.min.js" verwenden.
    [...]

    Wenn der Quellcode sehr umfangreich ist muss man z.B. mit einem Link zu den Quellen verweisen.

    [...]
    Ich weiss nicht, woher du deine GPL-Kenntnisse her nimmst!? :-?
    [...]

    Ich verkneife es mir dir die gleiche Frage zu stellen.

    Gruss
    Hanspeter

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.185
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #207 am: 31. August 2020, 00:53:13
    Soso... stell die Frage ruhig. Es wäre mir neu, aber da du immer noch keine Quelle deines Wissens angegeben hast, beziehe ich mich weiterhin auf das, was die GPLv2 besagt.

    Grüße

    Torsten

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #208 am: 31. August 2020, 03:00:44
    Wo fehlt der Quellcode!? Meinst du Dateiheader!? Der ist gesetzt.
    Falls du die dekomprimierte Datei meinst, so liegst du auf dem Holzweg! Komprimiert ist weiterhin quelloffen!
    [...]

    Hier nochmals der Link aus deiner Antwort #207 zur Übersetzung der GPLv2

    Zitat aus dem Vorwort der verlinkten Seite.
    Zitat
    Die Bezeichnung „freie“ Software bezieht sich auf Freiheit, nicht auf den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren, Kopien freier Software zu verbreiten (und etwas für diesen Service zu berechnen, wenn Sie möchten), die Möglichkeit, die Software im Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die Lizenzen sollen garantieren, daß Sie die Software ändern oder Teile davon in neuen freien Programmen verwenden dürfen – und daß Sie wissen, daß Sie dies alles tun dürfen

    Zitat aus §3 der verlinkten Seite.
    Zitat
    Unter dem Quelltext eines Werkes wird diejenige Form des Werkes verstanden, die für Bearbeitungen vorzugsweise verwendet wird.

    Obwohl du etwas sonderbar formulierst

    [...] Komprimiert ist weiterhin quelloffen! Nicht zu verwechseln mit verschlüsselt! :!:
    [...]

    so hast du wohl gemeint, wenn man die Sätze zusammenhängend liest

    Wo fehlt der Quellcode!? Meinst du Dateiheader!? Der ist gesetzt.
    Falls du die dekomprimierte Datei meinst, so liegst du auf dem Holzweg! Komprimiert ist weiterhin quelloffen! [...]

    dass du der Ansicht bist, das ein komprimiertes JavaScript als Quelltext gelte, aber diese Behauptung ist laut obigem Zitat falsch.

    Was mir noch auf dem Magen liegt ist das ihr im Modul den 1.3.6 SNAPSHOT und nicht das letzte Release 1.3.5 verwendet.

    Gruss
    Hanspeter

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: MODUL: OIL.js Cookie Consent Management
    Antwort #209 am: 31. August 2020, 03:47:51
    Nachtrag:

    Ich habe jetzt gesehen, dass auf das Release 1.3.5 nur noch 7 commits folgen die den Code nicht verändern, somit ist mein letzter Satz obsolet.

    Gruss
    Hanspeter
    Werbung / Banner buchen
    11 Antworten
    2489 Aufrufe
    10. Dezember 2021, 21:55:58 von gdl-joe
    11 Antworten
    3305 Aufrufe
    17. Dezember 2021, 12:40:07 von Pixelknecht
    8 Antworten
    1360 Aufrufe
    16. Oktober 2023, 16:47:54 von Tomcraft
    2 Antworten
    766 Aufrufe
    07. Oktober 2022, 13:16:22 von Viol