Files
szkoleniauryzaj.pl/wp-content/plugins/beautiful-and-responsive-cookie-consent/class/class-nsc_bar_cookie_handler.php
2024-11-10 21:08:49 +01:00

241 lines
11 KiB
PHP

<?php
class nsc_bar_cookie_handler
{
private $banner_configs_object;
private $cookie_configs;
private $plugin_configs;
public function __construct()
{
$this->get_plugin_configs();
$this->get_banner_configs();
$this->get_cookie_configs();
}
public function nsc_bar_set_itp_cookie()
{
if ($this->plugin_configs->nsc_bar_get_option('activate_banner') == true &&
$this->plugin_configs->nsc_bar_get_option('backend_cookie_conversion') == true) {
$expiryDate = $this->get_expiry_date($this->cookie_configs['name'], $this->cookie_configs['expirydays']);
if (isset($_COOKIE[$this->cookie_configs['name']])) {
$this->set_cookie($this->cookie_configs['name'], $_COOKIE[$this->cookie_configs['name']], $expiryDate, $this->cookie_configs['path'], $this->cookie_configs['domain'], $this->cookie_configs['secure']);
$this->set_cookie(ITP_SAVER_COOKIE_NAME, $this->cookie_configs['name'] . "---_---" . $expiryDate, $expiryDate, $this->cookie_configs['path'], $this->cookie_configs['domain'], $this->cookie_configs['secure'], true);
}
if (!empty($this->cookie_configs['cookietypes'])) {
foreach ($this->cookie_configs['cookietypes'] as $cookietype_configs) {
$differentiatedCookieName = $this->cookie_configs['name'] . "_" . $cookietype_configs["cookie_suffix"];
if (isset($_COOKIE[$differentiatedCookieName])) {
$this->set_cookie($differentiatedCookieName, $_COOKIE[$differentiatedCookieName], $expiryDate, $this->cookie_configs['path'], $this->cookie_configs['domain'], $this->cookie_configs['secure']);
}
}
}
}
}
public function nsc_bar_set_default_cookies()
{
if ($this->plugin_configs->nsc_bar_get_option('activate_banner') == false) {
return;
}
if ($this->banner_configs_object->nsc_bar_get_cookie_setting("setDiffDefaultCookiesFirstPV", $this->plugin_configs->nsc_bar_return_settings_field_default_value("setDiffDefaultCookiesFirstPV")) == false) {
return;
}
$expiryDate = $this->get_expiry_date($this->cookie_configs['name'], $this->cookie_configs['expirydays']);
if (in_array($this->cookie_configs['compliance_type'], array("detailed", "detailedRev")) && !empty($this->cookie_configs['cookietypes'])) {
foreach ($this->cookie_configs['cookietypes'] as $cookietype_configs) {
$differentiatedCookieName = $this->cookie_configs['name'] . "_" . $cookietype_configs["cookie_suffix"];
$value = "deny";
if ($cookietype_configs["checked"] == "checked") {
$value = "allow";
}
if (!isset($_COOKIE[$differentiatedCookieName])) {
$this->set_cookie($differentiatedCookieName, $value, $expiryDate, $this->cookie_configs['path'], $this->cookie_configs['domain'], $this->cookie_configs['secure']);
}
}
}
}
public function nsc_bar_get_cookies_by_name($cookie_name)
{
$input_validation = new nsc_bar_input_validation();
if (isset($_COOKIE[$cookie_name])) {
return $input_validation->nsc_bar_sanitize_input($_COOKIE[$cookie_name]);
}
return null;
}
public function nsc_bar_delete_cookie_for_preview()
{
if ($this->plugin_configs->nsc_bar_get_option('activate_test_banner') == true &&
stripos($_SERVER["REQUEST_URI"], "page=nsc_bar-cookie-consent") !== false) {
$this->nsc_bar_delete_cookie();
}
}
//TODO: remove if everbody is a time on >2.1. needed for migration from 2.0 to 2.1, because the content of the cookieconsent_status cookie was changed in case of differentiated consent. from "detailed" to savesettings
public function nsc_bar_migrate_cookie_detailed_to_savesettings()
{
if (isset($_COOKIE[$this->cookie_configs['name']]) && $_COOKIE[$this->cookie_configs['name']] == "detailed") {
$expiryDate = $this->get_expiry_date($this->cookie_configs['name'], $this->cookie_configs['expirydays']);
$this->set_cookie($this->cookie_configs['name'], "savesettings", $expiryDate, $this->cookie_configs['path'], $this->cookie_configs['domain'], $this->cookie_configs['secure']);
}
}
public function nsc_bar_cookie_cleanup()
{
if (!isset($_COOKIE[$this->cookie_configs['name']])) {
return;
}
$input_validation = new nsc_bar_input_validation();
$current_cookie_value = $input_validation->nsc_bar_sanitize_input($_COOKIE[$this->cookie_configs['name']]);
if ($this->cookie_configs['compliance_type'] == "info" && $current_cookie_value != "dismiss") {
$this->nsc_bar_delete_cookie();
}
if (in_array($this->cookie_configs['compliance_type'], array("opt-in", "opt-out")) && !in_array($current_cookie_value, array("deny", "allow"))) {
$this->nsc_bar_delete_cookie();
}
if ($this->cookie_configs['compliance_type'] == "detailed" && !in_array($current_cookie_value, array("savesettings", "detailed"))) {
$this->nsc_bar_delete_cookie();
}
if ($this->cookie_configs['compliance_type'] == "detailedRev" && !in_array($current_cookie_value, array("savesettings", "allowall"))) {
$this->nsc_bar_delete_cookie();
}
if ($this->plugin_configs->nsc_bar_get_option('ask_until_acceptance') == "1" && $current_cookie_value == "deny") {
$this->nsc_bar_delete_cookie();
}
if ($this->plugin_configs->nsc_bar_get_option('ask_until_acceptance') == "1" && in_array($this->cookie_configs['compliance_type'], array("detailed", "detailedRev"))) {
foreach ($this->cookie_configs['cookietypes'] as $cookietype_configs) {
$differentiatedCookieName = $this->cookie_configs['name'] . "_" . $cookietype_configs["cookie_suffix"];
if (isset($_COOKIE[$differentiatedCookieName]) && $_COOKIE[$differentiatedCookieName] != "allow") {
$this->nsc_bar_delete_cookie(false);
}
}
}
}
public function nsc_bar_delete_cookie($delete_detailed = true)
{
if (isset($_COOKIE[$this->cookie_configs['name']])) {
unset($_COOKIE[$this->cookie_configs['name']]);
$this->set_cookie($this->cookie_configs['name'], "emptyvalue", time() - 3600, $this->cookie_configs['path'], $this->cookie_configs['domain']);
//delete itp saver cookie as well, if cookie is deleted
if (isset($_COOKIE[ITP_SAVER_COOKIE_NAME])) {
unset($_COOKIE[ITP_SAVER_COOKIE_NAME]);
$this->set_cookie(ITP_SAVER_COOKIE_NAME, "emptyvalue", time() - 3600, $this->cookie_configs['path'], $this->cookie_configs['domain']);
}
}
if ($delete_detailed === false) {
return;
}
if (!empty($this->cookie_configs['cookietypes'])) {
foreach ($this->cookie_configs['cookietypes'] as $cookietype_configs) {
$differentiatedCookieName = $this->cookie_configs['name'] . "_" . $cookietype_configs["cookie_suffix"];
if (isset($_COOKIE[$differentiatedCookieName])) {
unset($_COOKIE[$differentiatedCookieName]);
$this->set_cookie($differentiatedCookieName, "emptyvalue", time() - 3600, $this->cookie_configs['path'], $this->cookie_configs['domain']);
}
}
}
}
/*
will return the expirydate.
if the cookie was already handled by the saver it will return the original date stored in a cookie
if the cookie was never handled by this script it will create a fresh one.
*/
private function get_expiry_date($cookiename, $expiryDays)
{
$expiryDate = time() + 60 * 60 * 24 * $expiryDays;
if (!isset($_COOKIE[ITP_SAVER_COOKIE_NAME])) {
return $expiryDate;
}
$input_validation = new nsc_bar_input_validation();
$expiryCookie = $input_validation->nsc_bar_sanitize_input($_COOKIE[ITP_SAVER_COOKIE_NAME]);
$done_cookie_values = explode("---_---", $expiryCookie);
if (count($done_cookie_values) != 2) {
return $expiryDate;
}
if ($done_cookie_values[0] != $cookiename) {
return $expiryDate;
}
return $done_cookie_values[1];
}
private function get_banner_configs()
{
if (empty($this->banner_configs_object)) {
$this->banner_configs_object = new nsc_bar_banner_configs();
}
return $this->banner_configs_object;
}
private function get_plugin_configs()
{
if (empty($this->plugin_configs)) {
$this->plugin_configs = new nsc_bar_plugin_configs;
}
return $this->plugin_configs;
}
private function get_cookie_configs()
{
if (empty($this->cookie_configs)) {
$this->cookie_configs['name'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookie_name", $this->plugin_configs->nsc_bar_return_settings_field_default_value("cookie_name"));
$this->cookie_configs['path'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookie_path", "/");
$this->cookie_configs['domain'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookie_domain", $this->plugin_configs->nsc_bar_return_settings_field_default_value("cookie_domain"));
$this->cookie_configs['expirydays'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookie_expiryDays", $this->plugin_configs->nsc_bar_return_settings_field_default_value("cookie_expiryDays"));
$this->cookie_configs['secure'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookie_secure", false);
$this->cookie_configs['cookietypes'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("cookietypes", array());
$this->cookie_configs['compliance_type'] = $this->banner_configs_object->nsc_bar_get_cookie_setting("type", $this->plugin_configs->nsc_bar_return_settings_field_default_value("type"));
if (empty($this->cookie_configs['domain'])) {
$this->cookie_configs['domain'] = "";
}
}
return $this->cookie_configs;
}
private function set_cookie($name, $value, $expire, $path, $domain, $secure = false, $httpOnly = false)
{
if (version_compare(phpversion(), '7.3', '<')) {
setcookie($name, $value, $expire, $path . '; samesite=lax', $domain, $secure, $httpOnly);
return;
}
setcookie($name, $value, [
'expires' => $expire,
'path' => $path,
'domain' => $domain,
'samesite' => 'lax',
'secure' => $secure,
'httponly' => $httpOnly,
]);
}
}