Track source when user unsubscribes from manage

[MAILPOET-2792]
This commit is contained in:
Pavel Dohnal
2020-06-17 11:26:24 +02:00
committed by Veljko V
parent 47890d4f27
commit 795ec44568
3 changed files with 31 additions and 1 deletions

View File

@@ -17,6 +17,8 @@ class StatisticsUnsubscribeEntity {
use SafeToOneAssociationLoadTrait; use SafeToOneAssociationLoadTrait;
const SOURCE_NEWSLETTER = 'newsletter'; const SOURCE_NEWSLETTER = 'newsletter';
const SOURCE_MANAGE = 'manage';
/** /**
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\NewsletterEntity") * @ORM\ManyToOne(targetEntity="MailPoet\Entities\NewsletterEntity")
* @ORM\JoinColumn(name="newsletter_id", referencedColumnName="id") * @ORM\JoinColumn(name="newsletter_id", referencedColumnName="id")

View File

@@ -2,11 +2,14 @@
namespace MailPoet\Subscription; namespace MailPoet\Subscription;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Form\Util\FieldNameObfuscator; use MailPoet\Form\Util\FieldNameObfuscator;
use MailPoet\Models\CustomField; use MailPoet\Models\CustomField;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SubscriberSegment;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\Unsubscribes;
use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\LinkTokens;
use MailPoet\Util\Url as UrlHelper; use MailPoet\Util\Url as UrlHelper;
@@ -24,9 +27,19 @@ class Manage {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
public function __construct(UrlHelper $urlHelper, FieldNameObfuscator $fieldNameObfuscator, LinkTokens $linkTokens, SettingsController $settings) { /** @var Unsubscribes */
private $unsubscribesTracker;
public function __construct(
UrlHelper $urlHelper,
FieldNameObfuscator $fieldNameObfuscator,
LinkTokens $linkTokens,
Unsubscribes $unsubscribesTracker,
SettingsController $settings
) {
$this->urlHelper = $urlHelper; $this->urlHelper = $urlHelper;
$this->fieldNameObfuscator = $fieldNameObfuscator; $this->fieldNameObfuscator = $fieldNameObfuscator;
$this->unsubscribesTracker = $unsubscribesTracker;
$this->linkTokens = $linkTokens; $this->linkTokens = $linkTokens;
$this->settings = $settings; $this->settings = $settings;
} }
@@ -43,6 +56,19 @@ class Manage {
if (!empty($subscriberData['email'])) { if (!empty($subscriberData['email'])) {
$subscriber = Subscriber::where('email', $subscriberData['email'])->findOne(); $subscriber = Subscriber::where('email', $subscriberData['email'])->findOne();
if (
($subscriberData['status'] === SubscriberEntity::STATUS_UNSUBSCRIBED)
&& ($subscriber instanceof Subscriber)
&& ($subscriber->status === SubscriberEntity::STATUS_SUBSCRIBED)
) {
$this->unsubscribesTracker->track(
(int)$subscriber->id,
null,
StatisticsUnsubscribeEntity::SOURCE_MANAGE
);
}
if ($subscriber && $this->linkTokens->verifyToken($subscriber, $token)) { if ($subscriber && $this->linkTokens->verifyToken($subscriber, $token)) {
if ($subscriberData['email'] !== Pages::DEMO_EMAIL) { if ($subscriberData['email'] !== Pages::DEMO_EMAIL) {
$this->updateSubscriptions($subscriber, $subscriberData); $this->updateSubscriptions($subscriber, $subscriberData);

View File

@@ -8,6 +8,7 @@ use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SubscriberSegment;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Statistics\Track\Unsubscribes;
use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\LinkTokens;
use MailPoet\Subscription\Manage; use MailPoet\Subscription\Manage;
use MailPoet\Util\Url as UrlHelper; use MailPoet\Util\Url as UrlHelper;
@@ -54,6 +55,7 @@ class ManageTest extends \MailPoetTest {
return true; return true;
}, },
]), ]),
$this->diContainer->get(Unsubscribes::class),
$this->settings $this->settings
); );
$_POST['action'] = 'mailpoet_subscription_update'; $_POST['action'] = 'mailpoet_subscription_update';