Rename subscriber cookie, keep support for the legacy name
[MAILPOET-3924]
This commit is contained in:
@@ -5,7 +5,8 @@ namespace MailPoet\Statistics\Track;
|
||||
use MailPoet\Util\Cookies;
|
||||
|
||||
class SubscriberCookie {
|
||||
const COOKIE_NAME = 'mailpoet_abandoned_cart_tracking';
|
||||
const COOKIE_NAME = 'mailpoet_subscriber';
|
||||
const COOKIE_NAME_LEGACY = 'mailpoet_abandoned_cart_tracking';
|
||||
const COOKIE_EXPIRY = 10 * 365 * 24 * 60 * 60; // 10 years (~ no expiry)
|
||||
|
||||
/** @var Cookies */
|
||||
@@ -18,10 +19,18 @@ class SubscriberCookie {
|
||||
}
|
||||
|
||||
public function getSubscriberId(): ?int {
|
||||
$data = $this->cookies->get(self::COOKIE_NAME);
|
||||
return is_array($data) && $data['subscriber_id']
|
||||
? (int)$data['subscriber_id']
|
||||
: null;
|
||||
$subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME);
|
||||
if ($subscriberId) {
|
||||
return $subscriberId;
|
||||
}
|
||||
|
||||
$subscriberId = $this->getSubscriberIdFromCookie(self::COOKIE_NAME_LEGACY);
|
||||
if ($subscriberId) {
|
||||
$this->setSubscriberId($subscriberId);
|
||||
$this->cookies->delete(self::COOKIE_NAME_LEGACY);
|
||||
return $subscriberId;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function setSubscriberId(int $subscriberId): void {
|
||||
@@ -34,4 +43,11 @@ class SubscriberCookie {
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
private function getSubscriberIdFromCookie(string $cookieName): ?int {
|
||||
$data = $this->cookies->get($cookieName);
|
||||
return is_array($data) && $data['subscriber_id']
|
||||
? (int)$data['subscriber_id']
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
||||
|
||||
use Codeception\Stub;
|
||||
use MailPoet\Statistics\Track\SubscriberCookie;
|
||||
use MailPoet\Util\Cookies;
|
||||
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
||||
@@ -78,7 +79,7 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest {
|
||||
$this->wp->method('wpGetCurrentUser')->willReturn(
|
||||
$this->makeEmpty(WP_User::class, ['exists' => false])
|
||||
);
|
||||
$_COOKIE['mailpoet_abandoned_cart_tracking'] = json_encode(['subscriber_id' => '123']);
|
||||
$_COOKIE['mailpoet_subscriber'] = json_encode(['subscriber_id' => '123']);
|
||||
|
||||
$hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60;
|
||||
$this->sessionStore['mailpoet_last_visit_timestamp'] = $hourAgoTimestamp;
|
||||
@@ -86,6 +87,32 @@ class AbandonedCartPageVisitTrackerTest extends \MailPoetTest {
|
||||
expect($this->sessionStore['mailpoet_last_visit_timestamp'])->same($this->currentTime->getTimestamp());
|
||||
}
|
||||
|
||||
public function testItTracksByLegacyCookie() {
|
||||
$this->wp->method('isAdmin')->willReturn(false);
|
||||
$this->wp->method('wpGetCurrentUser')->willReturn(
|
||||
$this->makeEmpty(WP_User::class, ['exists' => false])
|
||||
);
|
||||
|
||||
$cookiesMock = $this->createMock(Cookies::class);
|
||||
$cookiesMock->method('get')->willReturnCallback(function (string $name) {
|
||||
if ($name === 'mailpoet_abandoned_cart_tracking') {
|
||||
return ['subscriber_id' => '123'];
|
||||
}
|
||||
return null;
|
||||
});
|
||||
$cookiesMock->expects($this->once())->method('set')->with('mailpoet_subscriber', ['subscriber_id' => '123']);
|
||||
$cookiesMock->expects($this->once())->method('delete')->with('mailpoet_abandoned_cart_tracking');
|
||||
|
||||
$pageVisitTracker = Stub::copy($this->pageVisitTracker, [
|
||||
'subscriberCookie' => new SubscriberCookie($cookiesMock),
|
||||
]);
|
||||
|
||||
$hourAgoTimestamp = $this->currentTime->getTimestamp() - 60 * 60;
|
||||
$this->sessionStore['mailpoet_last_visit_timestamp'] = $hourAgoTimestamp;
|
||||
$pageVisitTracker->trackVisit();
|
||||
expect($this->sessionStore['mailpoet_last_visit_timestamp'])->same($this->currentTime->getTimestamp());
|
||||
}
|
||||
|
||||
public function testItDoesNotTrackWhenUserNotFound() {
|
||||
$this->wp->method('isAdmin')->willReturn(false);
|
||||
$this->wp->method('wpGetCurrentUser')->willReturn(
|
||||
|
@@ -144,7 +144,7 @@ class AbandonedCartTest extends \MailPoetTest {
|
||||
])
|
||||
);
|
||||
|
||||
$_COOKIE['mailpoet_abandoned_cart_tracking'] = json_encode([
|
||||
$_COOKIE['mailpoet_subscriber'] = json_encode([
|
||||
'subscriber_id' => $subscriber->id,
|
||||
]);
|
||||
|
||||
|
Reference in New Issue
Block a user