Zpět na výpis

Příklad ukládání souhlasů pro JavaScript API

5. 3. 2024 3 minuty

Níže najdete příklad řešení ukládání souhlasů, pokud používáte JavaScript API. V rámci WordPress pluginu je tato funkce zabudovaná. Využívá PHP, je tedy potřeba, aby na serveru bylo aktivní.

Pro funkční řešení budeme potřebovat dva soubory, které je možné nahrát do složky cookiesbar-consent v rootu webu, jako je v příkladu. Pokud chcete soubory umístit jinam, je potřeba upravit cestu v .js souboru. Výsledný skript ukládá souhlasy do souboru cookiesbar-consent-log.csv. Pokud neexistuje, soubor se vytvoří. Pokud se soubor nevytváří, je potřeba upravit práva složky na 0777.

Kompletní příklad je možné stáhnout zde.

cookiesbar-consent.js

// nastavení adresáře
var dir = "./cookiesbar-consent/";

var _cookiesbarjsapi = _cookiesbarjsapi || {};
_cookiesbarjsapi.consent_callback = function ( allowed_services ) {
    var currentUrl = window.location.href;
    ajax.post(dir+"cookiesbar-consent.php",{action: "save", url: currentUrl, allowed: allowed_services}, function(result){ 
        // console.log(result); 
    }
    );
};

// AJAX call pro funkčnost bez jQuery
var ajax = {};
ajax.x = function () {
    if (typeof XMLHttpRequest !== 'undefined') {
        return new XMLHttpRequest();
    }
    var versions = [
        "MSXML2.XmlHttp.6.0",
        "MSXML2.XmlHttp.5.0",
        "MSXML2.XmlHttp.4.0",
        "MSXML2.XmlHttp.3.0",
        "MSXML2.XmlHttp.2.0",
        "Microsoft.XmlHttp"
    ];

    var xhr;
    for (var i = 0; i < versions.length; i++) {
        try {
            xhr = new ActiveXObject(versions[i]);
            break;
        } catch (e) {
        }
    }
    return xhr;
};

ajax.send = function (url, callback, method, data, async) {
    if (async === undefined) {
        async = true;
    }
    var x = ajax.x();
    x.open(method, url, async);
    x.onreadystatechange = function () {
        if (x.readyState == 4) {
            callback(x.responseText)
        }
    };
    if (method == 'POST') {
        x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    }
    x.send(data)
};

ajax.get = function (url, data, callback, async) {
    var query = [];
    for (var key in data) {
        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
    }
    ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
};

ajax.post = function (url, data, callback, async) {
    var query = [];
    for (var key in data) {
        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
    }
    ajax.send(url, callback, 'POST', query.join('&'), async)
};

cookiesbar-consent.php

<?php
$file = 'cookiesbar-consent-log.csv';

// získání IP adresy
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

// pokud neexistuje soubor, založíme první dva řádky
if(!is_file($file)){
    touch($file);
    chmod($file, 0777);
    $myfile = fopen($file, "w") or die("Unable to open file!");
    $contents = '"Datum";"IP";"URL";"Povolené služby";"Údaje o klientovi"'.PHP_EOL;
    $contents .= '"'.date("d.m.Y H:i").'";"'.$ip.'";"'.$_POST["url"].'";"'.$_POST["allowed"].'";"'.$_SERVER['HTTP_USER_AGENT'].'"'.PHP_EOL;
    fwrite($myfile, $contents);
    fclose($myfile);
} else {
    // soubor existuje, přidáváme jeden záznam na konec
    $action = $_POST["action"];
    if(isset($_POST["action"])) {
        $appendVar = fopen($file,'a');
        $contents = '"'.date("d.m.Y H:i").'";"'.$ip.'";"'.$_POST["url"].'";"'.$_POST["allowed"].'";"'.$_SERVER['HTTP_USER_AGENT'].'"'.PHP_EOL;
        $wit = fwrite($appendVar,$contents);
        if($wit){
            // echo "úspěch";
        }
        fclose($appendVar);
    } else {
        // echo "neoprávněná akce";
    }
}
?>