From 4ef2d4ed94d9f98c74b1737adbb98f575bbe46d2 Mon Sep 17 00:00:00 2001 From: Jan Jakes Date: Fri, 10 Dec 2021 13:58:43 +0100 Subject: [PATCH] Move cookie tracking permission check to subscriber cookie service [MAILPOET-3924] --- lib/Statistics/Track/Clicks.php | 13 ++++++------- lib/Statistics/Track/SubscriberCookie.php | 16 +++++++++++++++- .../Events/AbandonedCartPageVisitTrackerTest.php | 12 ++++++++++-- .../WooCommerce/Events/AbandonedCartTest.php | 8 ++++++-- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/Statistics/Track/Clicks.php b/lib/Statistics/Track/Clicks.php index dabd08f7ce..4ebe0dfa46 100644 --- a/lib/Statistics/Track/Clicks.php +++ b/lib/Statistics/Track/Clicks.php @@ -107,7 +107,12 @@ class Clicks { } $this->statisticsClicksRepository->flush(); $this->sendRevenueCookie($statisticsClicks); - $this->sendSubscriberCookie($subscriber); + + $subscriberId = $subscriber->getId(); + if ($subscriberId) { + $this->subscriberCookie->setSubscriberId($subscriberId); + } + // track open event $this->opens->track($data, $displayImage = false); // Update engagement date @@ -133,12 +138,6 @@ class Clicks { } } - private function sendSubscriberCookie($subscriber) { - if ($this->trackingConfig->isCookieTrackingEnabled()) { - $this->subscriberCookie->setSubscriberId($subscriber->getId()); - } - } - public function processUrl( string $url, NewsletterEntity $newsletter, diff --git a/lib/Statistics/Track/SubscriberCookie.php b/lib/Statistics/Track/SubscriberCookie.php index a0c1c704c0..2dd5264afa 100644 --- a/lib/Statistics/Track/SubscriberCookie.php +++ b/lib/Statistics/Track/SubscriberCookie.php @@ -2,6 +2,7 @@ namespace MailPoet\Statistics\Track; +use MailPoet\Settings\TrackingConfig; use MailPoet\Util\Cookies; class SubscriberCookie { @@ -12,13 +13,22 @@ class SubscriberCookie { /** @var Cookies */ private $cookies; + /** @var TrackingConfig */ + private $trackingConfig; + public function __construct( - Cookies $cookies + Cookies $cookies, + TrackingConfig $trackingConfig ) { $this->cookies = $cookies; + $this->trackingConfig = $trackingConfig; } public function getSubscriberId(): ?int { + if (!$this->trackingConfig->isCookieTrackingEnabled()) { + return null; + } + $subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME); if ($subscriberId) { return $subscriberId; @@ -34,6 +44,10 @@ class SubscriberCookie { } public function setSubscriberId(int $subscriberId): void { + if (!$this->trackingConfig->isCookieTrackingEnabled()) { + return; + } + $this->cookies->set( self::COOKIE_NAME, ['subscriber_id' => $subscriberId], diff --git a/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartPageVisitTrackerTest.php b/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartPageVisitTrackerTest.php index 8e28e318da..25ed2b078f 100644 --- a/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartPageVisitTrackerTest.php +++ b/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartPageVisitTrackerTest.php @@ -3,6 +3,8 @@ namespace MailPoet\AutomaticEmails\WooCommerce\Events; use Codeception\Stub; +use MailPoet\Settings\SettingsController; +use MailPoet\Settings\TrackingConfig; use MailPoet\Statistics\Track\SubscriberCookie; use MailPoet\Util\Cookies; use MailPoet\WooCommerce\Helper as WooCommerceHelper; @@ -43,8 +45,13 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest { 'WC' => $wooCommerceMock, ]); + $settings = $this->diContainer->get(SettingsController::class); $this->sessionStore = []; - $this->pageVisitTracker = new AbandonedCartPageVisitTracker($this->wp, $wooCommerceHelperMock, new SubscriberCookie(new Cookies())); + $this->pageVisitTracker = new AbandonedCartPageVisitTracker( + $this->wp, + $wooCommerceHelperMock, + new SubscriberCookie(new Cookies(), new TrackingConfig($settings)) + ); } public function testItSetsTimestampWhenTrackingStarted() { @@ -103,8 +110,9 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest { $cookiesMock->expects($this->once())->method('set')->with('mailpoet_subscriber', ['subscriber_id' => '123']); $cookiesMock->expects($this->once())->method('delete')->with('mailpoet_abandoned_cart_tracking'); + $settings = $this->diContainer->get(SettingsController::class); $pageVisitTracker = Stub::copy($this->pageVisitTracker, [ - 'subscriberCookie' => new SubscriberCookie($cookiesMock), + 'subscriberCookie' => new SubscriberCookie($cookiesMock, new TrackingConfig($settings)), ]); $hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60; diff --git a/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartTest.php b/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartTest.php index 03f1bc8137..55ea62c6f6 100644 --- a/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartTest.php +++ b/tests/integration/AutomaticEmails/WooCommerce/Events/AbandonedCartTest.php @@ -11,6 +11,8 @@ use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\SendingQueue; use MailPoet\Models\Subscriber; use MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler; +use MailPoet\Settings\SettingsController; +use MailPoet\Settings\TrackingConfig; use MailPoet\Statistics\Track\SubscriberCookie; use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Util\Cookies; @@ -78,10 +80,11 @@ class AbandonedCartTest extends \MailPoetTest { } public function testItGetsEventDetails() { + $settings = $this->diContainer->get(SettingsController::class); $wp = new WPFunctions(); $wcHelper = new WooCommerceHelper(); $cookies = new Cookies(); - $subscriberCookie = new SubscriberCookie($cookies); + $subscriberCookie = new SubscriberCookie($cookies, new TrackingConfig($settings)); $event = new AbandonedCart( $wp, $wcHelper, @@ -275,10 +278,11 @@ class AbandonedCartTest extends \MailPoetTest { } private function createAbandonedCartEmail() { + $settings = $this->diContainer->get(SettingsController::class); return $this->make(AbandonedCart::class, [ 'wp' => $this->wp, 'wooCommerceHelper' => $this->wooCommerceHelperMock, - 'subscriberCookie' => new SubscriberCookie(new Cookies()), + 'subscriberCookie' => new SubscriberCookie(new Cookies(), new TrackingConfig($settings)), 'pageVisitTracker' => $this->pageVisitTrackerMock, 'scheduler' => new AutomaticEmailScheduler(), ]);