Compare commits
7 commits
Author | SHA1 | Date | |
---|---|---|---|
7b14f38a9d | |||
590ae448bc | |||
f9597f16ae | |||
04b8a858b7 | |||
aee70c947b | |||
1a4faa079d | |||
203d63a5d0 |
7 changed files with 120 additions and 20 deletions
|
@ -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: 5.8.2
|
||||
* Tested up to: 6.5.2
|
||||
* Requires PHP: 7.2
|
||||
|
||||
|
||||
|
|
23
readme.txt
23
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: 5.8.2
|
||||
Tested up to: 6.5.2
|
||||
Requires PHP: 7.2
|
||||
Stable tag: 1.0.4
|
||||
Stable tag: 1.0.9
|
||||
License: GPLv2
|
||||
|
||||
Easily add Wide Angle Analytics tracker script to your WordPress site. You can quickly configure your web analytics tracker script.
|
||||
|
@ -60,3 +60,22 @@ 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.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
|
||||
- Support for `data-waa-fingerprint` toggle enabling optional browser fingerprinting.
|
||||
- Fix the header generate to use valid `prefetch` attribute
|
||||
|
|
|
@ -2,17 +2,22 @@
|
|||
class WideAngleAttributes {
|
||||
public $siteId;
|
||||
public $ignoreHash;
|
||||
public $fingerprint;
|
||||
public $trackerDomain;
|
||||
public $exclusionString;
|
||||
public $includeParamsString;
|
||||
public $suppressDnt;
|
||||
private $helpers;
|
||||
|
||||
public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString) {
|
||||
public function __construct($siteId, $trackerDomain, $ignoreHash, $exclusionString, $includeParamsString, $fingerprint, $suppressDnt) {
|
||||
$this->siteId = $siteId;
|
||||
$this->trackerDomain = $trackerDomain;
|
||||
$this->ignoreHash = $ignoreHash;
|
||||
$this->exclusionString = $exclusionString;
|
||||
$this->includeParamsString = $includeParamsString;
|
||||
$this->fingerprint = $fingerprint;
|
||||
$this->ePrivacyMode = $ePrivacyMode;
|
||||
$this->suppressDnt = $suppressDnt;
|
||||
$this->helpers = new WideAngleHelpers();
|
||||
}
|
||||
|
||||
|
@ -21,6 +26,8 @@ class WideAngleAttributes {
|
|||
'site_id' => $this->siteId,
|
||||
'tracker_domain' => $this->trackerDomain,
|
||||
'ignore_hash' => $this->ignoreHash,
|
||||
'fingerprint' => $this->fingerprint,
|
||||
'suppress_dnt' => $this->suppressDnt,
|
||||
'exclusion_paths' => $this->generateExclusionsAttribute(),
|
||||
'include_params' => $this->generateIncludeParamsAttribute()
|
||||
);
|
||||
|
|
|
@ -6,33 +6,40 @@ class WideAngleGenerator {
|
|||
public $trackerDomain;
|
||||
public $exclusionPaths;
|
||||
public $includeParams;
|
||||
public $ePrivacyMode;
|
||||
|
||||
public function __construct($attributes) {
|
||||
$this->siteId = $attributes['site_id'];
|
||||
$this->trackerDomain = $attributes['tracker_domain'];
|
||||
$this->ignoreHash = $attributes['ignore_hash'];
|
||||
$this->exclusionPaths = $attributes['exclusion_paths'];
|
||||
$this->includeParams = $attributes['include_params'];
|
||||
$this->siteId = $attributes['site_id'];
|
||||
$this->trackerDomain = $attributes['tracker_domain'];
|
||||
$this->ignoreHash = $attributes['ignore_hash'];
|
||||
$this->exclusionPaths = $attributes['exclusion_paths'];
|
||||
$this->includeParams = $attributes['include_params'];
|
||||
$this->fingerprint = $attributes['fingerprint'];
|
||||
$this->suppressDnt = $attributes['suppress_dnt'];
|
||||
}
|
||||
|
||||
|
||||
function generateHeaderScript() {
|
||||
$href = esc_attr("https://{$this->trackerDomain}/script/{$this->siteId}.js");
|
||||
$script = <<<EOD
|
||||
<link href="{$href}" ref="prefetch"/>
|
||||
<link href="{$href}" rel="prefetch"/>
|
||||
EOD;
|
||||
return $script;
|
||||
}
|
||||
|
||||
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"';
|
||||
$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) . "\"": '';
|
||||
$suppressDntAttribute = $this->suppressDnt != '' ? "data-waa-dnt-suppress=\"" . esc_attr($this->suppressDnt) . "\"": 'data-waa-dnt-suppress="false"';
|
||||
$script = <<<EOD
|
||||
<script async defer
|
||||
src="{$trackerUrlAttribute}"
|
||||
$fingerprintAttribute
|
||||
$ignoreHashAttribute
|
||||
$suppressDntAttribute
|
||||
$includeParamsAttribute
|
||||
$pathExlusionsAttribute></script>
|
||||
EOD;
|
||||
|
|
|
@ -29,6 +29,22 @@ 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) {
|
||||
if(filter_var($fingerprint, FILTER_VALIDATE_BOOLEAN)) {
|
||||
return WideAngleValidated::createValid($name, $fingerprint, "true");
|
||||
} else {
|
||||
return WideAngleValidated::createValid($name, $fingerprint, "false");
|
||||
}
|
||||
}
|
||||
|
||||
function validateSiteId($name, $siteId) {
|
||||
if(preg_match("/^[a-zA-Z0-9]{10,24}$/", $siteId)) {
|
||||
return WideAngleValidated::createValid($name, $siteId, strtoupper(trim($siteId)));
|
||||
|
@ -70,8 +86,9 @@ class WideAngleHelpers {
|
|||
$valueKey = "waa_exc_path_".$idx[1]."_value";
|
||||
$sanitizedValue = trim(sanitize_text_field($request[$valueKey]));
|
||||
if($sanitizedValue != null) {
|
||||
if(filter_var($sanitizedValue, FILTER_VALIDATE_REGEXP)) {
|
||||
$typedExclusion = "[" . $exclusionType . "]" . $sanitizedValue;
|
||||
$asRegExp = "/" . wp_unslash($sanitizedValue) . "/";
|
||||
if(@preg_match($asRegExp, null) === 0) {
|
||||
$typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
array_push($exclusions, $typedExclusion);
|
||||
} else {
|
||||
$typedExclusion = "[" . $exclusionType . "]" . filter_var($sanitizedValue, FILTER_SANITIZE_SPECIAL_CHARS);
|
||||
|
|
|
@ -2,6 +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);
|
||||
$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);
|
||||
$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]);
|
||||
|
@ -122,7 +124,31 @@ $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>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>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row"><label>Browser Fingerprinting</label></th>
|
||||
<td>
|
||||
<fieldset>
|
||||
<legend class="screen-reader-text"><span>Browser Fingerprinting</span></legend>
|
||||
<label>
|
||||
<input id="waa_fingerprint" type="checkbox" name="waa_fingerprint" <?php if($fingerprint) { echo "checked"; } ?>/> Enable
|
||||
</label>
|
||||
</fieldset>
|
||||
<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>
|
||||
</tbody>
|
||||
|
@ -141,7 +167,7 @@ $generator = new WideAngleGenerator($this->settings[self::WAA_CONF_AT
|
|||
|
||||
</head>
|
||||
<!-- .. -->
|
||||
<b><?php echo esc_html($generator->generateFooterScript()); ?></b>
|
||||
<b><?php echo esc_html(wp_unslash($generator->generateFooterScript())); ?></b>
|
||||
</pre>
|
||||
</code>
|
||||
</div>
|
||||
|
|
|
@ -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.4
|
||||
Version: 1.0.9
|
||||
Requires at least: 5.2
|
||||
Requires PHP: 7.2
|
||||
License: GPL v2
|
||||
|
@ -17,9 +17,11 @@ 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_EXC_PATHS = "waa_exc_path";
|
||||
const WAA_CONF_INC_PARAMS = "waa_inc_params";
|
||||
const WAA_CONF_IGNORE_HASH = "waa_ignore_hash";
|
||||
const WAA_CONF_SUPPRESS_DNT = "waa_suppress_dnt";
|
||||
const WAA_CONF_ATTRIBUTES = "waa_attributes";
|
||||
|
||||
public function __construct() {
|
||||
|
@ -37,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' ));
|
||||
|
||||
|
@ -115,11 +122,13 @@ class WideAngleAnalytics {
|
|||
$waaSiteId = $this->plugin->helpers->validateSiteId(self::WAA_CONF_SITE_ID, sanitize_text_field($_REQUEST['waa_site_id']));
|
||||
$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']));
|
||||
$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);
|
||||
$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, $waaSuppressDnt);
|
||||
$errors = array();
|
||||
foreach($merged as $validated) {
|
||||
if(!$validated->is_valid()) {
|
||||
|
@ -128,12 +137,22 @@ class WideAngleAnalytics {
|
|||
}
|
||||
|
||||
if(count($errors) === 0) {
|
||||
$attributes = new WideAngleAttributes($waaSiteId->get_value(), $waaTrackerDomain->get_value(), $waaIgnoreHash->get_value(), $waaExclusionPaths->get_value(), $waaIncParams->get_value());
|
||||
$attributes = new WideAngleAttributes(
|
||||
$waaSiteId->get_value(),
|
||||
$waaTrackerDomain->get_value(),
|
||||
$waaIgnoreHash->get_value(),
|
||||
$waaExclusionPaths->get_value(),
|
||||
$waaIncParams->get_value(),
|
||||
$waaFingerprint->get_value(),
|
||||
$waaSuppressDnt->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_IGNORE_HASH, $waaIgnoreHash->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_FINGERPRINT, $waaFingerprint->get_value());
|
||||
update_option(self::WAA_CONF_SUPPRESS_DNT, $waaSuppressDnt->get_value());
|
||||
update_option(self::WAA_CONF_ATTRIBUTES, $attributes->generateAttributes());
|
||||
$this->message = __('Settings updated', $this->plugin->name);
|
||||
} else {
|
||||
|
@ -147,6 +166,8 @@ class WideAngleAnalytics {
|
|||
self::WAA_CONF_INC_PARAMS => get_option(self::WAA_CONF_INC_PARAMS),
|
||||
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_SUPPRESS_DNT => get_option(self::WAA_CONF_SUPPRESS_DNT),
|
||||
self::WAA_CONF_ATTRIBUTES => get_option(self::WAA_CONF_ATTRIBUTES)
|
||||
);
|
||||
include_once( $this->plugin->folder . '/views/admin_settings.php' );
|
||||
|
@ -161,6 +182,7 @@ class WideAngleAnalytics {
|
|||
* - waa_exc_path
|
||||
* - waa_inc_params
|
||||
* - waa_ignore_hash
|
||||
* - waa_suppress_dnt
|
||||
* - waa_header_script
|
||||
* - waa_footer_script
|
||||
*/
|
||||
|
@ -170,6 +192,8 @@ class WideAngleAnalytics {
|
|||
register_setting($this->plugin->name, self::WAA_CONF_INC_PARAMS);
|
||||
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_SUPPRESS_DNT, array('default' => 'false'));
|
||||
register_setting($this->plugin->name, self::WAA_CONF_ATTRIBUTES, array('type' => 'array'));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue