From 397232e932e48468fad3bb2c311de8cf0c55cee4 Mon Sep 17 00:00:00 2001 From: Sam Najian Date: Thu, 16 Mar 2023 21:08:30 +0100 Subject: [PATCH] Set status of scheduled_task to invalid if it has not subs [MAILPOET-5134] --- .../lib/Cron/Workers/SendingQueue/SendingQueue.php | 11 +++++++++++ .../Newsletter/Sending/ScheduledTasksRepository.php | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php index 4020be993e..72ddd828bf 100644 --- a/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/mailpoet/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -200,6 +200,17 @@ class SendingQueue { // get subscribers $subscriberBatches = new BatchIterator($queue->taskId, $this->getBatchSize()); + if ($subscriberBatches->count() === 0) { + $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( + 'no subscribers to process', + ['task_id' => $queue->taskId] + ); + $task = $queue->getSendingQueueEntity()->getTask(); + if ($task) { + $this->scheduledTasksRepository->invalidateTask($task); + } + return; + } /** @var int[] $subscribersToProcessIds - it's required for PHPStan */ foreach ($subscriberBatches as $subscribersToProcessIds) { $this->loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->info( diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php index 885f203c4f..4c9c06db0b 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTasksRepository.php @@ -309,6 +309,12 @@ class ScheduledTasksRepository extends Repository { ->getResult(); } + public function invalidateTask(ScheduledTaskEntity $task): void { + $task->setStatus( ScheduledTaskEntity::STATUS_INVALID); + $this->persist($task); + $this->flush(); + } + protected function findByTypeAndStatus($type, $status, $limit = null, $future = false) { $queryBuilder = $this->doctrineRepository->createQueryBuilder('st') ->select('st')