Rewrite SendingQueue\Tasks\Newsletter::preProcessNewsletter() using Doctrine
[MAILPOET-5682]
This commit is contained in:
@ -182,7 +182,7 @@ class SendingQueue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// pre-process newsletter (render, replace shortcodes/links, etc.)
|
// pre-process newsletter (render, replace shortcodes/links, etc.)
|
||||||
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $legacyQueue);
|
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $task);
|
||||||
|
|
||||||
if (!$newsletterEntity) {
|
if (!$newsletterEntity) {
|
||||||
$this->deleteTask($task);
|
$this->deleteTask($task);
|
||||||
|
@ -134,17 +134,18 @@ class Newsletter {
|
|||||||
return $newsletter;
|
return $newsletter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preProcessNewsletter(NewsletterEntity $newsletter, Sending $sendingTask) {
|
public function preProcessNewsletter(NewsletterEntity $newsletter, ScheduledTaskEntity $task) {
|
||||||
// return the newsletter if it was previously rendered
|
// return the newsletter if it was previously rendered
|
||||||
/** @phpstan-ignore-next-line - SendingQueue::getNewsletterRenderedBody() is called inside Sending using __call(). Sending will be refactored soon to stop using Paris models. */
|
$queue = $task->getSendingQueue();
|
||||||
if (!is_null($sendingTask->getNewsletterRenderedBody())) {
|
if (!$queue) {
|
||||||
return (!$sendingTask->validate()) ?
|
return false;
|
||||||
$this->stopNewsletterPreProcessing(sprintf('QUEUE-%d-RENDER', $sendingTask->id)) :
|
}
|
||||||
$newsletter;
|
if ($queue->getNewsletterRenderedBody() !== null) {
|
||||||
|
return $newsletter;
|
||||||
}
|
}
|
||||||
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
|
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info(
|
||||||
'pre-processing newsletter',
|
'pre-processing newsletter',
|
||||||
['newsletter_id' => $newsletter->getId(), 'task_id' => $sendingTask->taskId]
|
['newsletter_id' => $newsletter->getId(), 'task_id' => $task->getId()]
|
||||||
);
|
);
|
||||||
|
|
||||||
$campaignId = null;
|
$campaignId = null;
|
||||||
@ -154,7 +155,7 @@ class Newsletter {
|
|||||||
// hook to the newsletter post-processing filter and add tracking image
|
// hook to the newsletter post-processing filter and add tracking image
|
||||||
$this->trackingImageInserted = OpenTracking::addTrackingImage();
|
$this->trackingImageInserted = OpenTracking::addTrackingImage();
|
||||||
// render newsletter
|
// render newsletter
|
||||||
$renderedNewsletter = $this->renderer->render($newsletter, $sendingTask->getSendingQueueEntity());
|
$renderedNewsletter = $this->renderer->render($newsletter, $queue);
|
||||||
$renderedNewsletter = $this->wp->applyFilters(
|
$renderedNewsletter = $this->wp->applyFilters(
|
||||||
'mailpoet_sending_newsletter_render_after_pre_process',
|
'mailpoet_sending_newsletter_render_after_pre_process',
|
||||||
$renderedNewsletter,
|
$renderedNewsletter,
|
||||||
@ -165,10 +166,10 @@ class Newsletter {
|
|||||||
}
|
}
|
||||||
$renderedNewsletter = $this->gaTracking->applyGATracking($renderedNewsletter, $newsletter);
|
$renderedNewsletter = $this->gaTracking->applyGATracking($renderedNewsletter, $newsletter);
|
||||||
// hash and save all links
|
// hash and save all links
|
||||||
$renderedNewsletter = $this->linksTask->process($renderedNewsletter, $newsletter, $sendingTask);
|
$renderedNewsletter = $this->linksTask->process($renderedNewsletter, $newsletter, $queue);
|
||||||
} else {
|
} else {
|
||||||
// render newsletter
|
// render newsletter
|
||||||
$renderedNewsletter = $this->renderer->render($newsletter, $sendingTask->getSendingQueueEntity());
|
$renderedNewsletter = $this->renderer->render($newsletter, $queue);
|
||||||
$renderedNewsletter = $this->wp->applyFilters(
|
$renderedNewsletter = $this->wp->applyFilters(
|
||||||
'mailpoet_sending_newsletter_render_after_pre_process',
|
'mailpoet_sending_newsletter_render_after_pre_process',
|
||||||
$renderedNewsletter,
|
$renderedNewsletter,
|
||||||
@ -188,7 +189,7 @@ class Newsletter {
|
|||||||
// delete notification history record since it will never be sent
|
// delete notification history record since it will never be sent
|
||||||
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info(
|
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_POST_NOTIFICATIONS)->info(
|
||||||
'no posts in post notification, deleting it',
|
'no posts in post notification, deleting it',
|
||||||
['newsletter_id' => $newsletter->getId(), 'task_id' => $sendingTask->taskId]
|
['newsletter_id' => $newsletter->getId(), 'task_id' => $task->getId()]
|
||||||
);
|
);
|
||||||
$this->newslettersRepository->bulkDelete([(int)$newsletter->getId()]);
|
$this->newslettersRepository->bulkDelete([(int)$newsletter->getId()]);
|
||||||
return false;
|
return false;
|
||||||
@ -196,43 +197,41 @@ class Newsletter {
|
|||||||
// extract and save newsletter posts
|
// extract and save newsletter posts
|
||||||
$this->postsTask->extractAndSave($renderedNewsletter, $newsletter);
|
$this->postsTask->extractAndSave($renderedNewsletter, $newsletter);
|
||||||
|
|
||||||
$sendingQueueEntity = $sendingTask->getSendingQueueEntity();
|
|
||||||
|
|
||||||
if ($campaignId !== null) {
|
if ($campaignId !== null) {
|
||||||
$this->sendingQueuesRepository->saveCampaignId($sendingQueueEntity, $campaignId);
|
$this->sendingQueuesRepository->saveCampaignId($queue, $campaignId);
|
||||||
}
|
}
|
||||||
|
|
||||||
$filterSegmentId = $newsletter->getFilterSegmentId();
|
$filterSegmentId = $newsletter->getFilterSegmentId();
|
||||||
if ($filterSegmentId) {
|
if ($filterSegmentId) {
|
||||||
$filterSegment = $this->segmentsRepository->findOneById($filterSegmentId);
|
$filterSegment = $this->segmentsRepository->findOneById($filterSegmentId);
|
||||||
if ($filterSegment instanceof SegmentEntity && $filterSegment->getType() === SegmentEntity::TYPE_DYNAMIC) {
|
if ($filterSegment instanceof SegmentEntity && $filterSegment->getType() === SegmentEntity::TYPE_DYNAMIC) {
|
||||||
$this->sendingQueuesRepository->saveFilterSegmentMeta($sendingQueueEntity, $filterSegment);
|
$this->sendingQueuesRepository->saveFilterSegmentMeta($queue, $filterSegment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// update queue with the rendered and pre-processed newsletter
|
// update queue with the rendered and pre-processed newsletter
|
||||||
$sendingTask->newsletterRenderedSubject = ShortcodesTask::process(
|
$queue->setNewsletterRenderedSubject(
|
||||||
$newsletter->getSubject(),
|
ShortcodesTask::process(
|
||||||
$renderedNewsletter['html'],
|
$newsletter->getSubject(),
|
||||||
$newsletter,
|
$renderedNewsletter['html'],
|
||||||
null,
|
$newsletter,
|
||||||
$sendingQueueEntity
|
null,
|
||||||
|
$queue
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
// if the rendered subject is empty, use a default subject,
|
// if the rendered subject is empty, use a default subject,
|
||||||
// having no subject in a newsletter is considered spammy
|
// having no subject in a newsletter is considered spammy
|
||||||
if (empty(trim((string)$sendingTask->newsletterRenderedSubject))) {
|
if (empty(trim((string)$queue->getNewsletterRenderedSubject()))) {
|
||||||
$sendingTask->newsletterRenderedSubject = __('No subject', 'mailpoet');
|
$queue->setNewsletterRenderedSubject(__('No subject', 'mailpoet'));
|
||||||
}
|
}
|
||||||
$renderedNewsletter = $this->emoji->encodeEmojisInBody($renderedNewsletter);
|
$renderedNewsletter = $this->emoji->encodeEmojisInBody($renderedNewsletter);
|
||||||
$sendingTask->newsletterRenderedBody = $renderedNewsletter;
|
$queue->setNewsletterRenderedBody($renderedNewsletter);
|
||||||
$sendingTask->save();
|
|
||||||
|
|
||||||
// catch DB errors
|
try {
|
||||||
$queueErrors = $sendingTask->getErrors();
|
$this->sendingQueuesRepository->flush();
|
||||||
|
} catch (\Throwable $e) {
|
||||||
if ($queueErrors) {
|
$this->stopNewsletterPreProcessing(sprintf('QUEUE-%d-SAVE', $queue->getId()));
|
||||||
$this->stopNewsletterPreProcessing(sprintf('QUEUE-%d-SAVE', $sendingTask->id));
|
|
||||||
}
|
}
|
||||||
return $newsletter;
|
return $newsletter;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user