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:
authordiosmosis <benaka@piwik.pro>2014-12-10 04:01:25 +0300
committerdiosmosis <benaka@piwik.pro>2014-12-10 04:01:34 +0300
commit0a0a0d2cdef310e98636ef1b68fc4f9d4108b235 (patch)
tree76cca0d03f0e1e24de2d2c3d78d9159c609c8fde /plugins/Referrers/Columns
parent954e5e921870d7373e1ccd2cb3291f248054ae87 (diff)
Refs #2624, add INI config options that will force a new visit if campaign/website referrer information changes between actions. Includes new tracker hook shouldForceNewVisit that dimensions can use to force a new visit during tracking. Also includes light refactoring to referrer dimensions. Testless.
Diffstat (limited to 'plugins/Referrers/Columns')
-rw-r--r--plugins/Referrers/Columns/Base.php30
-rw-r--r--plugins/Referrers/Columns/Campaign.php51
-rw-r--r--plugins/Referrers/Columns/Keyword.php5
-rw-r--r--plugins/Referrers/Columns/ReferrerName.php5
-rw-r--r--plugins/Referrers/Columns/ReferrerType.php5
-rw-r--r--plugins/Referrers/Columns/ReferrerUrl.php5
-rw-r--r--plugins/Referrers/Columns/Website.php41
7 files changed, 120 insertions, 22 deletions
diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php
index a69fcc54bf..a721dc9421 100644
--- a/plugins/Referrers/Columns/Base.php
+++ b/plugins/Referrers/Columns/Base.php
@@ -127,6 +127,14 @@ abstract class Base extends VisitDimension
return $referrerInformation;
}
+ protected function getReferrerInformationFromRequest(Request $request)
+ {
+ $referrerUrl = $request->getParam('urlref');
+ $currentUrl = $request->getParam('url');
+
+ return $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+ }
+
/**
* Search engine detection
* @return bool
@@ -399,4 +407,24 @@ abstract class Base extends VisitDimension
}
}
-}
+ protected function hasReferrerInformationChanged(Visitor $visitor, $information)
+ {
+ foreach (array('referer_keyword', 'referer_name', 'referer_type') as $infoName) {
+ if ($this->hasReferrerColumnChanged($visitor, $information, $infoName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected function hasReferrerColumnChanged(Visitor $visitor, $information, $infoName)
+ {
+ return Common::mb_strtolower($visitor->getVisitorColumn($infoName)) != $information[$infoName];
+ }
+
+ protected function doesLastOrCurrentActionHaveSameReferrer(Visitor $visitor, $currentInformation, $referrerType)
+ {
+ return $visitor->getVisitorColumn('referer_type') == $referrerType
+ || $currentInformation['referer_type'] == $referrerType;
+ }
+} \ No newline at end of file
diff --git a/plugins/Referrers/Columns/Campaign.php b/plugins/Referrers/Columns/Campaign.php
index 4413cd702f..53f86e97eb 100644
--- a/plugins/Referrers/Columns/Campaign.php
+++ b/plugins/Referrers/Columns/Campaign.php
@@ -8,13 +8,58 @@
*/
namespace Piwik\Plugins\Referrers\Columns;
-use Piwik\Columns\Dimension;
+use Piwik\Common;
use Piwik\Piwik;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+use Piwik\Tracker\TrackerConfig;
+use Piwik\Tracker\Visitor;
-class Campaign extends Dimension
+class Campaign extends Base
{
+ /**
+ * Obtained from the `[Tracker] tracker_create_new_visit_when_campaign_changes` INI config option.
+ * If true, will create new visits when campaign name changes.
+ *
+ * @var bool
+ */
+ protected $createNewVisitWhenCampaignChanges;
+
+ public function __construct()
+ {
+ $this->createNewVisitWhenCampaignChanges = TrackerConfig::getConfigValue('tracker_create_new_visit_when_campaign_changes') == 1;
+ }
+
public function getName()
{
return Piwik::translate('Referrers_ColumnCampaign');
}
-}
+
+ /**
+ * 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.
+ *
+ * @param Request $request
+ * @param Visitor $visitor
+ * @param Action|null $action
+ * @return bool
+ */
+ public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
+ {
+ if (!$this->createNewVisitWhenCampaignChanges) {
+ return false;
+ }
+
+ $information = $this->getReferrerInformationFromRequest($request);
+
+ if ($this->doesLastOrCurrentActionHaveSameReferrer($visitor, $information, Common::REFERRER_TYPE_CAMPAIGN)
+ && $this->hasReferrerInformationChanged($visitor, $information)
+ ) {
+ Common::printDebug("Existing visit detected, but creating new visit because campaign information is different than last action.");
+
+ return true;
+ }
+
+ return false;
+ }
+} \ No newline at end of file
diff --git a/plugins/Referrers/Columns/Keyword.php b/plugins/Referrers/Columns/Keyword.php
index a5025b63c2..78605c9d94 100644
--- a/plugins/Referrers/Columns/Keyword.php
+++ b/plugins/Referrers/Columns/Keyword.php
@@ -41,10 +41,7 @@ class Keyword extends Base
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
- $referrerUrl = $request->getParam('urlref');
- $currentUrl = $request->getParam('url');
-
- $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+ $information = $this->getReferrerInformationFromRequest($request);
if (!empty($information['referer_keyword'])) {
return substr($information['referer_keyword'], 0, 255);
diff --git a/plugins/Referrers/Columns/ReferrerName.php b/plugins/Referrers/Columns/ReferrerName.php
index fbd55219dc..7bdb0732a6 100644
--- a/plugins/Referrers/Columns/ReferrerName.php
+++ b/plugins/Referrers/Columns/ReferrerName.php
@@ -35,10 +35,7 @@ class ReferrerName extends Base
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
- $referrerUrl = $request->getParam('urlref');
- $currentUrl = $request->getParam('url');
-
- $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+ $information = $this->getReferrerInformationFromRequest($request);
if (!empty($information['referer_name'])) {
diff --git a/plugins/Referrers/Columns/ReferrerType.php b/plugins/Referrers/Columns/ReferrerType.php
index f4e688f60e..5303a1c360 100644
--- a/plugins/Referrers/Columns/ReferrerType.php
+++ b/plugins/Referrers/Columns/ReferrerType.php
@@ -42,10 +42,7 @@ class ReferrerType extends Base
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
- $referrerUrl = $request->getParam('urlref');
- $currentUrl = $request->getParam('url');
-
- $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+ $information = $this->getReferrerInformationFromRequest($request);
return $information['referer_type'];
}
diff --git a/plugins/Referrers/Columns/ReferrerUrl.php b/plugins/Referrers/Columns/ReferrerUrl.php
index 0404a13247..21c5cd5bdc 100644
--- a/plugins/Referrers/Columns/ReferrerUrl.php
+++ b/plugins/Referrers/Columns/ReferrerUrl.php
@@ -35,10 +35,7 @@ class ReferrerUrl extends Base
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
- $referrerUrl = $request->getParam('urlref');
- $currentUrl = $request->getParam('url');
-
- $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite());
+ $information = $this->getReferrerInformationFromRequest($request);
return $information['referer_url'];
}
diff --git a/plugins/Referrers/Columns/Website.php b/plugins/Referrers/Columns/Website.php
index 53b143d693..7d4903c902 100644
--- a/plugins/Referrers/Columns/Website.php
+++ b/plugins/Referrers/Columns/Website.php
@@ -8,13 +8,50 @@
*/
namespace Piwik\Plugins\Referrers\Columns;
-use Piwik\Columns\Dimension;
+use Piwik\Common;
use Piwik\Piwik;
+use Piwik\Tracker\Action;
+use Piwik\Tracker\Request;
+use Piwik\Tracker\TrackerConfig;
+use Piwik\Tracker\Visitor;
-class Website extends Dimension
+class Website extends Base
{
+ /**
+ * Set using the `[Tracker] 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('tracker_create_new_visit_when_website_referrer_changes') == 1;
+ }
+
public function getName()
{
return Piwik::translate('General_Website');
}
+
+ public function shouldForceNewVisit(Request $request, Visitor $visitor, Action $action = null)
+ {
+ if (!$this->createNewVisitWhenWebsiteReferrerChanges) {
+ return false;
+ }
+
+ $information = $this->getReferrerInformationFromRequest($request);
+
+ if ($this->doesLastOrCurrentActionHaveSameReferrer($visitor, $information, Common::REFERRER_TYPE_WEBSITE)
+ && $this->hasReferrerInformationChanged($visitor, $information)
+ ) {
+ Common::printDebug("Existing visit detected, but creating new visit because website referrer information is different than last action.");
+
+ return true;
+ }
+
+ return false;
+
+ }
} \ No newline at end of file