Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2020-08-18 09:27:07 +0300
committerGitHub <noreply@github.com>2020-08-18 09:27:07 +0300
commit17ec9004f99b6f7092740558bca71cca6c1ac23c (patch)
treec583444ac5e163641ac80ac185a8bec40824699c /core/Tracker/Request.php
parentb5dd5fbdeaf855b55c2817352d5654d8aca0c64b (diff)
Add feature to exclude tracking requests via config file (#16302)
Diffstat (limited to 'core/Tracker/Request.php')
-rw-r--r--core/Tracker/Request.php67
1 files changed, 67 insertions, 0 deletions
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php
index 98133e4319..93d64d0781 100644
--- a/core/Tracker/Request.php
+++ b/core/Tracker/Request.php
@@ -20,6 +20,7 @@ use Matomo\Network\IPUtils;
use Piwik\Piwik;
use Piwik\Plugins\UsersManager\UsersManager;
use Piwik\ProxyHttp;
+use Piwik\Segment\SegmentExpression;
use Piwik\Tracker;
use Piwik\Cache as PiwikCache;
@@ -234,6 +235,72 @@ class Request
return false;
}
+ public function isRequestExcluded()
+ {
+ $config = Config::getInstance();
+ $tracker = $config->Tracker;
+
+ if (!empty($tracker['exclude_requests'])) {
+ $excludedRequests = explode(',', $tracker['exclude_requests']);
+ $pattern = '/^(.+?)('.SegmentExpression::MATCH_EQUAL.'|'
+ .SegmentExpression::MATCH_NOT_EQUAL.'|'
+ .SegmentExpression::MATCH_CONTAINS.'|'
+ .SegmentExpression::MATCH_DOES_NOT_CONTAIN.'|'
+ .preg_quote(SegmentExpression::MATCH_STARTS_WITH).'|'
+ .preg_quote(SegmentExpression::MATCH_ENDS_WITH)
+ .'){1}(.*)/';
+ foreach ($excludedRequests as $excludedRequest) {
+ $match = preg_match($pattern, $excludedRequest, $matches);
+
+ if (!empty($match)) {
+ $leftMember = $matches[1];
+ $operation = $matches[2];
+ if (!isset($matches[3])) {
+ $valueRightMember = '';
+ } else {
+ $valueRightMember = urldecode($matches[3]);
+ }
+ $actual = Common::getRequestVar($leftMember, '', 'string', $this->params);
+ $actual = Common::mb_strtolower($actual);
+ $valueRightMember = Common::mb_strtolower($valueRightMember);
+ switch ($operation) {
+ case SegmentExpression::MATCH_EQUAL:
+ if ($actual === $valueRightMember) {
+ return true;
+ }
+ break;
+ case SegmentExpression::MATCH_NOT_EQUAL:
+ if ($actual !== $valueRightMember) {
+ return true;
+ }
+ break;
+ case SegmentExpression::MATCH_CONTAINS:
+ if (stripos($actual, $valueRightMember) !== false) {
+ return true;
+ }
+ break;
+ case SegmentExpression::MATCH_DOES_NOT_CONTAIN:
+ if (stripos($actual, $valueRightMember) === false) {
+ return true;
+ }
+ break;
+ case SegmentExpression::MATCH_STARTS_WITH:
+ if (stripos($actual, $valueRightMember) === 0) {
+ return true;
+ }
+ break;
+ case SegmentExpression::MATCH_ENDS_WITH:
+ if (Common::stringEndsWith($actual, $valueRightMember)) {
+ return true;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
/**
* Returns the language the visitor is viewing.
*