diff --git a/readme.txt b/readme.txt index 1355cb2..3eaa472 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: web analytics, tracking, web traffic, analytics, statistics, stats Requires at least: 5.2 Tested up to: 5.8.2 Requires PHP: 7.2 -Stable tag: 1.0.5 +Stable tag: 1.0.6 License: GPLv2 Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script. diff --git a/types/WideAngleAttributes.php b/types/WideAngleAttributes.php index 73e3699..d3f32b0 100644 --- a/types/WideAngleAttributes.php +++ b/types/WideAngleAttributes.php @@ -3,18 +3,20 @@ class WideAngleAttributes { public $siteId; public $ignoreHash; public $fingerprint; + public $ePrivacyMode; public $trackerDomain; public $exclusionString; public $includeParamsString; private $helpers; - public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint) { + public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint, $ePrivacyMode) { $this->siteId = $siteId; $this->trackerDomain = $trackerDomain; $this->ignoreHash = $ignoreHash; $this->exclusionString = $exclusionString; $this->includeParamsString = $includeParamsString; $this->fingerprint = $fingerprint; + $this->ePrivacyMode = $ePrivacyMode; $this->helpers = new WideAngleHelpers(); } @@ -24,6 +26,7 @@ class WideAngleAttributes { 'tracker_domain' => $this->trackerDomain, 'ignore_hash' => $this->ignoreHash, 'fingerprint' => $this->fingerprint, + 'eprivacy_mode' => $this->ePrivacyMode, 'exclusion_paths' => $this->generateExclusionsAttribute(), 'include_params' => $this->generateIncludeParamsAttribute() ); diff --git a/types/WideAngleGenerator.php b/types/WideAngleGenerator.php index b5131e9..ff3499c 100644 --- a/types/WideAngleGenerator.php +++ b/types/WideAngleGenerator.php @@ -6,6 +6,7 @@ class WideAngleGenerator { public $trackerDomain; public $exclusionPaths; public $includeParams; + public $ePrivacyMode; public function __construct($attributes) { $this->siteId = $attributes['site_id']; @@ -14,6 +15,7 @@ class WideAngleGenerator { $this->exclusionPaths = $attributes['exclusion_paths']; $this->includeParams = $attributes['include_params']; $this->fingerprint = $attributes['fingerprint']; + $this->ePrivacyMode = $attributes['eprivacy_mode']; } @@ -27,14 +29,16 @@ EOD; function generateFooterScript() { $trackerUrlAttribute = esc_attr("https://{$this->trackerDomain}/script/{$this->siteId}.js"); - $pathExlusionsAttribute = $this->exclusionPaths != '' ? "data-waa-exc-paths=\"" . esc_attr($this->exclusionPaths) . "\"": ''; - $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) . "\"": ''; + $pathExlusionsAttribute = $this->exclusionPaths != '' ? "data-waa-exc-paths=\"" . esc_attr($this->exclusionPaths) . "\"": ''; + $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) . "\"": ''; $script = << diff --git a/types/WideAngleHelpers.php b/types/WideAngleHelpers.php index e611eb6..d9029d9 100644 --- a/types/WideAngleHelpers.php +++ b/types/WideAngleHelpers.php @@ -37,6 +37,14 @@ 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))); diff --git a/views/admin_settings.php b/views/admin_settings.php index 85fa48d..a85dbb7 100644 --- a/views/admin_settings.php +++ b/views/admin_settings.php @@ -3,6 +3,7 @@ $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); $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]); @@ -138,6 +139,26 @@ $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 17bc167..a80139a 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.5 + Version: 1.0.6 Requires at least: 5.2 Requires PHP: 7.2 License: GPL v2 @@ -18,6 +18,7 @@ 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"; @@ -38,6 +39,11 @@ class WideAngleAnalytics { "regex" => "RegEx", ); + $this->plugin->ePrivacyModes = array( + "disabled" => "Disable Tracking", + "consent" => "Track assuming consent" + ); + add_action('admin_init', array( &$this, 'registerPluginSettings' ) ); add_action('admin_menu', array( &$this, 'registerAdminMenu' )); @@ -117,6 +123,7 @@ 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'])); $waaIncParams = $this->plugin->helpers->validateIncludeParams(self::WAA_CONF_INC_PARAMS, $_REQUEST); $waaExclusionPaths = $this->plugin->helpers->validateExclusionPathsRequest(self::WAA_CONF_EXC_PATHS, $_REQUEST); @@ -136,7 +143,8 @@ class WideAngleAnalytics { $waaIgnoreHash->get_value(), $waaExclusionPaths->get_value(), $waaIncParams->get_value(), - $waaFingerprint->get_value() + $waaFingerprint->get_value(), + $waaEPrivacyMode->get_value() ); update_option(self::WAA_CONF_SITE_ID, $waaSiteId->get_value()); update_option(self::WAA_CONF_TRACKER_DOMAIN, $waaTrackerDomain->get_value()); @@ -144,6 +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_ATTRIBUTES, $attributes->generateAttributes()); $this->message = __('Settings updated', $this->plugin->name); } else { @@ -158,6 +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_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES) ); include_once( $this->plugin->folder . '/views/admin_settings.php' ); @@ -182,6 +192,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_ATTRIBUTES, array('type' => 'array')); }