From 590ae448bc177ac274099301c313889168fd58fb Mon Sep 17 00:00:00 2001 From: Jarek Rozanski Date: Wed, 1 May 2024 22:11:05 +0000 Subject: [PATCH] WP Upgrade; DNT support --- README.md | 2 +- readme.txt | 12 ++++++++---- types/WideAngleAttributes.php | 7 ++++--- types/WideAngleGenerator.php | 6 +++--- types/WideAngleHelpers.php | 18 +++++++++--------- views/admin_settings.php | 36 ++++++++++++++--------------------- wide-angle-analytics.php | 17 +++++++++-------- 7 files changed, 48 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 84d4048..a186347 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Easily add [Wide Angle Analytics](https://wideangle.co) tracker script to your W * Requires at least: 5.2 -* Tested up to: 6.1.1 +* Tested up to: 6.5.2 * Requires PHP: 7.2 diff --git a/readme.txt b/readme.txt index 32f7ea7..20a143e 100644 --- a/readme.txt +++ b/readme.txt @@ -2,9 +2,9 @@ Contributors: jrozanski,inputobjects Tags: web analytics, tracking, web traffic, analytics, statistics, stats Requires at least: 5.2 -Tested up to: 6.1.1 +Tested up to: 6.5.2 Requires PHP: 7.2 -Stable tag: 1.0.7 +Stable tag: 1.0.8 License: GPLv2 Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script. @@ -61,7 +61,12 @@ We run a business around serving the needs of our customer. That's you. You will find most of your answers in the [Knowledge Base](https://wideangle.co/documentation). Should you require further assistance, please [get in touch](https://wideangle.co/support) with our team. == Changelog == -V1.0.7 +V1.0.8 +- Expose DNT Flag override +- Test with WordPress 6.5.2 +- Drop un-used ePrivacy flag + +V1.0.7 - Fix configuration of custom RegEx in the exclusion paths - Test with WordPress 6.1.1 @@ -71,4 +76,3 @@ V1.0.6 V1.0.5 - Support for `data-waa-fingerprint` toggle enabling optional browser fingerprinting. - Fix the header generate to use valid `prefetch` attribute - diff --git a/types/WideAngleAttributes.php b/types/WideAngleAttributes.php index d3f32b0..71413ef 100644 --- a/types/WideAngleAttributes.php +++ b/types/WideAngleAttributes.php @@ -3,13 +3,13 @@ class WideAngleAttributes { public $siteId; public $ignoreHash; public $fingerprint; - public $ePrivacyMode; public $trackerDomain; public $exclusionString; public $includeParamsString; + public $supressDnt; private $helpers; - public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint, $ePrivacyMode) { + public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint, $supressDnt) { $this->siteId = $siteId; $this->trackerDomain = $trackerDomain; $this->ignoreHash = $ignoreHash; @@ -17,6 +17,7 @@ class WideAngleAttributes { $this->includeParamsString = $includeParamsString; $this->fingerprint = $fingerprint; $this->ePrivacyMode = $ePrivacyMode; + $this->supressDnt = $supressDnt; $this->helpers = new WideAngleHelpers(); } @@ -26,7 +27,7 @@ class WideAngleAttributes { 'tracker_domain' => $this->trackerDomain, 'ignore_hash' => $this->ignoreHash, 'fingerprint' => $this->fingerprint, - 'eprivacy_mode' => $this->ePrivacyMode, + 'supress_dnt' => $this->supressDnt, 'exclusion_paths' => $this->generateExclusionsAttribute(), 'include_params' => $this->generateIncludeParamsAttribute() ); diff --git a/types/WideAngleGenerator.php b/types/WideAngleGenerator.php index ff3499c..effa479 100644 --- a/types/WideAngleGenerator.php +++ b/types/WideAngleGenerator.php @@ -15,7 +15,7 @@ class WideAngleGenerator { $this->exclusionPaths = $attributes['exclusion_paths']; $this->includeParams = $attributes['include_params']; $this->fingerprint = $attributes['fingerprint']; - $this->ePrivacyMode = $attributes['eprivacy_mode']; + $this->supressDnt = $attributes['supress_dnt']; } @@ -33,13 +33,13 @@ EOD; $includeParamsAttribute = $this->includeParams != '' ? "data-waa-inc-params=\"" . esc_attr($this->includeParams) . "\"": ''; $ignoreHashAttribute = $this->ignoreHash != '' ? "data-waa-ignore-hash=\"" . esc_attr($this->ignoreHash) . "\"": 'data-waa-ignore-hash="false"'; $fingerprintAttribute = $this->fingerprint != '' ? "data-waa-fingerprint=\"" . esc_attr($this->fingerprint) . "\"": ''; - $ePrivacyModeAttribute = $this->ePrivacyMode == 'consent' ? "data-waa-eprivacy-mode=\"" . esc_attr($this->ePrivacyMode) . "\"": ''; + $supressDntAttribute = $this->supressDnt != '' ? "data-waa-dnt-supress=\"" . esc_attr($this->supressDnt) . "\"": 'data-waa-dnt-supress="false"'; $script = << EOD; diff --git a/types/WideAngleHelpers.php b/types/WideAngleHelpers.php index 062215a..4cf4eef 100644 --- a/types/WideAngleHelpers.php +++ b/types/WideAngleHelpers.php @@ -29,6 +29,14 @@ class WideAngleHelpers { } } + function validateSupressDntFlag($name, $supressDnt) { + if(filter_var($supressDnt, FILTER_VALIDATE_BOOLEAN)) { + return WideAngleValidated::createValid($name, $supressDnt, "true"); + } else { + return WideAngleValidated::createValid($name, $supressDnt, "false"); + } + } + function validateFingerprint($name, $fingerprint) { if(filter_var($fingerprint, FILTER_VALIDATE_BOOLEAN)) { return WideAngleValidated::createValid($name, $fingerprint, "true"); @@ -37,14 +45,6 @@ class WideAngleHelpers { } } - function validateEPrivacyMode($name, $ePrivacyMode) { - if($ePrivacyMode === 'consent') { - return WideAngleValidated::createValid($name, $ePrivacyMode, "consent"); - } else { - return WideAngleValidated::createValid($name, $ePrivacyMode, "disabled"); - } - } - function validateSiteId($name, $siteId) { if(preg_match("/^[a-zA-Z0-9]{10,24}$/", $siteId)) { return WideAngleValidated::createValid($name, $siteId, strtoupper(trim($siteId))); @@ -85,7 +85,7 @@ class WideAngleHelpers { if(preg_match(self::excludePathRequestKeyPattern, $key, $idx)) { $valueKey = "waa_exc_path_".$idx[1]."_value"; $sanitizedValue = trim(sanitize_text_field($request[$valueKey])); - if($sanitizedValue != null) { + if($sanitizedValue != null) { $asRegExp = "/" . wp_unslash($sanitizedValue) . "/"; if(@preg_match($asRegExp, null) === 0) { $typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS); diff --git a/views/admin_settings.php b/views/admin_settings.php index 23d4494..92a86c8 100644 --- a/views/admin_settings.php +++ b/views/admin_settings.php @@ -2,8 +2,8 @@ $siteId = wp_unslash($this->settings[self::WAA_CONF_SITE_ID]); $trackerDomain = wp_unslash($this->settings[self::WAA_CONF_TRACKER_DOMAIN]); $ignoreHash = filter_var($this->settings[self::WAA_CONF_IGNORE_HASH], FILTER_VALIDATE_BOOLEAN); +$supressDnt = filter_var($this->settings[self::WAA_CONF_SUPRESS_DNT], FILTER_VALIDATE_BOOLEAN); $fingerprint = filter_var($this->settings[self::WAA_CONF_FINGERPRINT], FILTER_VALIDATE_BOOLEAN); -$ePrivacyMode = wp_unslash($this->settings[self::WAA_CONF_EPRIVACY_MODE]); $parsedExclusions = $this->plugin->helpers->parseExclusionSetting(wp_unslash($this->settings[self::WAA_CONF_EXC_PATHS])); $parsedIncludeParams = $this->plugin->helpers->parseIncludeParamsSetting(wp_unslash($this->settings[self::WAA_CONF_INC_PARAMS])); $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_ATTRIBUTES]); @@ -124,7 +124,19 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT /> Ignore -

By default, w URL Fragment/hash is trasmitted as part of the tracking event. You can disable this behaviour. The fragment will be stripped before sending an event.

+

By default, URL Fragment/hash is trasmitted as part of the tracking event. You can disable this behaviour. The fragment will be stripped before sending an event.

+ + + + + +
+ Supress Do-Not-Track + +
+

Wide Angle Analytics respects Do-Not-Track (DNT) browser flag by default. You override this behaviour and always ignore this flag. Please consult relevant laws and regulation whether overriding DNT requires user consent.

@@ -139,26 +151,6 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT

The tracker script will not attempt to fingerprint the browser by default. You can improve tracking qaulity by enabling more reliable browser fingerprinting. Enabling this feature might require collecting consent.

- - - -
- Browser Fingerprinting - -
-

When you disable tracking, the script collects only bare-bone information. You can opt for more verbose tracking, but be aware that according to ePrivacy Regulations, this might require visitor's consent.

- - plugin->name, $this->plugin->name . '_nonce' ); ?> diff --git a/wide-angle-analytics.php b/wide-angle-analytics.php index a9d8325..bda8e50 100644 --- a/wide-angle-analytics.php +++ b/wide-angle-analytics.php @@ -5,7 +5,7 @@ Description: Easily enable and configure Wide Angle Analytics on your Wordpress site Author: Wide Angle Analytics by Input Objects GmbH Author URI: https://wideangle.co - Version: 1.0.7 + Version: 1.0.8 Requires at least: 5.2 Requires PHP: 7.2 License: GPL v2 @@ -18,10 +18,10 @@ class WideAngleAnalytics { const WAA_CONF_SITE_ID = "waa_site_id"; const WAA_CONF_TRACKER_DOMAIN = "waa_tracker_domain"; const WAA_CONF_FINGERPRINT = "waa_fingerprint"; - const WAA_CONF_EPRIVACY_MODE = "waa_eprivacy_mode"; const WAA_CONF_EXC_PATHS = "waa_exc_path"; const WAA_CONF_INC_PARAMS = "waa_inc_params"; const WAA_CONF_IGNORE_HASH = "waa_ignore_hash"; + const WAA_CONF_SUPRESS_DNT = "waa_supress_dnt"; const WAA_CONF_ATTRIBUTES = "waa_attributes"; public function __construct() { @@ -123,12 +123,12 @@ class WideAngleAnalytics { $waaTrackerDomain = $this->plugin->helpers->validateTrackerDomain(self::WAA_CONF_TRACKER_DOMAIN, sanitize_text_field($_REQUEST['waa_tracker_domain'])); $waaIgnoreHash = $this->plugin->helpers->validateIgnoreHashFlag(self::WAA_CONF_IGNORE_HASH, sanitize_text_field($_REQUEST['waa_ignore_hash'])); $waaFingerprint = $this->plugin->helpers->validateFingerprint(self::WAA_CONF_FINGERPRINT, sanitize_text_field($_REQUEST['waa_fingerprint'])); - $waaEPrivacyMode = $this->plugin->helpers->validateEPrivacyMode(self::WAA_CONF_EPRIVACY_MODE, sanitize_text_field($_REQUEST['waa_eprivacy_mode'])); + $waaSupressDnt = $this->plugin->helpers->validateSupressDntFlag(self::WAA_CONF_SUPRESS_DNT, sanitize_text_field($_REQUEST['waa_supress_dnt'])); $waaIncParams = $this->plugin->helpers->validateIncludeParams(self::WAA_CONF_INC_PARAMS, $_REQUEST); $waaExclusionPaths = $this->plugin->helpers->validateExclusionPathsRequest(self::WAA_CONF_EXC_PATHS, $_REQUEST); include_once( $this->plugin->folder . '/types/WideAngleAttributes.php'); - $merged = array($waaSiteId, $waaTrackerDomain, $waaIgnoreHash, $waaIncParams, $waaExclusionPaths); + $merged = array($waaSiteId, $waaTrackerDomain, $waaIgnoreHash, $waaIncParams, $waaExclusionPaths, $waaSupressDnt); $errors = array(); foreach($merged as $validated) { if(!$validated->is_valid()) { @@ -144,7 +144,7 @@ class WideAngleAnalytics { $waaExclusionPaths->get_value(), $waaIncParams->get_value(), $waaFingerprint->get_value(), - $waaEPrivacyMode->get_value() + $waaSupressDnt->get_value() ); update_option(self::WAA_CONF_SITE_ID, $waaSiteId->get_value()); update_option(self::WAA_CONF_TRACKER_DOMAIN, $waaTrackerDomain->get_value()); @@ -152,7 +152,7 @@ class WideAngleAnalytics { update_option(self::WAA_CONF_EXC_PATHS, $waaExclusionPaths->get_value()); update_option(self::WAA_CONF_INC_PARAMS, $waaIncParams->get_value()); update_option(self::WAA_CONF_FINGERPRINT, $waaFingerprint->get_value()); - update_option(self::WAA_CONF_EPRIVACY_MODE, $waaEPrivacyMode->get_value()); + update_option(self::WAA_CONF_SUPRESS_DNT, $waaSupressDnt->get_value()); update_option(self::WAA_CONF_ATTRIBUTES, $attributes->generateAttributes()); $this->message = __('Settings updated', $this->plugin->name); } else { @@ -167,7 +167,7 @@ class WideAngleAnalytics { self::WAA_CONF_TRACKER_DOMAIN => get_option(self::WAA_CONF_TRACKER_DOMAIN), self::WAA_CONF_IGNORE_HASH => get_option(self::WAA_CONF_IGNORE_HASH), self::WAA_CONF_FINGERPRINT => get_option(self::WAA_CONF_FINGERPRINT), - self::WAA_CONF_EPRIVACY_MODE => get_option(self::WAA_CONF_EPRIVACY_MODE), + self::WAA_CONF_SUPRESS_DNT => get_option(self::WAA_CONF_SUPRESS_DNT), self::WAA_CONF_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES) ); include_once( $this->plugin->folder . '/views/admin_settings.php' ); @@ -182,6 +182,7 @@ class WideAngleAnalytics { * - waa_exc_path * - waa_inc_params * - waa_ignore_hash + * - waa_supress_dnt * - waa_header_script * - waa_footer_script */ @@ -192,7 +193,7 @@ class WideAngleAnalytics { register_setting($this->plugin->name, self::WAA_CONF_TRACKER_DOMAIN, array('default' => 'stats.wideangle.co')); register_setting($this->plugin->name, self::WAA_CONF_IGNORE_HASH, array('default' => 'false')); register_setting($this->plugin->name, self::WAA_CONF_FINGERPRINT, array('default' => 'false')); - register_setting($this->plugin->name, self::WAA_CONF_EPRIVACY_MODE, array('default' => 'disabled')); + register_setting($this->plugin->name, self::WAA_CONF_SUPRESS_DNT, array('default' => 'false')); register_setting($this->plugin->name, self::WAA_CONF_ATTRIBUTES, array('type' => 'array')); }