diff options
author | Benaka <benakamoorthi@fastmail.fm> | 2014-12-13 02:56:29 +0300 |
---|---|---|
committer | Benaka <benakamoorthi@fastmail.fm> | 2014-12-13 02:56:29 +0300 |
commit | 56ef81b3acefd3c0c829804f907ecef51294e145 (patch) | |
tree | 6a962100bbe4b91be7a2da8d31799deaefbb1656 /plugins | |
parent | 7d1b11d4e4a8ff6813f07100438562bb1af75490 (diff) | |
parent | 3a0571006d584be19979db511cfcb89768cd693c (diff) |
Merge pull request #6847 from piwik/campaign_change_new_visit
Create new visit on different campaign info or different referrer website (includes minor refactoring to Referrer dimensions + 2 new INI config options).
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/Referrers/Columns/Base.php | 29 | ||||
-rw-r--r-- | plugins/Referrers/Columns/Campaign.php | 51 | ||||
-rw-r--r-- | plugins/Referrers/Columns/Keyword.php | 5 | ||||
-rw-r--r-- | plugins/Referrers/Columns/ReferrerName.php | 5 | ||||
-rw-r--r-- | plugins/Referrers/Columns/ReferrerType.php | 5 | ||||
-rw-r--r-- | plugins/Referrers/Columns/ReferrerUrl.php | 5 | ||||
-rw-r--r-- | plugins/Referrers/Columns/Website.php | 41 |
7 files changed, 119 insertions, 22 deletions
diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php index a69fcc54bf..5e8c186af8 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,23 @@ abstract class Base extends VisitDimension } } -} + protected function isReferrerInformationNew(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 doesLastActionHaveSameReferrer(Visitor $visitor, $referrerType) + { + return $visitor->getVisitorColumn('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..ff2d5c2401 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] 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('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 ($information['referer_type'] == Common::REFERRER_TYPE_CAMPAIGN + && $this->isReferrerInformationNew($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..42d05068d6 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] 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 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 ($information['referer_type'] == Common::REFERRER_TYPE_WEBSITE + && $this->isReferrerInformationNew($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 |