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.)
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $legacyQueue);
$newsletterEntity = $this->newsletterTask->preProcessNewsletter($newsletterEntity, $task);
if (!$newsletterEntity) {
$this->deleteTask($task);

View File

@@ -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(
$newsletter->getSubject(),
$renderedNewsletter['html'],
$newsletter,
null,
$sendingQueueEntity
$queue->setNewsletterRenderedSubject(
ShortcodesTask::process(
$newsletter->getSubject(),
$renderedNewsletter['html'],
$newsletter,
null,
$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;
}