Compare commits

..

No commits in common. "main" and "v1.0.5" have entirely different histories.
main ... v1.0.5

7 changed files with 16 additions and 72 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 * Requires at least: 5.2
* Tested up to: 6.5.2 * Tested up to: 5.8.2
* Requires PHP: 7.2 * Requires PHP: 7.2

View file

@ -2,9 +2,9 @@
Contributors: jrozanski,inputobjects Contributors: jrozanski,inputobjects
Tags: web analytics, tracking, web traffic, analytics, statistics, stats Tags: web analytics, tracking, web traffic, analytics, statistics, stats
Requires at least: 5.2 Requires at least: 5.2
Tested up to: 6.5.2 Tested up to: 5.8.2
Requires PHP: 7.2 Requires PHP: 7.2
Stable tag: 1.0.9 Stable tag: 1.0.5
License: GPLv2 License: GPLv2
Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script. Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script.
@ -61,21 +61,7 @@ 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. 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 == == Changelog ==
v1.0.9
- Correct the API type from "supress" to "suppress"
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
V1.0.6
- Support for ePrivacy Mode configuration.
V1.0.5 V1.0.5
- Support for `data-waa-fingerprint` toggle enabling optional browser fingerprinting. - Support for `data-waa-fingerprint` toggle enabling optional browser fingerprinting.
- Fix the header generate to use valid `prefetch` attribute - Fix the header generate to use valid `prefetch` attribute

View file

@ -6,18 +6,15 @@ class WideAngleAttributes {
public $trackerDomain; public $trackerDomain;
public $exclusionString; public $exclusionString;
public $includeParamsString; public $includeParamsString;
public $suppressDnt;
private $helpers; private $helpers;
public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint, $suppressDnt) { public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint) {
$this->siteId = $siteId; $this->siteId = $siteId;
$this->trackerDomain = $trackerDomain; $this->trackerDomain = $trackerDomain;
$this->ignoreHash = $ignoreHash; $this->ignoreHash = $ignoreHash;
$this->exclusionString = $exclusionString; $this->exclusionString = $exclusionString;
$this->includeParamsString = $includeParamsString; $this->includeParamsString = $includeParamsString;
$this->fingerprint = $fingerprint; $this->fingerprint = $fingerprint;
$this->ePrivacyMode = $ePrivacyMode;
$this->suppressDnt = $suppressDnt;
$this->helpers = new WideAngleHelpers(); $this->helpers = new WideAngleHelpers();
} }
@ -27,7 +24,6 @@ class WideAngleAttributes {
'tracker_domain' => $this->trackerDomain, 'tracker_domain' => $this->trackerDomain,
'ignore_hash' => $this->ignoreHash, 'ignore_hash' => $this->ignoreHash,
'fingerprint' => $this->fingerprint, 'fingerprint' => $this->fingerprint,
'suppress_dnt' => $this->suppressDnt,
'exclusion_paths' => $this->generateExclusionsAttribute(), 'exclusion_paths' => $this->generateExclusionsAttribute(),
'include_params' => $this->generateIncludeParamsAttribute() 'include_params' => $this->generateIncludeParamsAttribute()
); );

View file

