Set subscriber cookie on login
[MAILPOET-3924]
This commit is contained in:
@@ -7,6 +7,7 @@ use MailPoet\Mailer\WordPress\WordpressMailerReplacer;
|
|||||||
use MailPoet\Newsletter\Scheduler\PostNotificationScheduler;
|
use MailPoet\Newsletter\Scheduler\PostNotificationScheduler;
|
||||||
use MailPoet\Segments\WP;
|
use MailPoet\Segments\WP;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Statistics\Track\SubscriberHandler;
|
||||||
use MailPoet\Subscription\Comment;
|
use MailPoet\Subscription\Comment;
|
||||||
use MailPoet\Subscription\Form;
|
use MailPoet\Subscription\Form;
|
||||||
use MailPoet\Subscription\Manage;
|
use MailPoet\Subscription\Manage;
|
||||||
@@ -44,6 +45,9 @@ class Hooks {
|
|||||||
/** @var WP */
|
/** @var WP */
|
||||||
private $wpSegment;
|
private $wpSegment;
|
||||||
|
|
||||||
|
/** @var SubscriberHandler */
|
||||||
|
private $subscriberHandler;
|
||||||
|
|
||||||
/** @var HooksWooCommerce */
|
/** @var HooksWooCommerce */
|
||||||
private $hooksWooCommerce;
|
private $hooksWooCommerce;
|
||||||
|
|
||||||
@@ -58,6 +62,7 @@ class Hooks {
|
|||||||
WordpressMailerReplacer $wordpressMailerReplacer,
|
WordpressMailerReplacer $wordpressMailerReplacer,
|
||||||
DisplayFormInWPContent $displayFormInWPContent,
|
DisplayFormInWPContent $displayFormInWPContent,
|
||||||
HooksWooCommerce $hooksWooCommerce,
|
HooksWooCommerce $hooksWooCommerce,
|
||||||
|
SubscriberHandler $subscriberHandler,
|
||||||
WP $wpSegment
|
WP $wpSegment
|
||||||
) {
|
) {
|
||||||
$this->subscriptionForm = $subscriptionForm;
|
$this->subscriptionForm = $subscriptionForm;
|
||||||
@@ -70,6 +75,7 @@ class Hooks {
|
|||||||
$this->wordpressMailerReplacer = $wordpressMailerReplacer;
|
$this->wordpressMailerReplacer = $wordpressMailerReplacer;
|
||||||
$this->displayFormInWPContent = $displayFormInWPContent;
|
$this->displayFormInWPContent = $displayFormInWPContent;
|
||||||
$this->wpSegment = $wpSegment;
|
$this->wpSegment = $wpSegment;
|
||||||
|
$this->subscriberHandler = $subscriberHandler;
|
||||||
$this->hooksWooCommerce = $hooksWooCommerce;
|
$this->hooksWooCommerce = $hooksWooCommerce;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -270,6 +276,14 @@ class Hooks {
|
|||||||
[$this->wpSegment, 'synchronizeUser'],
|
[$this->wpSegment, 'synchronizeUser'],
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// login
|
||||||
|
$this->wp->addAction(
|
||||||
|
'wp_login',
|
||||||
|
[$this->subscriberHandler, 'identifyByLogin'],
|
||||||
|
10,
|
||||||
|
1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setupWooCommerceSettings() {
|
public function setupWooCommerceSettings() {
|
||||||
|
@@ -5,6 +5,7 @@ namespace MailPoet\Statistics\Track;
|
|||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Settings\TrackingConfig;
|
use MailPoet\Settings\TrackingConfig;
|
||||||
use MailPoet\Subscribers\SubscribersRepository;
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
class SubscriberHandler {
|
class SubscriberHandler {
|
||||||
/** @var SubscriberCookie */
|
/** @var SubscriberCookie */
|
||||||
@@ -16,14 +17,30 @@ class SubscriberHandler {
|
|||||||
/** @var TrackingConfig */
|
/** @var TrackingConfig */
|
||||||
private $trackingConfig;
|
private $trackingConfig;
|
||||||
|
|
||||||
|
/** @var WPFunctions */
|
||||||
|
private $wp;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SubscriberCookie $subscriberCookie,
|
SubscriberCookie $subscriberCookie,
|
||||||
SubscribersRepository $subscribersRepository,
|
SubscribersRepository $subscribersRepository,
|
||||||
TrackingConfig $trackingConfig
|
TrackingConfig $trackingConfig,
|
||||||
|
WPFunctions $wp
|
||||||
) {
|
) {
|
||||||
$this->subscriberCookie = $subscriberCookie;
|
$this->subscriberCookie = $subscriberCookie;
|
||||||
$this->subscribersRepository = $subscribersRepository;
|
$this->subscribersRepository = $subscribersRepository;
|
||||||
$this->trackingConfig = $trackingConfig;
|
$this->trackingConfig = $trackingConfig;
|
||||||
|
$this->wp = $wp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function identifyByLogin(string $login): void {
|
||||||
|
if (!$this->trackingConfig->isCookieTrackingEnabled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$wpUser = $this->wp->getUserBy('login', $login);
|
||||||
|
if ($wpUser) {
|
||||||
|
$this->identifyByEmail($wpUser->user_email); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function identifyByEmail(string $email): void {
|
public function identifyByEmail(string $email): void {
|
||||||
|
@@ -4,6 +4,7 @@ namespace MailPoet\Test\Acceptance;
|
|||||||
|
|
||||||
use AcceptanceTester;
|
use AcceptanceTester;
|
||||||
use MailPoet\Test\DataFactories\Settings;
|
use MailPoet\Test\DataFactories\Settings;
|
||||||
|
use MailPoet\Test\DataFactories\User;
|
||||||
use PHPUnit\Framework\Assert;
|
use PHPUnit\Framework\Assert;
|
||||||
|
|
||||||
class SubscriberCookieCest {
|
class SubscriberCookieCest {
|
||||||
@@ -38,6 +39,25 @@ class SubscriberCookieCest {
|
|||||||
$this->checkSubscriberCookie($i, $email);
|
$this->checkSubscriberCookie($i, $email);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setSubscriberCookieOnLogin(AcceptanceTester $i) {
|
||||||
|
$i->wantTo('Set subscriber cookie on login');
|
||||||
|
|
||||||
|
$email = 'test-user@example.com';
|
||||||
|
(new User())->createUser('test-user', 'subscriber', $email);
|
||||||
|
|
||||||
|
// login
|
||||||
|
$i->cantSeeCookie(self::SUBSCRIBER_COOKIE_NAME);
|
||||||
|
$i->amOnPage('/wp-login.php');
|
||||||
|
$i->wait(1); // username is not filled properly without this line
|
||||||
|
$i->fillField('Username', 'test-user');
|
||||||
|
$i->fillField('Password', 'test-user-password');
|
||||||
|
$i->click('Log In');
|
||||||
|
$i->waitForText('Dashboard');
|
||||||
|
|
||||||
|
// subscriber cookie should be set right after login
|
||||||
|
$this->checkSubscriberCookie($i, $email);
|
||||||
|
}
|
||||||
|
|
||||||
private function checkSubscriberCookie(AcceptanceTester $i, string $email): void {
|
private function checkSubscriberCookie(AcceptanceTester $i, string $email): void {
|
||||||
$subscriberId = (int)$i->grabFromDatabase(MP_SUBSCRIBERS_TABLE, 'id', ['email' => $email]);
|
$subscriberId = (int)$i->grabFromDatabase(MP_SUBSCRIBERS_TABLE, 'id', ['email' => $email]);
|
||||||
$i->canSeeCookie(self::SUBSCRIBER_COOKIE_NAME);
|
$i->canSeeCookie(self::SUBSCRIBER_COOKIE_NAME);
|
||||||
|
Reference in New Issue
Block a user