diff options
-rw-r--r-- | core/Tracker/Request.php | 34 | ||||
-rw-r--r-- | core/Tracker/TrackerConfig.php | 12 | ||||
-rw-r--r-- | core/Tracker/Visit.php | 2 | ||||
-rw-r--r-- | core/Tracker/VisitorRecognizer.php | 2 | ||||
-rw-r--r-- | plugins/CoreHome/Tracker/VisitRequestProcessor.php | 4 | ||||
-rw-r--r-- | plugins/Referrers/Columns/Campaign.php | 8 | ||||
-rw-r--r-- | plugins/Referrers/Columns/Website.php | 15 | ||||
-rw-r--r-- | tests/PHPUnit/Unit/Tracker/RequestSetTest.php | 3 | ||||
-rw-r--r-- | tests/PHPUnit/Unit/Tracker/TrackerConfigTest.php | 32 |
9 files changed, 73 insertions, 39 deletions
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php index 954ca042de..2dd8be5579 100644 --- a/core/Tracker/Request.php +++ b/core/Tracker/Request.php @@ -73,7 +73,6 @@ class Request $this->tokenAuth = $tokenAuth; $this->timestamp = time(); $this->isEmptyRequest = empty($params); - $this->customTimestampDoesNotRequireTokenauthWhenNewerThan = (int) TrackerConfig::getConfigValue('tracking_requests_require_authentication_when_custom_timestamp_newer_than'); // When the 'url' and referrer url parameter are not given, we might be in the 'Simple Image Tracker' mode. // The URL can default to the Referrer, which will be in this case @@ -90,6 +89,9 @@ class Request // check for 4byte utf8 characters in all tracking params and replace them with � if not support by database $this->params = $this->replaceUnsupportedUtf8Chars($this->params); + + $this->customTimestampDoesNotRequireTokenauthWhenNewerThan = (int) TrackerConfig::getConfigValue('tracking_requests_require_authentication_when_custom_timestamp_newer_than', + $this->getIdSiteIfExists()); } protected function replaceUnsupportedUtf8Chars($value, $key=false) @@ -148,7 +150,7 @@ class Request */ protected function authenticateTrackingApi($tokenAuth) { - $shouldAuthenticate = TrackerConfig::getConfigValue('tracking_requests_require_authentication'); + $shouldAuthenticate = TrackerConfig::getConfigValue('tracking_requests_require_authentication', $this->getIdSiteIfExists()); if ($shouldAuthenticate) { try { @@ -238,11 +240,10 @@ class Request public function isRequestExcluded() { - $config = Config::getInstance(); - $tracker = $config->Tracker; + $excludedRequests = TrackerConfig::getConfigValue('exclude_requests', $this->getIdSiteIfExists()); - if (!empty($tracker['exclude_requests'])) { - $excludedRequests = explode(',', $tracker['exclude_requests']); + if (!empty($excludedRequests)) { + $excludedRequests = explode(',', $excludedRequests); $pattern = '/^(.+?)('.SegmentExpression::MATCH_EQUAL.'|' .SegmentExpression::MATCH_NOT_EQUAL.'|' .SegmentExpression::MATCH_CONTAINS.'|' @@ -587,6 +588,15 @@ class Request return $idSite; } + public function getIdSiteIfExists() + { + try { + return $this->getIdSite(); + } catch (UnexpectedWebsiteFoundException $ex) { + return null; + } + } + public function getIdSite() { if (isset($this->idSiteCache)) { @@ -625,7 +635,7 @@ class Request public function shouldUseThirdPartyCookie() { - return (bool)Config::getInstance()->Tracker['use_third_party_id_cookie']; + return TrackerConfig::getConfigValue('use_third_party_id_cookie', $this->getIdSiteIfExists()); } public function getThirdPartyCookieVisitorId() @@ -685,22 +695,22 @@ class Request protected function getCookieName() { - return TrackerConfig::getConfigValue('cookie_name'); + return TrackerConfig::getConfigValue('cookie_name', $this->getIdSiteIfExists()); } protected function getCookieExpire() { - return $this->getCurrentTimestamp() + TrackerConfig::getConfigValue('cookie_expire'); + return $this->getCurrentTimestamp() + TrackerConfig::getConfigValue('cookie_expire', $this->getIdSiteIfExists()); } protected function getCookiePath() { - return TrackerConfig::getConfigValue('cookie_path'); + return TrackerConfig::getConfigValue('cookie_path', $this->getIdSiteIfExists()); } protected function getCookieDomain() { - return TrackerConfig::getConfigValue('cookie_domain'); + return TrackerConfig::getConfigValue('cookie_domain', $this->getIdSiteIfExists()); } /** @@ -716,7 +726,7 @@ class Request { $found = false; - if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid')) { + if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $this->getIdSiteIfExists())) { // If User ID is set it takes precedence $userId = $this->getForcedUserId(); if ($userId) { diff --git a/core/Tracker/TrackerConfig.php b/core/Tracker/TrackerConfig.php index 3c998405f1..3647bc7b87 100644 --- a/core/Tracker/TrackerConfig.php +++ b/core/Tracker/TrackerConfig.php @@ -25,9 +25,13 @@ class TrackerConfig Config::getInstance()->Tracker = $section; } - public static function getConfigValue($name) + public static function getConfigValue($name, $idSite = null) { $config = self::getConfig(); + if (!empty($idSite)) { + $siteSpecificConfig = self::getSiteSpecificConfig($idSite); + $config = array_merge($config, $siteSpecificConfig); + } return $config[$name]; } @@ -35,4 +39,10 @@ class TrackerConfig { return Config::getInstance()->Tracker; } + + private static function getSiteSpecificConfig($idSite) + { + $key = 'Tracker_' . $idSite; + return Config::getInstance()->$key; + } } diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php index cfc2a4830f..1b8d9aefd4 100644 --- a/core/Tracker/Visit.php +++ b/core/Tracker/Visit.php @@ -586,7 +586,7 @@ class Visit implements VisitInterface $valuesToUpdate['idvisitor'] = $this->request->getVisitorId(); } - if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid')) { + if (TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $this->request->getIdSiteIfExists())) { // User ID takes precedence and overwrites idvisitor value $userId = $this->request->getForcedUserId(); if ($userId) { diff --git a/core/Tracker/VisitorRecognizer.php b/core/Tracker/VisitorRecognizer.php index 3c670d0050..89e159a9ef 100644 --- a/core/Tracker/VisitorRecognizer.php +++ b/core/Tracker/VisitorRecognizer.php @@ -104,7 +104,7 @@ class VisitorRecognizer $shouldMatchOneFieldOnly = $this->shouldLookupOneVisitorFieldOnly($isVisitorIdToLookup, $request); list($timeLookBack, $timeLookAhead) = $this->getWindowLookupThisVisit($request); - $maxActions = TrackerConfig::getConfigValue('create_new_visit_after_x_actions'); + $maxActions = TrackerConfig::getConfigValue('create_new_visit_after_x_actions', $request->getIdSiteIfExists()); $visitRow = $this->model->findVisitor($idSite, $configId, $idVisitor, $userId, $persistedVisitAttributes, $shouldMatchOneFieldOnly, $isVisitorIdToLookup, $timeLookBack, $timeLookAhead); diff --git a/plugins/CoreHome/Tracker/VisitRequestProcessor.php b/plugins/CoreHome/Tracker/VisitRequestProcessor.php index 1f4706f859..65906cd45e 100644 --- a/plugins/CoreHome/Tracker/VisitRequestProcessor.php +++ b/plugins/CoreHome/Tracker/VisitRequestProcessor.php @@ -184,7 +184,7 @@ class VisitRequestProcessor extends RequestProcessor } $wasLastActionYesterday = $this->wasLastActionNotToday($visitProperties, $request, $lastKnownVisit); - $forceNewVisitAtMidnight = (bool) Config::getInstance()->Tracker['create_new_visit_after_midnight']; + $forceNewVisitAtMidnight = (bool) TrackerConfig::getConfigValue('create_new_visit_after_midnight', $request->getIdSiteIfExists()); if ($wasLastActionYesterday && $forceNewVisitAtMidnight) { Common::printDebug("Visitor detected, but last action was yesterday..."); @@ -192,7 +192,7 @@ class VisitRequestProcessor extends RequestProcessor return true; } - if (!TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid') + if (!TrackerConfig::getConfigValue('enable_userid_overwrites_visitorid', $request->getIdSiteIfExists()) && !$this->lastUserIdWasSetAndDoesMatch($visitProperties, $request)) { Common::printDebug("Visitor detected, but last user_id does not match..."); return true; diff --git a/plugins/Referrers/Columns/Campaign.php b/plugins/Referrers/Columns/Campaign.php index c34daebf90..c5fd824a33 100644 --- a/plugins/Referrers/Columns/Campaign.php +++ b/plugins/Referrers/Columns/Campaign.php @@ -23,14 +23,8 @@ class Campaign extends Base * * @var bool */ - protected $createNewVisitWhenCampaignChanges; protected $nameSingular = 'Referrers_ColumnCampaign'; - public function __construct() - { - $this->createNewVisitWhenCampaignChanges = TrackerConfig::getConfigValue('create_new_visit_when_campaign_changes') == 1; - } - /** * If we should create a new visit when the campaign changes, check if the campaign info changed and if so * force the tracker to create a new visit.i @@ -42,7 +36,7 @@ class Campaign extends Base */ public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null) { - if (!$this->createNewVisitWhenCampaignChanges) { + if (TrackerConfig::getConfigValue('create_new_visit_when_campaign_changes', $request->getIdSiteIfExists()) != 1) { return false; } diff --git a/plugins/Referrers/Columns/Website.php b/plugins/Referrers/Columns/Website.php index da693f1674..73aa5bcbed 100644 --- a/plugins/Referrers/Columns/Website.php +++ b/plugins/Referrers/Columns/Website.php @@ -20,22 +20,9 @@ class Website extends Base protected $type = self::TYPE_TEXT; protected $nameSingular = 'General_Website'; - /** - * Set using the `[Tracker] create_new_visit_when_website_referrer_changes` INI config option. - * If true, will force new visits if the referrer website changes. - * - * @var bool - */ - protected $createNewVisitWhenWebsiteReferrerChanges; - - public function __construct() - { - $this->createNewVisitWhenWebsiteReferrerChanges = TrackerConfig::getConfigValue('create_new_visit_when_website_referrer_changes') == 1; - } - public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null) { - if (!$this->createNewVisitWhenWebsiteReferrerChanges) { + if (TrackerConfig::getConfigValue('create_new_visit_when_website_referrer_changes', $request->getIdSiteIfExists()) != 1) { return false; } diff --git a/tests/PHPUnit/Unit/Tracker/RequestSetTest.php b/tests/PHPUnit/Unit/Tracker/RequestSetTest.php index 43bcecee4e..4773478b64 100644 --- a/tests/PHPUnit/Unit/Tracker/RequestSetTest.php +++ b/tests/PHPUnit/Unit/Tracker/RequestSetTest.php @@ -8,6 +8,7 @@ namespace Piwik\Tests\Unit\Tracker; +use Piwik\Tests\Framework\TestCase\UnitTestCase; use Piwik\Tracker\Request; use Piwik\Tracker\RequestSet; @@ -15,7 +16,7 @@ use Piwik\Tracker\RequestSet; * @group RequestSetTest * @group Tracker */ -class RequestSetTest extends \PHPUnit\Framework\TestCase +class RequestSetTest extends UnitTestCase { /** * @var TestRequestSet diff --git a/tests/PHPUnit/Unit/Tracker/TrackerConfigTest.php b/tests/PHPUnit/Unit/Tracker/TrackerConfigTest.php new file mode 100644 index 0000000000..e2ac9fe363 --- /dev/null +++ b/tests/PHPUnit/Unit/Tracker/TrackerConfigTest.php @@ -0,0 +1,32 @@ +<?php +/** + * Matomo - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Tests\Unit\Tracker; + +use Piwik\Config; +use Piwik\Tests\Framework\TestCase\UnitTestCase; +use Piwik\Tracker\TrackerConfig; + +class TrackerConfigTest extends UnitTestCase +{ + public function test_getConfigValue_returnsTrackerConfigValue_ifNoSiteSpecificValue() + { + Config::getInstance()->Tracker['setting'] = 1; + Config::getInstance()->Tracker_10['setting'] = 0; + + $this->assertEquals(1, TrackerConfig::getConfigValue('setting', 5)); + } + + public function test_getConfigValue_returnsSiteSpecificConfigValue_ifOneIsSpecified() + { + Config::getInstance()->Tracker['setting'] = 1; + Config::getInstance()->Tracker_10['setting'] = 0; + + $this->assertEquals(0, TrackerConfig::getConfigValue('setting', 10)); + } +}
\ No newline at end of file |