@ -6,7 +6,6 @@ class WideAngleGenerator {
public $trackerDomain; public $trackerDomain;
public $exclusionPaths; public $exclusionPaths;
public $includeParams; public $includeParams;
public $ePrivacyMode;
public function __construct($attributes) { public function __construct($attributes) {
$this->siteId = $attributes['site_id']; $this->siteId = $attributes['site_id'];
@ -15,7 +14,6 @@ class WideAngleGenerator {
$this->exclusionPaths = $attributes['exclusion_paths']; $this->exclusionPaths = $attributes['exclusion_paths'];
$this->includeParams = $attributes['include_params']; $this->includeParams = $attributes['include_params'];
$this->fingerprint = $attributes['fingerprint']; $this->fingerprint = $attributes['fingerprint'];
$this->suppressDnt = $attributes['suppress_dnt'];
} }
@ -29,17 +27,15 @@ EOD;
function generateFooterScript() { function generateFooterScript() {
$trackerUrlAttribute = esc_attr("https://{$this->trackerDomain}/script/{$this->siteId}.js"); $trackerUrlAttribute = esc_attr("https://{$this->trackerDomain}/script/{$this->siteId}.js");
$pathExlusionsAttribute = $this->exclusionPaths != '' ? "data-waa-exc-paths=\"" . esc_attr($this->exclusionPaths) . "\"": ''; $pathExlusionsAttribute = $this->exclusionPaths != '' ? "data-waa-exc-paths=\"" . esc_attr($this->exclusionPaths) . "\"": '';
$includeParamsAttribute = $this->includeParams != '' ? "data-waa-inc-params=\"" . esc_attr($this->includeParams) . "\"": ''; $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"'; $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) . "\"": ''; $fingerprintAttribute = $this->fingerprint != '' ? "data-waa-fingerprint=\"" . esc_attr($this->fingerprint) . "\"": '';
$suppressDntAttribute = $this->suppressDnt != '' ? "data-waa-dnt-suppress=\"" . esc_attr($this->suppressDnt) . "\"": 'data-waa-dnt-suppress="false"';
$script = <<<EOD $script = <<<EOD
<script async defer <script async defer
src="{$trackerUrlAttribute}" src="{$trackerUrlAttribute}"
$fingerprintAttribute $fingerprintAttribute
$ignoreHashAttribute $ignoreHashAttribute
$suppressDntAttribute
$includeParamsAttribute $includeParamsAttribute
$pathExlusionsAttribute></script> $pathExlusionsAttribute></script>
EOD; EOD;

View file

@ -29,14 +29,6 @@ class WideAngleHelpers {
} }
} }
function validateSuppressDntFlag($name, $suppressDnt) {
if(filter_var($suppressDnt, FILTER_VALIDATE_BOOLEAN)) {
return WideAngleValidated::createValid($name, $suppressDnt, "true");
} else {
return WideAngleValidated::createValid($name, $suppressDnt, "false");
}
}
function validateFingerprint($name, $fingerprint) { function validateFingerprint($name, $fingerprint) {
if(filter_var($fingerprint, FILTER_VALIDATE_BOOLEAN)) { if(filter_var($fingerprint, FILTER_VALIDATE_BOOLEAN)) {
return WideAngleValidated::createValid($name, $fingerprint, "true"); return WideAngleValidated::createValid($name, $fingerprint, "true");
@ -86,9 +78,8 @@ class WideAngleHelpers {
$valueKey = "waa_exc_path_".$idx[1]."_value"; $valueKey = "waa_exc_path_".$idx[1]."_value";
$sanitizedValue = trim(sanitize_text_field($request[$valueKey])); $sanitizedValue = trim(sanitize_text_field($request[$valueKey]));
if($sanitizedValue != null) { if($sanitizedValue != null) {
$asRegExp = "/" . wp_unslash($sanitizedValue) . "/"; if(filter_var($sanitizedValue, FILTER_VALIDATE_REGEXP)) {
if(@preg_match($asRegExp, null) === 0) { $typedExclusion = "[" . $exclusionType . "]" . $sanitizedValue;
$typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS);
array_push($exclusions, $typedExclusion); array_push($exclusions, $typedExclusion);
} else { } else {
$typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS); $typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS);

View file

@ -2,7 +2,6 @@
$siteId = wp_unslash($this->settings[self::WAA_CONF_SITE_ID]); $siteId = wp_unslash($this->settings[self::WAA_CONF_SITE_ID]);
$trackerDomain = wp_unslash($this->settings[self::WAA_CONF_TRACKER_DOMAIN]); $trackerDomain = wp_unslash($this->settings[self::WAA_CONF_TRACKER_DOMAIN]);
$ignoreHash = filter_var($this->settings[self::WAA_CONF_IGNORE_HASH], FILTER_VALIDATE_BOOLEAN); $ignoreHash = filter_var($this->settings[self::WAA_CONF_IGNORE_HASH], FILTER_VALIDATE_BOOLEAN);
$suppressDnt = filter_var($this->settings[self::WAA_CONF_SUPPRESS_DNT], FILTER_VALIDATE_BOOLEAN);
$fingerprint = filter_var($this->settings[self::WAA_CONF_FINGERPRINT], FILTER_VALIDATE_BOOLEAN); $fingerprint = filter_var($this->settings[self::WAA_CONF_FINGERPRINT], FILTER_VALIDATE_BOOLEAN);
$parsedExclusions = $this->plugin->helpers->parseExclusionSetting(wp_unslash($this->settings[self::WAA_CONF_EXC_PATHS])); $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])); $parsedIncludeParams = $this->plugin->helpers->parseIncludeParamsSetting(wp_unslash($this->settings[self::WAA_CONF_INC_PARAMS]));
@ -124,19 +123,7 @@ $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 <input id="waa_ignore_hash" type="checkbox" name="waa_ignore_hash" <?php if($ignoreHash) { echo "checked"; } ?>/> Ignore
</label> </label>
</fieldset> </fieldset>
<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> <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>
</td>
</tr>
<tr>
<th scope="row"><label>Suppress Do-Not-Track</label></th>
<td>
<fieldset>
<legend class="screen-reader-text"><span>Suppress Do-Not-Track</span></legend>
<label>
<input id="waa_suppress_dnt" type="checkbox" name="waa_suppress_dnt" <?php if($suppressDnt) { echo "checked"; } ?>/> Suppress
</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> </td>
</tr> </tr>
<tr> <tr>
@ -167,7 +154,7 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT
&lt;/head&gt; &lt;/head&gt;
&lt;!-- .. --&gt; &lt;!-- .. --&gt;
<b><?php echo esc_html(wp_unslash($generator->generateFooterScript())); ?></b> <b><?php echo esc_html($generator->generateFooterScript()); ?></b>
</pre> </pre>
</code> </code>
</div> </div>

View file

@ -5,7 +5,7 @@
Description: Easily enable and configure Wide Angle Analytics on your Wordpress site Description: Easily enable and configure Wide Angle Analytics on your Wordpress site
Author: Wide Angle Analytics by Input Objects GmbH Author: Wide Angle Analytics by Input Objects GmbH
Author URI: https://wideangle.co Author URI: https://wideangle.co
Version: 1.0.9 Version: 1.0.5
Requires at least: 5.2 Requires at least: 5.2
Requires PHP: 7.2 Requires PHP: 7.2
License: GPL v2 License: GPL v2
@ -21,7 +21,6 @@ class WideAngleAnalytics {
const WAA_CONF_EXC_PATHS = "waa_exc_path"; const WAA_CONF_EXC_PATHS = "waa_exc_path";
const WAA_CONF_INC_PARAMS = "waa_inc_params"; const WAA_CONF_INC_PARAMS = "waa_inc_params";
const WAA_CONF_IGNORE_HASH = "waa_ignore_hash"; const WAA_CONF_IGNORE_HASH = "waa_ignore_hash";
const WAA_CONF_SUPPRESS_DNT = "waa_suppress_dnt";
const WAA_CONF_ATTRIBUTES = "waa_attributes"; const WAA_CONF_ATTRIBUTES = "waa_attributes";
public function __construct() { public function __construct() {
@ -39,11 +38,6 @@ class WideAngleAnalytics {
"regex" => "RegEx", "regex" => "RegEx",
); );
$this->plugin->ePrivacyModes = array(
"disabled" => "Disable Tracking",
"consent" => "Track assuming consent"
);
add_action('admin_init', array( &$this, 'registerPluginSettings' ) ); add_action('admin_init', array( &$this, 'registerPluginSettings' ) );
add_action('admin_menu', array( &$this, 'registerAdminMenu' )); add_action('admin_menu', array( &$this, 'registerAdminMenu' ));
@ -123,12 +117,11 @@ class WideAngleAnalytics {
$waaTrackerDomain = $this->plugin->helpers->validateTrackerDomain(self::WAA_CONF_TRACKER_DOMAIN, sanitize_text_field($_REQUEST['waa_tracker_domain'])); $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'])); $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'])); $waaFingerprint = $this->plugin->helpers->validateFingerprint(self::WAA_CONF_FINGERPRINT, sanitize_text_field($_REQUEST['waa_fingerprint']));
$waaSuppressDnt = $this->plugin->helpers->validateSuppressDntFlag(self::WAA_CONF_SUPPRESS_DNT, sanitize_text_field($_REQUEST['waa_suppress_dnt']));
$waaIncParams = $this->plugin->helpers->validateIncludeParams(self::WAA_CONF_INC_PARAMS, $_REQUEST); $waaIncParams = $this->plugin->helpers->validateIncludeParams(self::WAA_CONF_INC_PARAMS, $_REQUEST);
$waaExclusionPaths = $this->plugin->helpers->validateExclusionPathsRequest(self::WAA_CONF_EXC_PATHS, $_REQUEST); $waaExclusionPaths = $this->plugin->helpers->validateExclusionPathsRequest(self::WAA_CONF_EXC_PATHS, $_REQUEST);
include_once( $this->plugin->folder . '/types/WideAngleAttributes.php'); include_once( $this->plugin->folder . '/types/WideAngleAttributes.php');
$merged = array($waaSiteId, $waaTrackerDomain, $waaIgnoreHash, $waaIncParams, $waaExclusionPaths, $waaSuppressDnt); $merged = array($waaSiteId, $waaTrackerDomain, $waaIgnoreHash, $waaIncParams, $waaExclusionPaths);
$errors = array(); $errors = array();
foreach($merged as $validated) { foreach($merged as $validated) {
if(!$validated->is_valid()) { if(!$validated->is_valid()) {
@ -143,8 +136,7 @@ class WideAngleAnalytics {
$waaIgnoreHash->get_value(), $waaIgnoreHash->get_value(),
$waaExclusionPaths->get_value(), $waaExclusionPaths->get_value(),
$waaIncParams->get_value(), $waaIncParams->get_value(),
$waaFingerprint->get_value(), $waaFingerprint->get_value()
$waaSuppressDnt->get_value()
); );
update_option(self::WAA_CONF_SITE_ID, $waaSiteId->get_value()); update_option(self::WAA_CONF_SITE_ID, $waaSiteId->get_value());
update_option(self::WAA_CONF_TRACKER_DOMAIN, $waaTrackerDomain->get_value()); update_option(self::WAA_CONF_TRACKER_DOMAIN, $waaTrackerDomain->get_value());
@ -152,7 +144,6 @@ class WideAngleAnalytics {
update_option(self::WAA_CONF_EXC_PATHS, $waaExclusionPaths->get_value()); 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_INC_PARAMS, $waaIncParams->get_value());
update_option(self::WAA_CONF_FINGERPRINT, $waaFingerprint->get_value()); update_option(self::WAA_CONF_FINGERPRINT, $waaFingerprint->get_value());
update_option(self::WAA_CONF_SUPPRESS_DNT, $waaSuppressDnt->get_value());
update_option(self::WAA_CONF_ATTRIBUTES, $attributes->generateAttributes()); update_option(self::WAA_CONF_ATTRIBUTES, $attributes->generateAttributes());
$this->message = __('Settings updated', $this->plugin->name); $this->message = __('Settings updated', $this->plugin->name);
} else { } else {
@ -167,7 +158,6 @@ class WideAngleAnalytics {
self::WAA_CONF_TRACKER_DOMAIN => get_option(self::WAA_CONF_TRACKER_DOMAIN), 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_IGNORE_HASH => get_option(self::WAA_CONF_IGNORE_HASH),
self::WAA_CONF_FINGERPRINT => get_option(self::WAA_CONF_FINGERPRINT), self::WAA_CONF_FINGERPRINT => get_option(self::WAA_CONF_FINGERPRINT),
self::WAA_CONF_SUPPRESS_DNT => get_option(self::WAA_CONF_SUPPRESS_DNT),
self::WAA_CONF_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES) self::WAA_CONF_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES)
); );
include_once( $this->plugin->folder . '/views/admin_settings.php' ); include_once( $this->plugin->folder . '/views/admin_settings.php' );
@ -182,7 +172,6 @@ class WideAngleAnalytics {
* - waa_exc_path * - waa_exc_path
* - waa_inc_params * - waa_inc_params
* - waa_ignore_hash * - waa_ignore_hash
* - waa_suppress_dnt
* - waa_header_script * - waa_header_script
* - waa_footer_script * - waa_footer_script
*/ */
@ -193,7 +182,6 @@ 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_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_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_FINGERPRINT, array('default' => 'false'));
register_setting($this->plugin->name, self::WAA_CONF_SUPPRESS_DNT, array('default' => 'false'));
register_setting($this->plugin->name, self::WAA_CONF_ATTRIBUTES, array('type' => 'array')); register_setting($this->plugin->name, self::WAA_CONF_ATTRIBUTES, array('type' => 'array'));
} }