Rewrite SendingQueue\Tasks\Newsletter::preProcessNewsletter() using Doctrine

[MAILPOET-5682]
This commit is contained in:
Jan Jakes
2023-10-24 14:54:47 +02:00
committed by Jan Jakeš
parent c31cbb73c0
commit ec792b30df
2 changed files with 30 additions and 31 deletions

View File

@ -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);

View File

@ -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;
} }