From 2325da9f2073524519765c2ae5f3e4ee443a64a7 Mon Sep 17 00:00:00 2001 From: diosmosis Date: Mon, 5 Apr 2021 20:05:09 -0700 Subject: [PATCH] On existing visit if referrer type is currently direct entry, and campaign information appears, update dimensions to match core behavior. --- Columns/Base.php | 26 +++++++++++++++++++++++ stylesheets/styles.less | 1 - tests/Fixtures/TrackAdvancedCampaigns.php | 18 ++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Columns/Base.php b/Columns/Base.php index 888f29a..ff115be 100644 --- a/Columns/Base.php +++ b/Columns/Base.php @@ -69,6 +69,32 @@ public function onNewVisit(Request $request, Visitor $visitor, $action) return null; } + public function onExistingVisit(Request $request, Visitor $visitor, $action) + { + $campaignDetector = StaticContainer::get('advanced_campaign_reporting.campaign_detector'); + $campaignParameters = MarketingCampaignsReporting::getCampaignParameters(); + + $campaignDimensions = $campaignDetector->detectCampaignFromRequest( + $request, + $campaignParameters + ); + + if ($this->isCurrentReferrerDirectEntry($visitor) + && !empty($campaignDimensions) + && array_key_exists($this->getColumnName(), $campaignDimensions) + ) { + return substr($campaignDimensions[$this->getColumnName()], 0, $this->getColumnName() == 'campaign_id' ? 100 : 255); + } + + return false; + } + + protected function isCurrentReferrerDirectEntry(Visitor $visitor) + { + $referrerType = $visitor->getVisitorColumn('referer_type'); + return $referrerType == Common::REFERRER_TYPE_DIRECT_ENTRY; + } + /** * @param Request $request * @param Visitor $visitor diff --git a/stylesheets/styles.less b/stylesheets/styles.less index 9873f42..1b7f947 100644 --- a/stylesheets/styles.less +++ b/stylesheets/styles.less @@ -1,5 +1,4 @@ .visitorReferrer.campaign { - display: none; /* do not show default campaign information in visitor log */ } .visitorCampaign { diff --git a/tests/Fixtures/TrackAdvancedCampaigns.php b/tests/Fixtures/TrackAdvancedCampaigns.php index c98cac3..93374c3 100644 --- a/tests/Fixtures/TrackAdvancedCampaigns.php +++ b/tests/Fixtures/TrackAdvancedCampaigns.php @@ -62,6 +62,7 @@ public function trackCampaignVisits($disablePlugin, $dateTime) $this->trackSeventhVisit_withGoalConversion($t, $dateTime); $this->trackEigthVisit_withEcommerceAbandonedCart($t, $dateTime); $this->trackNinthVisit_withEcommerceOrder($t, $dateTime); + $this->trackTenthVisit_withCampaignInformationInSecondAction($t, $dateTime); } public function tearDown(): void @@ -253,6 +254,23 @@ protected function trackNinthVisit_withEcommerceOrder($t, $dateTime) self::checkResponse($t->doTrackEcommerceOrder('Ecommerce_ORDER_ID_' . $this->orderIndex++, '555')); } + private function trackTenthVisit_withCampaignInformationInSecondAction(\MatomoTracker $t, $dateTime) + { + $this->getTestEnvironment()->overrideConfig('Tracker', 'create_new_visit_when_campaign_changes', '0'); + $this->getTestEnvironment()->save(); + + $this->moveTimeForward($t, 12.0, $dateTime); + $t->setUrl('http://example.com/'); + self::checkResponse($t->doTrackPageView('Viewing homepage without campaign, recorded as a visit from Campaign, but...')); + + $this->moveTimeForward($t, 12.1, $dateTime); + $t->setUrl('http://example.com/sub/page?mtm_campaign=SHOULD_BE_NEW_VISIT2'); + $t->setCustomTrackingParameter('abc', '1'); + self::checkResponse($t->doTrackPageView('Second page view, with campaign, should overwrite referrer information from previous visit')); + + $this->getTestEnvironment()->overrideConfig('Tracker', 'create_new_visit_when_campaign_changes', '1'); + } + /** * @param \MatomoTracker $t * @param $hourOffset