diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 976ead03e0..977d6dc045 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -239,25 +239,32 @@ class SendingQueue { // reschedule bounce task to run sooner, if needed $this->reScheduleBounceTask(); - $queue = $this->processQueue( - $queue, - $_newsletter, - $foundSubscribers, - $timer - ); - $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( - 'after queue chunk processing', - ['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId] - ); - if ($queue->status === ScheduledTaskEntity::STATUS_COMPLETED) { + if ($newsletterEntity->getStatus() !== NewsletterEntity::STATUS_CORRUPT) { + $queue = $this->processQueue( + $queue, + $_newsletter, + $foundSubscribers, + $timer + ); $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( - 'completed newsletter sending', + 'after queue chunk processing', + ['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId] + ); + if ($queue->status === ScheduledTaskEntity::STATUS_COMPLETED) { + $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( + 'completed newsletter sending', + ['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId] + ); + $this->newsletterTask->markNewsletterAsSent($newsletterEntity, $queue); + $this->statsNotificationsScheduler->schedule($newsletterEntity); + } + $this->enforceSendingAndExecutionLimits($timer); + } else { + $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->error( + 'Can\'t send corrupt newsletter', ['newsletter_id' => $newsletter->id, 'task_id' => $queue->taskId] ); - $this->newsletterTask->markNewsletterAsSent($newsletterEntity, $queue); - $this->statsNotificationsScheduler->schedule($newsletterEntity); } - $this->enforceSendingAndExecutionLimits($timer); } } diff --git a/mailpoet/lib/Newsletter/Renderer/Preprocessor.php b/mailpoet/lib/Newsletter/Renderer/Preprocessor.php index ea5ac22cf2..5e1db2b990 100644 --- a/mailpoet/lib/Newsletter/Renderer/Preprocessor.php +++ b/mailpoet/lib/Newsletter/Renderer/Preprocessor.php @@ -3,6 +3,7 @@ namespace MailPoet\Newsletter\Renderer; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Logging\LoggerFactory; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; @@ -36,18 +37,23 @@ class Preprocessor { /*** @var NewslettersRepository */ private $newslettersRepository; + /*** @var LoggerFactory */ + private $loggerFactory; + public function __construct( AbandonedCartContent $abandonedCartContent, AutomatedLatestContentBlock $automatedLatestContent, ContentPreprocessor $wooCommerceContentPreprocessor, CouponPreProcessor $couponPreProcessor, - NewslettersRepository $newslettersRepository + NewslettersRepository $newslettersRepository, + LoggerFactory $loggerFactory ) { $this->abandonedCartContent = $abandonedCartContent; $this->automatedLatestContent = $automatedLatestContent; $this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor; $this->couponPreProcessor = $couponPreProcessor; $this->newslettersRepository = $newslettersRepository; + $this->loggerFactory = $loggerFactory; } /** @@ -67,7 +73,11 @@ class Preprocessor { try { $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); } catch (NewsletterProcessingException $e) { - $newsletter->setStatus(NewsletterEntity::STATUS_CORRUPT); + $this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error( + $e->getMessage(), + ['newsletter_id' => $newsletter->getId()] + ); + $newsletter->setStatus(NewsletterEntity::STATUS_CORRUPT); $this->newslettersRepository->persist($newsletter); $this->newslettersRepository->flush(); } diff --git a/mailpoet/lib/WooCommerce/CouponPreProcessor.php b/mailpoet/lib/WooCommerce/CouponPreProcessor.php index a107d3e860..1af6ab1660 100644 --- a/mailpoet/lib/WooCommerce/CouponPreProcessor.php +++ b/mailpoet/lib/WooCommerce/CouponPreProcessor.php @@ -40,7 +40,7 @@ class CouponPreProcessor { if (!$this->wcHelper->isWooCommerceActive()) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error( - 'Woocommerce is not active', ['WC Coupons', 'Process coupons'] + 'Woocommerce is not active', ['WC Coupons', 'Process coupons', 'newsletter_id'] ); return $blocks; } diff --git a/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php b/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php index 3fab978b2d..a52ad1ee02 100644 --- a/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php +++ b/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php @@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce\TransactionalEmails; use Codeception\Stub; use MailPoet\Config\ServicesChecker; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Logging\LoggerFactory; use MailPoet\Models\Newsletter; use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\NewslettersRepository; @@ -111,7 +112,8 @@ class RendererTest extends \MailPoetTest { $this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock::class), $wooPreprocessor, $this->diContainer->get(\MailPoet\WooCommerce\CouponPreProcessor::class), - $this->diContainer->get(NewslettersRepository::class) + $this->diContainer->get(NewslettersRepository::class), + $this->diContainer->get(LoggerFactory::class) ), $this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(ServicesChecker::class), diff --git a/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php b/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php index bd06a0c4ff..f31398471b 100644 --- a/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php +++ b/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Newsletter; use Codeception\Stub; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Logging\LoggerFactory; use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; @@ -24,7 +25,15 @@ class PreprocessorTest extends \MailPoetUnitTest { ]); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor($transactionalEmails); $newsletterRepository = Stub::make(NewslettersRepository::class); - $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $newsletterRepository); + $loggerFactory = Stub::make(LoggerFactory::class); + $preprocessor = new Preprocessor( + $acc, + $alc, + $wooPreprocessor, + $couponPreProcessor, + $newsletterRepository, + $loggerFactory + ); expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceHeading']))->equals([[ 'type' => 'container', 'orientation' => 'horizontal', @@ -53,7 +62,15 @@ class PreprocessorTest extends \MailPoetUnitTest { $couponPreProcessor = Stub::make(CouponPreProcessor::class); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor(Stub::make(TransactionalEmails::class)); $newsletterRepository = Stub::make(NewslettersRepository::class); - $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $newsletterRepository); + $loggerFactory = Stub::make(LoggerFactory::class); + $preprocessor = new Preprocessor( + $acc, + $alc, + $wooPreprocessor, + $couponPreProcessor, + $newsletterRepository, + $loggerFactory + ); expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceContent']))->equals([[ 'type' => 'container', 'orientation' => 'horizontal',