diff --git a/mailpoet/lib/Subscribers/Statistics/SubscriberStatisticsRepository.php b/mailpoet/lib/Subscribers/Statistics/SubscriberStatisticsRepository.php index 0945911733..15bd688e59 100644 --- a/mailpoet/lib/Subscribers/Statistics/SubscriberStatisticsRepository.php +++ b/mailpoet/lib/Subscribers/Statistics/SubscriberStatisticsRepository.php @@ -48,9 +48,7 @@ class SubscriberStatisticsRepository extends Repository { public function getStatisticsClickCount(SubscriberEntity $subscriber, ?Carbon $startTime = null): int { $queryBuilder = $this->getStatisticsCountQuery(StatisticsClickEntity::class, $subscriber); if ($startTime) { - $queryBuilder - ->andWhere('stats.createdAt >= :dateTime') - ->setParameter('dateTime', $startTime); + $this->applyDateConstraint($queryBuilder, $startTime); } return (int)$queryBuilder ->getQuery() @@ -60,8 +58,7 @@ class SubscriberStatisticsRepository extends Repository { public function getStatisticsOpenCountQuery(SubscriberEntity $subscriber, ?Carbon $startTime = null): QueryBuilder { $queryBuilder = $this->getStatisticsCountQuery(StatisticsOpenEntity::class, $subscriber); if ($startTime) { - $queryBuilder->join(StatisticsNewsletterEntity::class, 'sent_stats', 'WITH', 'stats.newsletter = sent_stats.newsletter AND sent_stats.sentAt >= :dateTime') - ->setParameter('dateTime', $startTime); + $this->applyDateConstraint($queryBuilder, $startTime); } return $queryBuilder; } @@ -133,4 +130,11 @@ class SubscriberStatisticsRepository extends Repository { $this->wcHelper ); } + + private function applyDateConstraint(QueryBuilder $queryBuilder, Carbon $startTime): QueryBuilder { + $queryBuilder->join(StatisticsNewsletterEntity::class, 'sent_stats', 'WITH', 'stats.newsletter = sent_stats.newsletter AND stats.subscriber = sent_stats.subscriber AND sent_stats.sentAt >= :dateTime') + ->setParameter('dateTime', $startTime); + + return $queryBuilder; + } } diff --git a/mailpoet/tests/integration/Subscribers/SubscriberStatisticsRepositoryTest.php b/mailpoet/tests/integration/Subscribers/SubscriberStatisticsRepositoryTest.php index 2fa0af7880..8fdd3df281 100644 --- a/mailpoet/tests/integration/Subscribers/SubscriberStatisticsRepositoryTest.php +++ b/mailpoet/tests/integration/Subscribers/SubscriberStatisticsRepositoryTest.php @@ -27,26 +27,29 @@ class SubscriberStatisticsRepositoryTest extends \MailPoetTest { public function testItFetchesClickCount(): void { $yearAgo = Carbon::now()->subYear(); $monthAgo = Carbon::now()->subMonth(); + $fiveYearsAgo = Carbon::now()->subYears(5); $subscriber = (new Subscriber())->create(); $newsletter = (new Newsletter())->withSendingQueue()->create(); $link = (new NewsletterLink($newsletter))->create(); + $sendStat = (new StatisticsNewsletters($newsletter, $subscriber))->withSentAt($monthAgo)->create(); $click = (new StatisticsClicks($link, $subscriber)) ->withCreatedAt($monthAgo) ->create(); $newsletter2 = (new Newsletter())->withSendingQueue()->create(); $link2 = (new NewsletterLink($newsletter2))->create(); + $sendStat2 = (new StatisticsNewsletters($newsletter2, $subscriber))->withSentAt($yearAgo)->create(); $click2 = (new StatisticsClicks($link2, $subscriber)) ->withCreatedAt($yearAgo) ->create(); - $newsletter3 = (new Newsletter())->withSendingQueue()->create(); $link3 = (new NewsletterLink($newsletter3))->create(); + $sendStat3 = (new StatisticsNewsletters($newsletter3, $subscriber))->withSentAt($fiveYearsAgo)->create(); $click3 = (new StatisticsClicks($link3, $subscriber)) - ->withCreatedAt(Carbon::now()->subYears(5)) + ->withCreatedAt($fiveYearsAgo) ->create(); $lifetimeCount = $this->repository->getStatisticsClickCount($subscriber, null);