Add method of tracking when tracking unsubscriptions

[MAILPOET-4733]
This commit is contained in:
Sam Najian
2022-11-08 21:09:14 +01:00
committed by Aschepikov
parent 90c8e5b2c9
commit 735d33d05b
5 changed files with 29 additions and 9 deletions

View File

@@ -22,6 +22,9 @@ class StatisticsUnsubscribeEntity {
const SOURCE_ORDER_CHECKOUT = 'order_checkout'; const SOURCE_ORDER_CHECKOUT = 'order_checkout';
const SOURCE_AUTOMATION = 'automation'; const SOURCE_AUTOMATION = 'automation';
const METHOD_LINK = 'link';
const METHOD_ONE_CLICK = 'one_click';
/** /**
* @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")
@@ -115,6 +118,13 @@ class StatisticsUnsubscribeEntity {
return $this->meta; return $this->meta;
} }
/**
* @param string $method
*/
public function setMethod(string $method) {
$this->method = $method;
}
/** /**
* @return string * @return string
*/ */

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Router\Endpoints; namespace MailPoet\Router\Endpoints;
use MailPoet\Config\AccessControl; use MailPoet\Config\AccessControl;
use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Subscription as UserSubscription; use MailPoet\Subscription as UserSubscription;
use MailPoet\Util\Request; use MailPoet\Util\Request;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
@@ -102,7 +103,7 @@ class Subscription {
exit; exit;
} else { } else {
$subscription = $this->initSubscriptionPage(UserSubscription\Pages::ACTION_UNSUBSCRIBE, $data); $subscription = $this->initSubscriptionPage(UserSubscription\Pages::ACTION_UNSUBSCRIBE, $data);
$subscription->unsubscribe(); $subscription->unsubscribe(StatisticsUnsubscribeEntity::METHOD_LINK);
} }
} }
@@ -119,6 +120,6 @@ class Subscription {
return; return;
} }
$subscription = $this->initSubscriptionPage(UserSubscription\Pages::ACTION_UNSUBSCRIBE, $data); $subscription = $this->initSubscriptionPage(UserSubscription\Pages::ACTION_UNSUBSCRIBE, $data);
$subscription->unsubscribe(); $subscription->unsubscribe(StatisticsUnsubscribeEntity::METHOD_ONE_CLICK);
} }
} }

View File

@@ -32,7 +32,13 @@ class Unsubscribes {
$this->subscribersRepository = $subscribersRepository; $this->subscribersRepository = $subscribersRepository;
} }
public function track(int $subscriberId, string $source, int $queueId = null, string $meta = null) { public function track(
int $subscriberId,
string $source,
int $queueId = null,
string $meta = null,
string $method = 'unknown'
) {
$queue = null; $queue = null;
$statistics = null; $statistics = null;
if ($queueId) { if ($queueId) {
@@ -65,6 +71,7 @@ class Unsubscribes {
$statistics->setMeta($meta); $statistics->setMeta($meta);
} }
$statistics->setSource($source); $statistics->setSource($source);
$statistics->setMethod($method);
$this->statisticsUnsubscribesRepository->persist($statistics); $this->statisticsUnsubscribesRepository->persist($statistics);
$this->statisticsUnsubscribesRepository->flush(); $this->statisticsUnsubscribesRepository->flush();
} }

View File

@@ -227,7 +227,7 @@ class Pages {
} }
} }
public function unsubscribe() { public function unsubscribe(string $method): void {
if ( if (
!$this->isPreview() !$this->isPreview()
&& ($this->subscriber !== null) && ($this->subscriber !== null)
@@ -237,7 +237,9 @@ class Pages {
$this->unsubscribesTracker->track( $this->unsubscribesTracker->track(
(int)$this->subscriber->id, (int)$this->subscriber->id,
StatisticsUnsubscribeEntity::SOURCE_NEWSLETTER, StatisticsUnsubscribeEntity::SOURCE_NEWSLETTER,
(int)$this->data['queueId'] (int)$this->data['queueId'],
null,
$method
); );
} }
$this->subscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED); $this->subscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED);

View File

@@ -164,7 +164,7 @@ class PagesTest extends \MailPoetTest {
$this->createSubscriberSegment($segment); $this->createSubscriberSegment($segment);
$pages = $this->getPages()->init($action = 'unsubscribe', $this->testData); $pages = $this->getPages()->init($action = 'unsubscribe', $this->testData);
$pages->unsubscribe(); $pages->unsubscribe(StatisticsUnsubscribeEntity::METHOD_LINK);
$updatedSubscriber = $this->subscribersRepository->findOneById($this->subscriber->getId()); $updatedSubscriber = $this->subscribersRepository->findOneById($this->subscriber->getId());
$this->assertInstanceOf(SubscriberEntity::class, $updatedSubscriber); $this->assertInstanceOf(SubscriberEntity::class, $updatedSubscriber);
@@ -181,7 +181,7 @@ class PagesTest extends \MailPoetTest {
$this->testData['queueId'] = 1; $this->testData['queueId'] = 1;
SettingsController::getInstance()->set('tracking.level', TrackingConfig::LEVEL_PARTIAL); SettingsController::getInstance()->set('tracking.level', TrackingConfig::LEVEL_PARTIAL);
$pages = $this->getPages(null, $unsubscribesMock)->init($action = 'unsubscribe', $this->testData); $pages = $this->getPages(null, $unsubscribesMock)->init($action = 'unsubscribe', $this->testData);
$pages->unsubscribe(); $pages->unsubscribe(StatisticsUnsubscribeEntity::METHOD_LINK);
} }
public function testItDontTrackUnsubscribeWhenTrackingIsDisabled() { public function testItDontTrackUnsubscribeWhenTrackingIsDisabled() {
@@ -189,13 +189,13 @@ class PagesTest extends \MailPoetTest {
$this->testData['queueId'] = 1; $this->testData['queueId'] = 1;
SettingsController::getInstance()->set('tracking.level', TrackingConfig::LEVEL_BASIC); SettingsController::getInstance()->set('tracking.level', TrackingConfig::LEVEL_BASIC);
$pages = $this->getPages(null, $unsubscribesMock)->init($action = 'unsubscribe', $this->testData); $pages = $this->getPages(null, $unsubscribesMock)->init($action = 'unsubscribe', $this->testData);
$pages->unsubscribe(); $pages->unsubscribe(StatisticsUnsubscribeEntity::METHOD_LINK);
} }
public function testItDoesntUnsubscribeWhenPreviewing() { public function testItDoesntUnsubscribeWhenPreviewing() {
$this->testData['preview'] = 1; $this->testData['preview'] = 1;
$pages = $this->getPages()->init($action = 'unsubscribe', $this->testData); $pages = $this->getPages()->init($action = 'unsubscribe', $this->testData);
$pages->unsubscribe(); $pages->unsubscribe(StatisticsUnsubscribeEntity::METHOD_LINK);
$updatedSubscriber = $this->subscribersRepository->findOneById($this->subscriber->getId()); $updatedSubscriber = $this->subscribersRepository->findOneById($this->subscriber->getId());
$this->assertInstanceOf(SubscriberEntity::class, $updatedSubscriber); $this->assertInstanceOf(SubscriberEntity::class, $updatedSubscriber);