Refactor unsubscribes tracker to doctrine
[MAILPOET-2736]
This commit is contained in:
committed by
Veljko V
parent
4189b11054
commit
78f055b7aa
@ -215,6 +215,8 @@ 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);
|
$container->autowire(\MailPoet\Statistics\Track\Opens::class);
|
||||||
$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\StatisticsUnsubscribesRepository::class);
|
||||||
$container->autowire(\MailPoet\Router\Router::class)
|
$container->autowire(\MailPoet\Router\Router::class)
|
||||||
->setArgument('$container', new Reference(ContainerWrapper::class));
|
->setArgument('$container', new Reference(ContainerWrapper::class));
|
||||||
// Mailer
|
// Mailer
|
||||||
@ -265,6 +267,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
|||||||
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class);
|
$container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class);
|
||||||
|
$container->autowire(\MailPoet\Newsletter\Sending\SendingQueuesRepository::class);
|
||||||
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserController::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserController::class)->setPublic(true);
|
||||||
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserRenderer::class)->setPublic(true);
|
$container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserRenderer::class)->setPublic(true);
|
||||||
// Newsletter templates
|
// Newsletter templates
|
||||||
|
@ -36,6 +36,16 @@ class StatisticsUnsubscribeEntity {
|
|||||||
*/
|
*/
|
||||||
private $subscriberId;
|
private $subscriberId;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
NewsletterEntity $newsletter,
|
||||||
|
SendingQueueEntity $queue,
|
||||||
|
int $subscriberId
|
||||||
|
) {
|
||||||
|
$this->newsletter = $newsletter;
|
||||||
|
$this->queue = $queue;
|
||||||
|
$this->subscriberId = $subscriberId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return NewsletterEntity|null
|
* @return NewsletterEntity|null
|
||||||
*/
|
*/
|
||||||
|
19
lib/Newsletter/Sending/SendingQueuesRepository.php
Normal file
19
lib/Newsletter/Sending/SendingQueuesRepository.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Newsletter\Sending;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\Repository;
|
||||||
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method SendingQueueEntity[] findBy(array $criteria, array $orderBy = null, int $limit = null, int $offset = null)
|
||||||
|
* @method SendingQueueEntity|null findOneBy(array $criteria, array $orderBy = null)
|
||||||
|
* @method SendingQueueEntity|null findOneById(mixed $id)
|
||||||
|
* @method void persist(SendingQueueEntity $entity)
|
||||||
|
* @method void remove(SendingQueueEntity $entity)
|
||||||
|
*/
|
||||||
|
class SendingQueuesRepository extends Repository {
|
||||||
|
protected function getEntityClassName() {
|
||||||
|
return SendingQueueEntity::class;
|
||||||
|
}
|
||||||
|
}
|
19
lib/Statistics/StatisticsUnsubscribesRepository.php
Normal file
19
lib/Statistics/StatisticsUnsubscribesRepository.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Statistics;
|
||||||
|
|
||||||
|
use MailPoet\Doctrine\Repository;
|
||||||
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method StatisticsUnsubscribeEntity[] findBy(array $criteria, array $orderBy = null, int $limit = null, int $offset = null)
|
||||||
|
* @method StatisticsUnsubscribeEntity|null findOneBy(array $criteria, array $orderBy = null)
|
||||||
|
* @method StatisticsUnsubscribeEntity|null findOneById(mixed $id)
|
||||||
|
* @method void persist(StatisticsUnsubscribeEntity $entity)
|
||||||
|
* @method void remove(StatisticsUnsubscribeEntity $entity)
|
||||||
|
*/
|
||||||
|
class StatisticsUnsubscribesRepository extends Repository {
|
||||||
|
protected function getEntityClassName() {
|
||||||
|
return StatisticsUnsubscribeEntity::class;
|
||||||
|
}
|
||||||
|
}
|
@ -2,20 +2,44 @@
|
|||||||
|
|
||||||
namespace MailPoet\Statistics\Track;
|
namespace MailPoet\Statistics\Track;
|
||||||
|
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||||
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
|
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
||||||
|
|
||||||
class Unsubscribes {
|
class Unsubscribes {
|
||||||
public function track($newsletterId, $subscriberId, $queueId) {
|
/** @var SendingQueuesRepository */
|
||||||
$statistics = StatisticsUnsubscribes::where('subscriber_id', $subscriberId)
|
private $sendingQueuesRepository;
|
||||||
->where('newsletter_id', $newsletterId)
|
|
||||||
->where('queue_id', $queueId)
|
/** @var StatisticsUnsubscribesRepository */
|
||||||
->findOne();
|
private $statisticsUnsubscribesRepository;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
SendingQueuesRepository $sendingQueuesRepository,
|
||||||
|
StatisticsUnsubscribesRepository $statisticsUnsubscribesRepository
|
||||||
|
) {
|
||||||
|
$this->sendingQueuesRepository = $sendingQueuesRepository;
|
||||||
|
$this->statisticsUnsubscribesRepository = $statisticsUnsubscribesRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function track(int $subscriberId, int $queueId) {
|
||||||
|
$queue = $this->sendingQueuesRepository->findOneById($queueId);
|
||||||
|
if ($queue === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$newsletter = $queue->getNewsletter();
|
||||||
|
if ($newsletter === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$statistics = $this->statisticsUnsubscribesRepository->findOneBy([
|
||||||
|
'queue' => $queue,
|
||||||
|
'newsletter' => $newsletter,
|
||||||
|
'subscriberId' => $subscriberId,
|
||||||
|
]);
|
||||||
|
|
||||||
if (!$statistics) {
|
if (!$statistics) {
|
||||||
$statistics = StatisticsUnsubscribes::create();
|
$statistics = new StatisticsUnsubscribeEntity($newsletter, $queue, $subscriberId);
|
||||||
$statistics->newsletterId = $newsletterId;
|
$this->statisticsUnsubscribesRepository->persist($statistics);
|
||||||
$statistics->subscriberId = $subscriberId;
|
$this->statisticsUnsubscribesRepository->flush();
|
||||||
$statistics->queueId = $queueId;
|
|
||||||
$statistics->save();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Test\Statistics\Track;
|
namespace MailPoet\Test\Statistics\Track;
|
||||||
|
|
||||||
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\StatisticsUnsubscribes;
|
use MailPoet\Models\StatisticsUnsubscribes;
|
||||||
@ -11,7 +12,9 @@ use MailPoet\Tasks\Sending as SendingTask;
|
|||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
class UnsubscribesTest extends \MailPoetTest {
|
class UnsubscribesTest extends \MailPoetTest {
|
||||||
public $unsubscribes;
|
/** @var Unsubscribes */
|
||||||
|
private $unsubscribes;
|
||||||
|
|
||||||
public $queue;
|
public $queue;
|
||||||
public $subscriber;
|
public $subscriber;
|
||||||
public $newsletter;
|
public $newsletter;
|
||||||
@ -35,12 +38,11 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
$queue->updateProcessedSubscribers([$subscriber->id]);
|
$queue->updateProcessedSubscribers([$subscriber->id]);
|
||||||
$this->queue = $queue->save();
|
$this->queue = $queue->save();
|
||||||
// instantiate class
|
// instantiate class
|
||||||
$this->unsubscribes = new Unsubscribes();
|
$this->unsubscribes = ContainerWrapper::getInstance()->get(Unsubscribes::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItTracksUnsubscribeEvent() {
|
public function testItTracksUnsubscribeEvent() {
|
||||||
$this->unsubscribes->track(
|
$this->unsubscribes->track(
|
||||||
$this->newsletter->id,
|
|
||||||
$this->subscriber->id,
|
$this->subscriber->id,
|
||||||
$this->queue->id
|
$this->queue->id
|
||||||
);
|
);
|
||||||
@ -50,7 +52,6 @@ class UnsubscribesTest extends \MailPoetTest {
|
|||||||
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
|
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
|
||||||
for ($count = 0; $count <= 2; $count++) {
|
for ($count = 0; $count <= 2; $count++) {
|
||||||
$this->unsubscribes->track(
|
$this->unsubscribes->track(
|
||||||
$this->newsletter->id,
|
|
||||||
$this->subscriber->id,
|
$this->subscriber->id,
|
||||||
$this->queue->id
|
$this->queue->id
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user