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\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() {
|
||||
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user