From 57b5d0c3c031c4484be1f20498a076518b7a6ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jakes=CC=8C?= Date: Wed, 13 May 2020 12:11:04 +0200 Subject: [PATCH] Update queue using Doctrine [MAILPOET-2900] --- lib/Newsletter/NewsletterSaveController.php | 44 +++++++++++++-------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/Newsletter/NewsletterSaveController.php b/lib/Newsletter/NewsletterSaveController.php index 48d89859d0..c5c093b9c2 100644 --- a/lib/Newsletter/NewsletterSaveController.php +++ b/lib/Newsletter/NewsletterSaveController.php @@ -132,22 +132,7 @@ class NewsletterSaveController { } $this->rescheduleIfNeeded($newsletter, $newsletterModel); - - $options = $data['options'] ?? []; - $queue = $newsletterModel->getQueue(); - if ($queue && !in_array($newsletterModel->type, [Newsletter::TYPE_NOTIFICATION, Newsletter::TYPE_NOTIFICATION_HISTORY])) { - // if newsletter was previously scheduled and is now unscheduled, set its status to DRAFT and delete associated queue record - if ($newsletterModel->status === Newsletter::STATUS_SCHEDULED && isset($options['isScheduled']) && empty($options['isScheduled'])) { - $queue->delete(); - $newsletterModel->status = Newsletter::STATUS_DRAFT; - $newsletterModel->save(); - } else { - $queue->newsletterRenderedBody = null; - $queue->newsletterRenderedSubject = null; - $newsletterQueueTask = new NewsletterQueueTask(); - $newsletterQueueTask->preProcessNewsletter($newsletterModel, $queue); - } - } + $this->updateQueue($newsletter, $newsletterModel, $data['options'] ?? []); $this->wp->doAction('mailpoet_api_newsletters_save_after', $newsletterModel); $this->authorizedEmailsController->onNewsletterUpdate($newsletterModel, $oldNewsletterModel); @@ -291,4 +276,31 @@ class NewsletterSaveController { $this->entityManager->refresh($newsletterOption); } } + + private function updateQueue(NewsletterEntity $newsletter, Newsletter $newsletterModel, array $options) { + $queue = $newsletter->getLatestQueue(); + if (!$queue) { + return; + } + + if (in_array($newsletter->getType(), [NewsletterEntity::TYPE_NOTIFICATION, NewsletterEntity::TYPE_NOTIFICATION_HISTORY], true)) { + return; + } + + // if newsletter was previously scheduled and is now unscheduled, set its status to DRAFT and delete associated queue record + if ($newsletter->getStatus() === NewsletterEntity::STATUS_SCHEDULED && isset($options['isScheduled']) && empty($options['isScheduled'])) { + $this->entityManager->remove($queue); + $newsletter->setStatus(NewsletterEntity::STATUS_DRAFT); + } else { + $queue->setNewsletterRenderedBody(null); + $queue->setNewsletterRenderedSubject(null); + + $newsletterQueueTask = new NewsletterQueueTask(); + $newsletterQueueTask->preProcessNewsletter($newsletterModel, $newsletterModel->getQueue()); + + // 'preProcessNewsletter' modifies queue by old model - let's reload it + $this->entityManager->refresh($queue); + } + $this->entityManager->flush(); + } }