Set subscriber cookie on signup
[MAILPOET-3924]
This commit is contained in:
@@ -247,6 +247,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\Statistics\Track\Clicks::class);
|
||||
$container->autowire(\MailPoet\Statistics\Track\Opens::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Statistics\Track\SubscriberCookie::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Statistics\Track\SubscriberHandler::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Statistics\Track\WooCommercePurchases::class);
|
||||
$container->autowire(\MailPoet\Statistics\Track\Unsubscribes::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\Statistics\StatisticsFormsRepository::class)->setPublic(true);
|
||||
|
46
lib/Statistics/Track/SubscriberHandler.php
Normal file
46
lib/Statistics/Track/SubscriberHandler.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\Statistics\Track;
|
||||
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Settings\TrackingConfig;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
|
||||
class SubscriberHandler {
|
||||
/** @var SubscriberCookie */
|
||||
private $subscriberCookie;
|
||||
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var TrackingConfig */
|
||||
private $trackingConfig;
|
||||
|
||||
public function __construct(
|
||||
SubscriberCookie $subscriberCookie,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
TrackingConfig $trackingConfig
|
||||
) {
|
||||
$this->subscriberCookie = $subscriberCookie;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->trackingConfig = $trackingConfig;
|
||||
}
|
||||
|
||||
public function identifyByEmail(string $email): void {
|
||||
if (!$this->trackingConfig->isCookieTrackingEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$subscriber = $this->subscribersRepository->findOneBy(['email' => $email]);
|
||||
if ($subscriber) {
|
||||
$this->setCookieBySubscriber($subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
private function setCookieBySubscriber(SubscriberEntity $subscriber): void {
|
||||
$subscriberId = $subscriber->getId();
|
||||
if ($subscriberId) {
|
||||
$this->subscriberCookie->setSubscriberId($subscriberId);
|
||||
}
|
||||
}
|
||||
}
|
@@ -3,6 +3,7 @@
|
||||
namespace MailPoet\Subscription;
|
||||
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Statistics\Track\SubscriberHandler;
|
||||
use MailPoet\Subscribers\SubscriberActions;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
@@ -17,14 +18,19 @@ class Registration {
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
/** @var SubscriberHandler */
|
||||
private $subscriberHandler;
|
||||
|
||||
public function __construct(
|
||||
SettingsController $settings,
|
||||
WPFunctions $wp,
|
||||
SubscriberActions $subscriberActions
|
||||
SubscriberActions $subscriberActions,
|
||||
SubscriberHandler $subscriberHandler
|
||||
) {
|
||||
$this->settings = $settings;
|
||||
$this->subscriberActions = $subscriberActions;
|
||||
$this->wp = $wp;
|
||||
$this->subscriberHandler = $subscriberHandler;
|
||||
}
|
||||
|
||||
public function extendForm() {
|
||||
@@ -100,5 +106,8 @@ class Registration {
|
||||
],
|
||||
$segmentIds
|
||||
);
|
||||
|
||||
// start subscriber tracking (by email, we don't have WP user ID yet)
|
||||
$this->subscriberHandler->identifyByEmail($email);
|
||||
}
|
||||
}
|
||||
|
47
tests/acceptance/Subscribers/SubscriberCookieCest.php
Normal file
47
tests/acceptance/Subscribers/SubscriberCookieCest.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Test\Acceptance;
|
||||
|
||||
use AcceptanceTester;
|
||||
use MailPoet\Test\DataFactories\Settings;
|
||||
use PHPUnit\Framework\Assert;
|
||||
|
||||
class SubscriberCookieCest {
|
||||
private const SUBSCRIBER_COOKIE_NAME = 'mailpoet_subscriber';
|
||||
|
||||
public function setSubscriberCookieOnSignup(AcceptanceTester $i) {
|
||||
$i->wantTo('Set subscriber cookie on signup');
|
||||
|
||||
(new Settings())->withSubscribeOnRegisterEnabled();
|
||||
$email = 'test-user@example.com';
|
||||
|
||||
// signup
|
||||
$i->cantSeeCookie(self::SUBSCRIBER_COOKIE_NAME);
|
||||
$i->amOnPage('/wp-login.php?action=register');
|
||||
$i->waitForElement(['css' => '.registration-form-mailpoet']);
|
||||
if (!getenv('MULTISITE')) {
|
||||
$i->fillField(['name' => 'user_login'], 'test-user');
|
||||
$i->fillField(['name' => 'user_email'], $email);
|
||||
$i->checkOption('#mailpoet_subscribe_on_register');
|
||||
$i->click('#wp-submit');
|
||||
$i->waitForText('Registration complete. Please check your email');
|
||||
} else {
|
||||
$i->fillField(['name' => 'user_name'], 'mu-test-user');
|
||||
$i->fillField(['name' => 'user_email'], $email);
|
||||
$i->scrollTo(['css' => '#mailpoet_subscribe_on_register']);
|
||||
$i->checkOption('#mailpoet_subscribe_on_register');
|
||||
$i->click('Next');
|
||||
$i->waitForText('mu-test-user is your new username');
|
||||
}
|
||||
|
||||
// subscriber cookie should be set right after signup
|
||||
$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);
|
||||
$cookie = $i->grabCookie(self::SUBSCRIBER_COOKIE_NAME);
|
||||
Assert::assertEquals($cookie, urlencode(json_encode(['subscriber_id' => $subscriberId]) ?: ''));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user