WP Upgrade; DNT support

This commit is contained in:
Jarek Rozanski 2024-05-01 22:11:05 +00:00
parent f9597f16ae
commit 590ae448bc
7 changed files with 48 additions and 50 deletions

View file

@ -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

View file

@ -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

View file

@ -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()
);

View file

@ -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
<script async defer
src="{$trackerUrlAttribute}"
$fingerprintAttribute
$ePrivacyModeAttribute
$ignoreHashAttribute
$supressDntAttribute
$includeParamsAttribute
$pathExlusionsAttribute></script>
EOD;

View file

@ -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);

View file

@ -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
<input id="waa_ignore_hash" type="checkbox" name="waa_ignore_hash" <?php if($ignoreHash) { echo "checked"; } ?>/> Ignore
</label>
</fieldset>
<p class="description" id="tagline-description">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.</p>
<p class="description" id="tagline-description">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.</p>
</td>
</tr>
<tr>
<th scope="row"><label>Supress Do-Not-Track</label></th>
<td>
<fieldset>
<legend class="screen-reader-text"><span>Supress Do-Not-Track</span></legend>
<label>
<input id="waa_supress_dnt" type="checkbox" name="waa_supress_dnt" <?php if($supressDnt) { echo "checked"; } ?>/> Supress
</label>
</fieldset>
<p class="description" id="tagline-description">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.</p>
</td>
</tr>
<tr>
@ -139,26 +151,6 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT
<p class="description" id="tagline-description">The tracker script will <b>not</b> 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.</p>
</td>
</tr>
<tr>
<th scope="row"><label>ePrivacyMode</label></th>
<td>
<fieldset>
<legend class="screen-reader-text"><span>Browser Fingerprinting</span></legend>
<label>
<select name="waa_eprivacy_mode" id="waa_eprivacy_mode">
<?php
foreach($this->plugin->ePrivacyModes as $id => $label) {
?>
<option value="<?php echo esc_attr($id); ?>"<?php if($ePrivacyMode == $id) echo ' selected'; ?>><?php echo esc_html($label); ?></option>
<?php
}
?>
</select>
</label>
</fieldset>
<p class="description" id="tagline-description">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.</p>
</td>
</tr>
</tbody>
</table>
<?php wp_nonce_field( $this->plugin->name, $this->plugin->name . '_nonce' ); ?>

View file

@ -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'));
}