Set subscriber cookie on login

[MAILPOET-3924]
This commit is contained in:
Jan Jakes
2021-12-15 14:04:43 +01:00
committed by Veljko V
parent 1833a11570
commit e2c466726e
3 changed files with 52 additions and 1 deletions

View File

@@ -7,6 +7,7 @@ use MailPoet\Mailer\WordPress\WordpressMailerReplacer;
use MailPoet\Newsletter\Scheduler\PostNotificationScheduler;
use MailPoet\Segments\WP;
use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\SubscriberHandler;
use MailPoet\Subscription\Comment;
use MailPoet\Subscription\Form;
use MailPoet\Subscription\Manage;
@@ -44,6 +45,9 @@ class Hooks {
/** @var WP */
private $wpSegment;
/** @var SubscriberHandler */
private $subscriberHandler;
/** @var HooksWooCommerce */
private $hooksWooCommerce;
@@ -58,6 +62,7 @@ class Hooks {
WordpressMailerReplacer $wordpressMailerReplacer,
DisplayFormInWPContent $displayFormInWPContent,
HooksWooCommerce $hooksWooCommerce,
SubscriberHandler $subscriberHandler,
WP $wpSegment
) {
$this->subscriptionForm = $subscriptionForm;
@@ -70,6 +75,7 @@ class Hooks {
$this->wordpressMailerReplacer = $wordpressMailerReplacer;
$this->displayFormInWPContent = $displayFormInWPContent;
$this->wpSegment = $wpSegment;
$this->subscriberHandler = $subscriberHandler;
$this->hooksWooCommerce = $hooksWooCommerce;
}
@@ -270,6 +276,14 @@ class Hooks {
[$this->wpSegment, 'synchronizeUser'],
1
);
// login
$this->wp->addAction(
'wp_login',
[$this->subscriberHandler, 'identifyByLogin'],
10,
1
);
}
public function setupWooCommerceSettings() {

View File

@@ -5,6 +5,7 @@ namespace MailPoet\Statistics\Track;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Settings\TrackingConfig;
use MailPoet\Subscribers\SubscribersRepository;
use MailPoet\WP\Functions as WPFunctions;
class SubscriberHandler {
/** @var SubscriberCookie */
@@ -16,14 +17,30 @@ class SubscriberHandler {
/** @var TrackingConfig */
private $trackingConfig;
/** @var WPFunctions */
private $wp;
public function __construct(
SubscriberCookie $subscriberCookie,
SubscribersRepository $subscribersRepository,
TrackingConfig $trackingConfig
TrackingConfig $trackingConfig,
WPFunctions $wp
) {
$this->subscriberCookie = $subscriberCookie;
$this->subscribersRepository = $subscribersRepository;
$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 {

View File

@@ -4,6 +4,7 @@ namespace MailPoet\Test\Acceptance;
use AcceptanceTester;
use MailPoet\Test\DataFactories\Settings;
use MailPoet\Test\DataFactories\User;
use PHPUnit\Framework\Assert;
class SubscriberCookieCest {
@@ -38,6 +39,25 @@ class SubscriberCookieCest {
$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 {
$subscriberId = (int)$i->grabFromDatabase(MP_SUBSCRIBERS_TABLE, 'id', ['email' => $email]);
$i->canSeeCookie(self::SUBSCRIBER_COOKIE_NAME);