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