diff --git a/mailpoet/lib/Cron/Workers/Bounce.php b/mailpoet/lib/Cron/Workers/Bounce.php index 567909dff6..5c58b60a61 100644 --- a/mailpoet/lib/Cron/Workers/Bounce.php +++ b/mailpoet/lib/Cron/Workers/Bounce.php @@ -9,13 +9,13 @@ 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; use MailPoet\Services\Bridge\API; use MailPoet\Settings\SettingsController; use MailPoet\Statistics\StatisticsBouncesRepository; use MailPoet\Subscribers\SubscribersRepository; -use MailPoet\Tasks\Bounce as BounceTask; use MailPoet\Tasks\Subscribers as TaskSubscribers; use MailPoet\Tasks\Subscribers\BatchIterator; use MailPoetVendor\Carbon\Carbon; @@ -45,11 +45,15 @@ class Bounce extends SimpleWorker { /** @var StatisticsBouncesRepository */ private $statisticsBouncesRepository; + /** @var ScheduledTaskSubscribersRepository */ + private $scheduledTaskSubscribersRepository; + public function __construct( SettingsController $settings, SubscribersRepository $subscribersRepository, SendingQueuesRepository $sendingQueuesRepository, StatisticsBouncesRepository $statisticsBouncesRepository, + ScheduledTaskSubscribersRepository $scheduledTaskSubscribersRepository, Bridge $bridge ) { $this->settings = $settings; @@ -58,6 +62,7 @@ class Bounce extends SimpleWorker { $this->subscribersRepository = $subscribersRepository; $this->sendingQueuesRepository = $sendingQueuesRepository; $this->statisticsBouncesRepository = $statisticsBouncesRepository; + $this->scheduledTaskSubscribersRepository = $scheduledTaskSubscribersRepository; } public function init() { @@ -71,7 +76,7 @@ class Bounce extends SimpleWorker { } public function prepareTaskStrategy(ScheduledTaskEntity $task, $timer) { - BounceTask::prepareSubscribers($task); + $this->scheduledTaskSubscribersRepository->createSubscribersForBounceWorker($task); if (!ScheduledTaskSubscriber::getUnprocessedCount($task->getId())) { ScheduledTaskSubscriber::where('task_id', $task->getId())->deleteMany(); diff --git a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php index 99f04412e5..e39898026a 100644 --- a/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php +++ b/mailpoet/lib/Newsletter/Sending/ScheduledTaskSubscribersRepository.php @@ -106,6 +106,25 @@ class ScheduledTaskSubscribersRepository extends Repository { $this->checkCompleted($task); } + public function createSubscribersForBounceWorker(ScheduledTaskEntity $scheduledTaskEntity): void { + $scheduledTaskSubscribersTable = $this->entityManager->getClassMetadata(ScheduledTaskSubscriberEntity::class)->getTableName(); + $subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName(); + + $stmt = $this->entityManager->getConnection()->prepare(" + INSERT IGNORE INTO " . $scheduledTaskSubscribersTable . " + (task_id, subscriber_id, processed) + SELECT :taskId AS task_id, s.`id` AS subscriber_id, :unprocessed AS processed + FROM " . $subscribersTable . " s + WHERE s.`deleted_at` IS NULL + AND s.`status` IN (:subscribed, :unconfirmed) + "); + $stmt->bindValue('taskId', $scheduledTaskEntity->getId()); + $stmt->bindValue('unprocessed', ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED); + $stmt->bindValue('subscribed', SubscriberEntity::STATUS_SUBSCRIBED); + $stmt->bindValue('unconfirmed', SubscriberEntity::STATUS_UNCONFIRMED); + $stmt->executeQuery(); + } + private function checkCompleted(ScheduledTaskEntity $task): void { $count = $this->countBy(['task' => $task, 'processed' => ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED]); if ($count === 0) { diff --git a/mailpoet/lib/Tasks/Bounce.php b/mailpoet/lib/Tasks/Bounce.php deleted file mode 100644 index fe25e85d77..0000000000 --- a/mailpoet/lib/Tasks/Bounce.php +++ /dev/null @@ -1,27 +0,0 @@ -getId(), - ScheduledTaskSubscriber::STATUS_UNPROCESSED, - Subscriber::STATUS_SUBSCRIBED, - Subscriber::STATUS_UNCONFIRMED, - ] - ); - } -} diff --git a/mailpoet/tests/integration/Cron/Workers/BounceTest.php b/mailpoet/tests/integration/Cron/Workers/BounceTest.php index 8ca0d819e5..90cd679d35 100644 --- a/mailpoet/tests/integration/Cron/Workers/BounceTest.php +++ b/mailpoet/tests/integration/Cron/Workers/BounceTest.php @@ -67,6 +67,7 @@ class BounceTest extends \MailPoetTest { $this->subscribersRepository, $this->diContainer->get(SendingQueuesRepository::class), $this->diContainer->get(StatisticsBouncesRepository::class), + $this->diContainer->get(ScheduledTaskSubscribersRepository::class), $this->diContainer->get(Bridge::class) ); @@ -86,6 +87,7 @@ class BounceTest extends \MailPoetTest { $this->subscribersRepository, $this->diContainer->get(SendingQueuesRepository::class), $this->diContainer->get(StatisticsBouncesRepository::class), + $this->diContainer->get(ScheduledTaskSubscribersRepository::class), $this->diContainer->get(Bridge::class) ); $worker->init();