diff --git a/mailpoet/lib/Cron/Workers/Bounce.php b/mailpoet/lib/Cron/Workers/Bounce.php index 5c58b60a61..85ee5c78cb 100644 --- a/mailpoet/lib/Cron/Workers/Bounce.php +++ b/mailpoet/lib/Cron/Workers/Bounce.php @@ -4,11 +4,10 @@ namespace MailPoet\Cron\Workers; use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\ScheduledTaskEntity; +use MailPoet\Entities\ScheduledTaskSubscriberEntity; use MailPoet\Entities\StatisticsBounceEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Mailer\Mailer; -use MailPoet\Models\ScheduledTask; -use MailPoet\Models\ScheduledTaskSubscriber; use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository; use MailPoet\Newsletter\Sending\SendingQueuesRepository; use MailPoet\Services\Bridge; @@ -16,7 +15,6 @@ use MailPoet\Services\Bridge\API; use MailPoet\Settings\SettingsController; use MailPoet\Statistics\StatisticsBouncesRepository; use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\Tasks\Subscribers as TaskSubscribers; use MailPoet\Tasks\Subscribers\BatchIterator; use MailPoetVendor\Carbon\Carbon; @@ -78,8 +76,8 @@ class Bounce extends SimpleWorker { public function prepareTaskStrategy(ScheduledTaskEntity $task, $timer) { $this->scheduledTaskSubscribersRepository->createSubscribersForBounceWorker($task); - if (!ScheduledTaskSubscriber::getUnprocessedCount($task->getId())) { - ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany(); + if (!$this->scheduledTaskSubscribersRepository->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED])) { + $this->scheduledTaskSubscribersRepository->deleteByScheduledTask($task); return false; } return true; @@ -89,27 +87,21 @@ class Bounce extends SimpleWorker { $subscriberBatches = new BatchIterator($task->getId(), self::BATCH_SIZE); if (count($subscriberBatches) === 0) { - ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany(); + $this->scheduledTaskSubscribersRepository->deleteByScheduledTask($task); return true; // mark completed } - $parisTask = ScheduledTask::findOne($task->getId()); + /** @var int[] $subscribersToProcessIds - it's required for PHPStan */ + foreach ($subscriberBatches as $subscribersToProcessIds) { + // abort if execution limit is reached + $this->cronHelper->enforceExecutionLimit($timer); - if ($parisTask instanceof ScheduledTask) { - $taskSubscribers = new TaskSubscribers($parisTask); + $subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds); + $subscriberEmails = array_column($subscriberEmails, 'email'); - /** @var int[] $subscribersToProcessIds - it's required for PHPStan */ - foreach ($subscriberBatches as $subscribersToProcessIds) { - // abort if execution limit is reached - $this->cronHelper->enforceExecutionLimit($timer); + $this->processEmails($task, $subscriberEmails); - $subscriberEmails = $this->subscribersRepository->getUndeletedSubscribersEmailsByIds($subscribersToProcessIds); - $subscriberEmails = array_column($subscriberEmails, 'email'); - - $this->processEmails($task, $subscriberEmails); - - $taskSubscribers->updateProcessedSubscribers($subscribersToProcessIds); - } + $this->scheduledTaskSubscribersRepository->updateProcessedSubscribers($task, $subscribersToProcessIds); } return true; diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php index e39898026a..ab7184bb82 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php @@ -125,6 +125,15 @@ class ScheduledTaskSubscribersRepository extends Repository { $stmt->executeQuery(); } + public function deleteByScheduledTask(ScheduledTaskEntity $scheduledTask): void { + $this->entityManager->createQueryBuilder() + ->delete(ScheduledTaskSubscriberEntity::class, 'sts') + ->where('sts.task = :task') + ->setParameter('task', $scheduledTask) + ->getQuery() + ->execute(); + } + private function checkCompleted(ScheduledTaskEntity $task): void { $count = $this->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]); if ($count === 0) {