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\Clicks::class);
|
||||||
$container->autowire(\MailPoet\Statistics\Track\Opens::class)->setPublic(true);
|
$container->autowire(\MailPoet\Statistics\Track\Opens::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Statistics\Track\SubscriberCookie::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\WooCommercePurchases::class);
|
||||||
$container->autowire(\MailPoet\Statistics\Track\Unsubscribes::class)->setPublic(true);
|
$container->autowire(\MailPoet\Statistics\Track\Unsubscribes::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Statistics\StatisticsFormsRepository::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;
|
namespace MailPoet\Subscription;
|
||||||
|
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Statistics\Track\SubscriberHandler;
|
||||||
use MailPoet\Subscribers\SubscriberActions;
|
use MailPoet\Subscribers\SubscriberActions;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
|
|
||||||
@@ -17,14 +18,19 @@ class Registration {
|
|||||||
/** @var WPFunctions */
|
/** @var WPFunctions */
|
||||||
private $wp;
|
private $wp;
|
||||||
|
|
||||||
|
/** @var SubscriberHandler */
|
||||||
|
private $subscriberHandler;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SettingsController $settings,
|
SettingsController $settings,
|
||||||
WPFunctions $wp,
|
WPFunctions $wp,
|
||||||
SubscriberActions $subscriberActions
|
SubscriberActions $subscriberActions,
|
||||||
|
SubscriberHandler $subscriberHandler
|
||||||
) {
|
) {
|
||||||
$this->settings = $settings;
|
$this->settings = $settings;
|
||||||
$this->subscriberActions = $subscriberActions;
|
$this->subscriberActions = $subscriberActions;
|
||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
|
$this->subscriberHandler = $subscriberHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function extendForm() {
|
public function extendForm() {
|
||||||
@@ -100,5 +106,8 @@ class Registration {
|
|||||||
],
|
],
|
||||||
$segmentIds
|
$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