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\Opens::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)
|
||||
->setArgument('$container', new Reference(ContainerWrapper::class));
|
||||
// Mailer
|
||||
@ -265,6 +267,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class);
|
||||
$container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true);
|
||||
$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\ViewInBrowserRenderer::class)->setPublic(true);
|
||||
// Newsletter templates
|
||||
|
@ -36,6 +36,16 @@ class StatisticsUnsubscribeEntity {
|
||||
*/
|
||||
private $subscriberId;
|
||||
|
||||
public function __construct(
|
||||
NewsletterEntity $newsletter,
|
||||
SendingQueueEntity $queue,
|
||||
int $subscriberId
|
||||
) {
|
||||
$this->newsletter = $newsletter;
|
||||
$this->queue = $queue;
|
||||
$this->subscriberId = $subscriberId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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;
|
||||
|
||||
use MailPoet\Models\StatisticsUnsubscribes;
|
||||
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||
use MailPoet\Statistics\StatisticsUnsubscribesRepository;
|
||||
|
||||
class Unsubscribes {
|
||||
public function track($newsletterId, $subscriberId, $queueId) {
|
||||
$statistics = StatisticsUnsubscribes::where('subscriber_id', $subscriberId)
|
||||
->where('newsletter_id', $newsletterId)
|
||||
->where('queue_id', $queueId)
|
||||
->findOne();
|
||||
/** @var SendingQueuesRepository */
|
||||
private $sendingQueuesRepository;
|
||||
|
||||
/** @var StatisticsUnsubscribesRepository */
|
||||
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) {
|
||||
$statistics = StatisticsUnsubscribes::create();
|
||||
$statistics->newsletterId = $newsletterId;
|
||||
$statistics->subscriberId = $subscriberId;
|
||||
$statistics->queueId = $queueId;
|
||||
$statistics->save();
|
||||
$statistics = new StatisticsUnsubscribeEntity($newsletter, $queue, $subscriberId);
|
||||
$this->statisticsUnsubscribesRepository->persist($statistics);
|
||||
$this->statisticsUnsubscribesRepository->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace MailPoet\Test\Statistics\Track;
|
||||
|
||||
use MailPoet\DI\ContainerWrapper;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Models\StatisticsUnsubscribes;
|
||||
@ -11,7 +12,9 @@ use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoetVendor\Idiorm\ORM;
|
||||
|
||||
class UnsubscribesTest extends \MailPoetTest {
|
||||
public $unsubscribes;
|
||||
/** @var Unsubscribes */
|
||||
private $unsubscribes;
|
||||
|
||||
public $queue;
|
||||
public $subscriber;
|
||||
public $newsletter;
|
||||
@ -35,12 +38,11 @@ class UnsubscribesTest extends \MailPoetTest {
|
||||
$queue->updateProcessedSubscribers([$subscriber->id]);
|
||||
$this->queue = $queue->save();
|
||||
// instantiate class
|
||||
$this->unsubscribes = new Unsubscribes();
|
||||
$this->unsubscribes = ContainerWrapper::getInstance()->get(Unsubscribes::class);
|
||||
}
|
||||
|
||||
public function testItTracksUnsubscribeEvent() {
|
||||
$this->unsubscribes->track(
|
||||
$this->newsletter->id,
|
||||
$this->subscriber->id,
|
||||
$this->queue->id
|
||||
);
|
||||
@ -50,7 +52,6 @@ class UnsubscribesTest extends \MailPoetTest {
|
||||
public function testItDoesNotTrackRepeatedUnsubscribeEvents() {
|
||||
for ($count = 0; $count <= 2; $count++) {
|
||||
$this->unsubscribes->track(
|
||||
$this->newsletter->id,
|
||||
$this->subscriber->id,
|
||||
$this->queue->id
|
||||
);
|
||||
|
Reference in New Issue
Block a user