Calculate and store campaign IDs on sending queues
[MAILPOET-5033]
This commit is contained in:
committed by
Aschepikov
parent
64137aebb3
commit
0435c09c53
@@ -20,6 +20,7 @@ use MailPoet\Models\StatisticsNewsletters as StatisticsNewslettersModel;
|
|||||||
use MailPoet\Models\Subscriber as SubscriberModel;
|
use MailPoet\Models\Subscriber as SubscriberModel;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
use MailPoet\Segments\SubscribersFinder;
|
use MailPoet\Segments\SubscribersFinder;
|
||||||
use MailPoet\Subscribers\SubscribersRepository;
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
@@ -78,6 +79,9 @@ class SendingQueue {
|
|||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscribersRepository;
|
private $subscribersRepository;
|
||||||
|
|
||||||
|
/** @var SendingQueuesRepository */
|
||||||
|
private $sendingQueueRepository;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
SendingErrorHandler $errorHandler,
|
SendingErrorHandler $errorHandler,
|
||||||
SendingThrottlingHandler $throttlingHandler,
|
SendingThrottlingHandler $throttlingHandler,
|
||||||
@@ -92,6 +96,7 @@ class SendingQueue {
|
|||||||
ScheduledTasksRepository $scheduledTasksRepository,
|
ScheduledTasksRepository $scheduledTasksRepository,
|
||||||
MailerTask $mailerTask,
|
MailerTask $mailerTask,
|
||||||
SubscribersRepository $subscribersRepository,
|
SubscribersRepository $subscribersRepository,
|
||||||
|
SendingQueuesRepository $sendingQueuesRepository,
|
||||||
$newsletterTask = false
|
$newsletterTask = false
|
||||||
) {
|
) {
|
||||||
$this->errorHandler = $errorHandler;
|
$this->errorHandler = $errorHandler;
|
||||||
@@ -109,6 +114,7 @@ class SendingQueue {
|
|||||||
$this->links = $links;
|
$this->links = $links;
|
||||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||||
$this->subscribersRepository = $subscribersRepository;
|
$this->subscribersRepository = $subscribersRepository;
|
||||||
|
$this->sendingQueueRepository = $sendingQueuesRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function process($timer = false) {
|
public function process($timer = false) {
|
||||||
@@ -160,13 +166,34 @@ class SendingQueue {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$campaignId = null;
|
||||||
|
|
||||||
|
$afterPreProcessFilter = function(array $renderedNewsletters, NewsletterEntity $renderedNewsletterEntity) use ($newsletterEntity, &$campaignId) {
|
||||||
|
if ($newsletterEntity !== $renderedNewsletterEntity || !isset($renderedNewsletters['text'])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$textVersion = $renderedNewsletters['text'];
|
||||||
|
$campaignId = $this->calculateCampaignId($newsletterEntity, $textVersion);
|
||||||
|
return $renderedNewsletters;
|
||||||
|
};
|
||||||
|
|
||||||
|
// This filter fires during preProcessNewsletter, after some initial rendering but before any shortcodes are replaced.
|
||||||
|
$this->wp->addFilter('mailpoet_sending_newsletter_render_after_pre_process', $afterPreProcessFilter, 10, 2);
|
||||||
|
|
||||||
// pre-process newsletter (render, replace shortcodes/links, etc.)
|
// pre-process newsletter (render, replace shortcodes/links, etc.)
|
||||||
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $queue);
|
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $queue);
|
||||||
|
|
||||||
|
$this->wp->removeFilter('mailpoet_sending_newsletter_render_after_pre_process', $afterPreProcessFilter);
|
||||||
|
|
||||||
if (!$newsletterEntity) {
|
if (!$newsletterEntity) {
|
||||||
$this->deleteTask($queue);
|
$this->deleteTask($queue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($campaignId) {
|
||||||
|
$this->sendingQueueRepository->addCampaignId($queue->getSendingQueueEntity(), $campaignId);
|
||||||
|
}
|
||||||
|
|
||||||
$newsletter = Newsletter::findOne($newsletterEntity->getId());
|
$newsletter = Newsletter::findOne($newsletterEntity->getId());
|
||||||
if (!$newsletter) {
|
if (!$newsletter) {
|
||||||
return;
|
return;
|
||||||
@@ -389,6 +416,10 @@ class SendingQueue {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function calculateCampaignId(NewsletterEntity $newsletter, string $textBody): string {
|
||||||
|
return substr(md5(implode('|', [$newsletter->getId(), $textBody, $newsletter->getSubject()])), 0, 16);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether some of segments was deleted or trashed
|
* Checks whether some of segments was deleted or trashed
|
||||||
* @param int[] $segmentIds
|
* @param int[] $segmentIds
|
||||||
|
@@ -150,4 +150,14 @@ class SendingQueuesRepository extends Repository {
|
|||||||
->getQuery()
|
->getQuery()
|
||||||
->execute();
|
->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function addCampaignId(SendingQueueEntity $queue, string $campaignId): void {
|
||||||
|
$meta = $queue->getMeta();
|
||||||
|
if (!is_array($meta)) {
|
||||||
|
$meta = [];
|
||||||
|
}
|
||||||
|
$meta['campaignId'] = $campaignId;
|
||||||
|
$queue->setMeta($meta);
|
||||||
|
$this->flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -44,6 +44,7 @@ use MailPoet\Models\SubscriberSegment;
|
|||||||
use MailPoet\Newsletter\Links\Links;
|
use MailPoet\Newsletter\Links\Links;
|
||||||
use MailPoet\Newsletter\NewslettersRepository;
|
use MailPoet\Newsletter\NewslettersRepository;
|
||||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||||
|
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||||
use MailPoet\Router\Endpoints\Track;
|
use MailPoet\Router\Endpoints\Track;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
use MailPoet\Segments\SegmentsRepository;
|
use MailPoet\Segments\SegmentsRepository;
|
||||||
@@ -96,6 +97,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
private $scheduledTasksRepository;
|
private $scheduledTasksRepository;
|
||||||
/** @var SubscribersRepository */
|
/** @var SubscribersRepository */
|
||||||
private $subscribersRepository;
|
private $subscribersRepository;
|
||||||
|
/** @var SendingQueuesRepository */
|
||||||
|
private $sendingQueuesRepository;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
parent::_before();
|
parent::_before();
|
||||||
@@ -154,6 +157,7 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->tasksLinks = $this->diContainer->get(TasksLinks::class);
|
$this->tasksLinks = $this->diContainer->get(TasksLinks::class);
|
||||||
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||||
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
|
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
|
||||||
|
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
|
||||||
$this->sendingQueueWorker = $this->getSendingQueueWorker();
|
$this->sendingQueueWorker = $this->getSendingQueueWorker();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,7 +213,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->tasksLinks,
|
$this->tasksLinks,
|
||||||
$this->scheduledTasksRepository,
|
$this->scheduledTasksRepository,
|
||||||
$this->diContainer->get(MailerTask::class),
|
$this->diContainer->get(MailerTask::class),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
$sendingQueueWorker->process();
|
$sendingQueueWorker->process();
|
||||||
@@ -243,7 +248,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
'sendBulk' => $this->mailerTaskDummyResponse,
|
'sendBulk' => $this->mailerTaskDummyResponse,
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
$sendingQueueWorker->sendNewsletters(
|
$sendingQueueWorker->sendNewsletters(
|
||||||
$this->queue,
|
$this->queue,
|
||||||
@@ -288,7 +294,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
'sendBulk' => $this->mailerTaskDummyResponse,
|
'sendBulk' => $this->mailerTaskDummyResponse,
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
$sendingQueueWorker->sendNewsletters(
|
$sendingQueueWorker->sendNewsletters(
|
||||||
$queue,
|
$queue,
|
||||||
@@ -327,7 +334,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->tasksLinks,
|
$this->tasksLinks,
|
||||||
$this->scheduledTasksRepository,
|
$this->scheduledTasksRepository,
|
||||||
$this->diContainer->get(MailerTask::class),
|
$this->diContainer->get(MailerTask::class),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
$sendingQueueWorker->process();
|
$sendingQueueWorker->process();
|
||||||
}
|
}
|
||||||
@@ -650,7 +658,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
'sendBulk' => Stub::consecutive(['response' => false, 'error' => $mailerError], $this->mailerTaskDummyResponse),
|
'sendBulk' => Stub::consecutive(['response' => false, 'error' => $mailerError], $this->mailerTaskDummyResponse),
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
|
|
||||||
$sendingQueueWorker->sendNewsletters(
|
$sendingQueueWorker->sendNewsletters(
|
||||||
@@ -1049,7 +1058,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
'sendBulk' => $this->mailerTaskDummyResponse,
|
'sendBulk' => $this->mailerTaskDummyResponse,
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
$sendingQueueWorker->sendNewsletters(
|
$sendingQueueWorker->sendNewsletters(
|
||||||
@@ -1271,7 +1281,8 @@ class SendingQueueTest extends \MailPoetTest {
|
|||||||
$this->tasksLinks,
|
$this->tasksLinks,
|
||||||
$this->scheduledTasksRepository,
|
$this->scheduledTasksRepository,
|
||||||
$mailerMock ?? $this->diContainer->get(MailerTask::class),
|
$mailerMock ?? $this->diContainer->get(MailerTask::class),
|
||||||
$this->subscribersRepository
|
$this->subscribersRepository,
|
||||||
|
$this->sendingQueuesRepository
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user