Aucune description

StatisticsClicksRepository.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php declare(strict_types=1);
  2. namespace MailPoet\Statistics;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Doctrine\Repository;
  5. use MailPoet\Entities\NewsletterEntity;
  6. use MailPoet\Entities\NewsletterLinkEntity;
  7. use MailPoet\Entities\SendingQueueEntity;
  8. use MailPoet\Entities\StatisticsClickEntity;
  9. use MailPoet\Entities\SubscriberEntity;
  10. use MailPoet\Entities\UserAgentEntity;
  11. use MailPoetVendor\Doctrine\ORM\QueryBuilder;
  12. /**
  13. * @extends Repository<StatisticsClickEntity>
  14. */
  15. class StatisticsClicksRepository extends Repository {
  16. protected function getEntityClassName(): string {
  17. return StatisticsClickEntity::class;
  18. }
  19. public function createOrUpdateClickCount(
  20. NewsletterLinkEntity $link,
  21. SubscriberEntity $subscriber,
  22. NewsletterEntity $newsletter,
  23. SendingQueueEntity $queue,
  24. ?UserAgentEntity $userAgent
  25. ): StatisticsClickEntity {
  26. $statistics = $this->findOneBy([
  27. 'link' => $link,
  28. 'newsletter' => $newsletter,
  29. 'subscriber' => $subscriber,
  30. 'queue' => $queue,
  31. ]);
  32. if (!$statistics instanceof StatisticsClickEntity) {
  33. $statistics = new StatisticsClickEntity($newsletter, $queue, $subscriber, $link, 1);
  34. if ($userAgent) {
  35. $statistics->setUserAgent($userAgent);
  36. $statistics->setUserAgentType($userAgent->getUserAgentType());
  37. }
  38. $this->persist($statistics);
  39. } else {
  40. $statistics->setCount($statistics->getCount() + 1);
  41. }
  42. return $statistics;
  43. }
  44. public function getAllForSubscriber(SubscriberEntity $subscriber): QueryBuilder {
  45. return $this->entityManager->createQueryBuilder()
  46. ->select('clicks.id id, queue.newsletterRenderedSubject, clicks.createdAt, link.url, userAgent.userAgent')
  47. ->from(StatisticsClickEntity::class, 'clicks')
  48. ->join('clicks.queue', 'queue')
  49. ->join('clicks.link', 'link')
  50. ->leftJoin('clicks.userAgent', 'userAgent')
  51. ->where('clicks.subscriber = :subscriber')
  52. ->orderBy('link.url')
  53. ->setParameter('subscriber', $subscriber->getId());
  54. }
  55. }