diff --git a/lib/Tasks/Sending.php b/lib/Tasks/Sending.php index fe081fb5b9..344e8efb31 100644 --- a/lib/Tasks/Sending.php +++ b/lib/Tasks/Sending.php @@ -2,6 +2,7 @@ namespace MailPoet\Tasks; +use MailPoet\Logging\LoggerFactory; use MailPoet\Models\ScheduledTask; use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Models\SendingQueue; @@ -97,11 +98,22 @@ class Sending { foreach ($tasks as $task) { if (!empty($queuesIndex[$task->id])) { $result[] = self::create($task, $queuesIndex[$task->id]); + } else { + static::handleInvalidTask($task); } } return $result; } + public static function handleInvalidTask(ScheduledTask $task) { + $loggerFactory = LoggerFactory::getInstance(); + $loggerFactory->getLogger(LoggerFactory::TOPIC_NEWSLETTERS)->addError( + 'invalid sending task found, deleting', + ['task_id' => $task->id] + ); + $task->delete(); + } + public static function createFromScheduledTask(ScheduledTask $task) { $queue = SendingQueue::where('task_id', $task->id)->findOne(); if (!$queue) { diff --git a/tests/integration/Tasks/SendingTest.php b/tests/integration/Tasks/SendingTest.php index 6997e306ca..d614f04111 100644 --- a/tests/integration/Tasks/SendingTest.php +++ b/tests/integration/Tasks/SendingTest.php @@ -58,6 +58,13 @@ class SendingTest extends \MailPoetTest { expect($queue->taskId)->equals($this->task->id); } + public function testItDeletesInvalidTasksWhenCreatingManyFromTasks() { + $this->queue->delete(); + $sendings = SendingTask::createManyFromTasks([$this->task]); + expect($sendings)->isEmpty(); + expect(ScheduledTask::findOne($this->task->id))->equals(false); + } + public function testItCanBeCreatedFromScheduledTask() { $sending = SendingTask::createFromScheduledTask($this->task); $queue = $sending->queue();