Move cookie tracking permission check to subscriber cookie service

[MAILPOET-3924]
This commit is contained in:
Jan Jakes
2021-12-10 13:58:43 +01:00
committed by Veljko V
parent f9cd7901af
commit 4ef2d4ed94
4 changed files with 37 additions and 12 deletions

View File

@@ -107,7 +107,12 @@ class Clicks {
} }
$this->statisticsClicksRepository->flush(); $this->statisticsClicksRepository->flush();
$this->sendRevenueCookie($statisticsClicks); $this->sendRevenueCookie($statisticsClicks);
$this->sendSubscriberCookie($subscriber);
$subscriberId = $subscriber->getId();
if ($subscriberId) {
$this->subscriberCookie->setSubscriberId($subscriberId);
}
// track open event // track open event
$this->opens->track($data, $displayImage = false); $this->opens->track($data, $displayImage = false);
// Update engagement date // 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( public function processUrl(
string $url, string $url,
NewsletterEntity $newsletter, NewsletterEntity $newsletter,

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Statistics\Track; namespace MailPoet\Statistics\Track;
use MailPoet\Settings\TrackingConfig;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
class SubscriberCookie { class SubscriberCookie {
@@ -12,13 +13,22 @@ class SubscriberCookie {
/** @var Cookies */ /** @var Cookies */
private $cookies; private $cookies;
/** @var TrackingConfig */
private $trackingConfig;
public function __construct( public function __construct(
Cookies $cookies Cookies $cookies,
TrackingConfig $trackingConfig
) { ) {
$this->cookies = $cookies; $this->cookies = $cookies;
$this->trackingConfig = $trackingConfig;
} }
public function getSubscriberId(): ?int { public function getSubscriberId(): ?int {
if (!$this->trackingConfig->isCookieTrackingEnabled()) {
return null;
}
$subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME); $subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME);
if ($subscriberId) { if ($subscriberId) {
return $subscriberId; return $subscriberId;
@@ -34,6 +44,10 @@ class SubscriberCookie {
} }
public function setSubscriberId(int $subscriberId): void { public function setSubscriberId(int $subscriberId): void {
if (!$this->trackingConfig->isCookieTrackingEnabled()) {
return;
}
$this->cookies->set( $this->cookies->set(
self::COOKIE_NAME, self::COOKIE_NAME,
['subscriber_id' => $subscriberId], ['subscriber_id' => $subscriberId],

View File

@@ -3,6 +3,8 @@
namespace MailPoet\AutomaticEmails\WooCommerce\Events; namespace MailPoet\AutomaticEmails\WooCommerce\Events;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\TrackingConfig;
use MailPoet\Statistics\Track\SubscriberCookie; use MailPoet\Statistics\Track\SubscriberCookie;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
use MailPoet\WooCommerce\Helper as WooCommerceHelper; use MailPoet\WooCommerce\Helper as WooCommerceHelper;
@@ -43,8 +45,13 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest {
'WC' => $wooCommerceMock, 'WC' => $wooCommerceMock,
]); ]);
$settings = $this->diContainer->get(SettingsController::class);
$this->sessionStore = []; $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() { 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('set')->with('mailpoet_subscriber', ['subscriber_id' => '123']);
$cookiesMock->expects($this->once())->method('delete')->with('mailpoet_abandoned_cart_tracking'); $cookiesMock->expects($this->once())->method('delete')->with('mailpoet_abandoned_cart_tracking');
$settings = $this->diContainer->get(SettingsController::class);
$pageVisitTracker = Stub::copy($this->pageVisitTracker, [ $pageVisitTracker = Stub::copy($this->pageVisitTracker, [
'subscriberCookie' => new SubscriberCookie($cookiesMock), 'subscriberCookie' => new SubscriberCookie($cookiesMock, new TrackingConfig($settings)),
]); ]);
$hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60; $hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60;

View File

@@ -11,6 +11,8 @@ use MailPoet\Models\ScheduledTaskSubscriber;
use MailPoet\Models\SendingQueue; use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler; use MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler;
use MailPoet\Settings\SettingsController;
use MailPoet\Settings\TrackingConfig;
use MailPoet\Statistics\Track\SubscriberCookie; use MailPoet\Statistics\Track\SubscriberCookie;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
use MailPoet\Util\Cookies; use MailPoet\Util\Cookies;
@@ -78,10 +80,11 @@ class AbandonedCartTest extends \MailPoetTest {
} }
public function testItGetsEventDetails() { public function testItGetsEventDetails() {
$settings = $this->diContainer->get(SettingsController::class);
$wp = new WPFunctions(); $wp = new WPFunctions();
$wcHelper = new WooCommerceHelper(); $wcHelper = new WooCommerceHelper();
$cookies = new Cookies(); $cookies = new Cookies();
$subscriberCookie = new SubscriberCookie($cookies); $subscriberCookie = new SubscriberCookie($cookies, new TrackingConfig($settings));
$event = new AbandonedCart( $event = new AbandonedCart(
$wp, $wp,
$wcHelper, $wcHelper,
@@ -275,10 +278,11 @@ class AbandonedCartTest extends \MailPoetTest {
} }
private function createAbandonedCartEmail() { private function createAbandonedCartEmail() {
$settings = $this->diContainer->get(SettingsController::class);
return $this->make(AbandonedCart::class, [ return $this->make(AbandonedCart::class, [
'wp' => $this->wp, 'wp' => $this->wp,
'wooCommerceHelper' => $this->wooCommerceHelperMock, 'wooCommerceHelper' => $this->wooCommerceHelperMock,
'subscriberCookie' => new SubscriberCookie(new Cookies()), 'subscriberCookie' => new SubscriberCookie(new Cookies(), new TrackingConfig($settings)),
'pageVisitTracker' => $this->pageVisitTrackerMock, 'pageVisitTracker' => $this->pageVisitTrackerMock,
'scheduler' => new AutomaticEmailScheduler(), 'scheduler' => new AutomaticEmailScheduler(),
]); ]);