diff --git a/lib/Cron/Workers/Bounce.php b/lib/Cron/Workers/Bounce.php index 9827f3ac48..2a1c62c87e 100644 --- a/lib/Cron/Workers/Bounce.php +++ b/lib/Cron/Workers/Bounce.php @@ -2,7 +2,9 @@ namespace MailPoet\Cron\Workers; +use MailPoet\Entities\NewsletterEntity; use MailPoet\Entities\ScheduledTaskEntity; +use MailPoet\Entities\StatisticsBounceEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Mailer\Mailer; use MailPoet\Models\ScheduledTask; @@ -12,6 +14,7 @@ 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; @@ -43,11 +46,15 @@ class Bounce extends SimpleWorker { /** @var SendingQueuesRepository */ private $sendingQueuesRepository; + /** @var StatisticsBouncesRepository */ + private $statisticsBouncesRepository; + public function __construct( SettingsController $settings, SubscribersRepository $subscribersRepository, ScheduledTasksRepository $scheduledTasksRepository, SendingQueuesRepository $sendingQueuesRepository, + StatisticsBouncesRepository $statisticsBouncesRepository, Bridge $bridge ) { $this->settings = $settings; @@ -56,6 +63,7 @@ class Bounce extends SimpleWorker { $this->subscribersRepository = $subscribersRepository; $this->scheduledTasksRepository = $scheduledTasksRepository; $this->sendingQueuesRepository = $sendingQueuesRepository; + $this->statisticsBouncesRepository = $statisticsBouncesRepository; } public function init() { @@ -148,7 +156,11 @@ class Bounce extends SimpleWorker { } $queues = $this->sendingQueuesRepository->findAllForSubscriberSentBetween($subscriber, $taskEntity->getScheduledAt(), $dateFrom); foreach ($queues as $queue) { - // todo save statistics + $newsletter = $queue->getNewsletter(); + if ($newsletter instanceof NewsletterEntity) { + $statistics = new StatisticsBounceEntity($newsletter, $queue, $subscriber); + $this->statisticsBouncesRepository->persist($statistics); + } } } } diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 9932d55792..c23686dc54 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -238,6 +238,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Statistics\Track\WooCommercePurchases::class); $container->autowire(\MailPoet\Statistics\Track\Unsubscribes::class)->setPublic(true); $container->autowire(\MailPoet\Statistics\StatisticsFormsRepository::class)->setPublic(true); + $container->autowire(\MailPoet\Statistics\StatisticsBouncesRepository::class)->setPublic(true); $container->autowire(\MailPoet\Statistics\StatisticsClicksRepository::class)->setPublic(true); $container->autowire(\MailPoet\Statistics\StatisticsOpensRepository::class)->setPublic(true); $container->autowire(\MailPoet\Statistics\StatisticsUnsubscribesRepository::class); diff --git a/lib/Statistics/StatisticsBouncesRepository.php b/lib/Statistics/StatisticsBouncesRepository.php new file mode 100644 index 0000000000..790ff21d59 --- /dev/null +++ b/lib/Statistics/StatisticsBouncesRepository.php @@ -0,0 +1,15 @@ + + */ +class StatisticsBouncesRepository extends Repository { + protected function getEntityClassName(): string { + return StatisticsBounceEntity::class; + } +}