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\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Segments\SubscribersFinder;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
@ -78,6 +79,9 @@ class SendingQueue {
|
||||
/** @var SubscribersRepository */
|
||||
private $subscribersRepository;
|
||||
|
||||
/** @var SendingQueuesRepository */
|
||||
private $sendingQueueRepository;
|
||||
|
||||
public function __construct(
|
||||
SendingErrorHandler $errorHandler,
|
||||
SendingThrottlingHandler $throttlingHandler,
|
||||
@ -92,6 +96,7 @@ class SendingQueue {
|
||||
ScheduledTasksRepository $scheduledTasksRepository,
|
||||
MailerTask $mailerTask,
|
||||
SubscribersRepository $subscribersRepository,
|
||||
SendingQueuesRepository $sendingQueuesRepository,
|
||||
$newsletterTask = false
|
||||
) {
|
||||
$this->errorHandler = $errorHandler;
|
||||
@ -109,6 +114,7 @@ class SendingQueue {
|
||||
$this->links = $links;
|
||||
$this->scheduledTasksRepository = $scheduledTasksRepository;
|
||||
$this->subscribersRepository = $subscribersRepository;
|
||||
$this->sendingQueueRepository = $sendingQueuesRepository;
|
||||
}
|
||||
|
||||
public function process($timer = false) {
|
||||
@ -160,13 +166,34 @@ class SendingQueue {
|
||||
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.)
|
||||
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $queue);
|
||||
|
||||
$this->wp->removeFilter('mailpoet_sending_newsletter_render_after_pre_process', $afterPreProcessFilter);
|
||||
|
||||
if (!$newsletterEntity) {
|
||||
$this->deleteTask($queue);
|
||||
return;
|
||||
}
|
||||
|
||||
if ($campaignId) {
|
||||
$this->sendingQueueRepository->addCampaignId($queue->getSendingQueueEntity(), $campaignId);
|
||||
}
|
||||
|
||||
$newsletter = Newsletter::findOne($newsletterEntity->getId());
|
||||
if (!$newsletter) {
|
||||
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
|
||||
* @param int[] $segmentIds
|
||||
|
Reference in New Issue
Block a user