Nessuna descrizione

Unsubscribes.php 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace MailPoet\Statistics\Track;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Entities\NewsletterEntity;
  5. use MailPoet\Entities\SendingQueueEntity;
  6. use MailPoet\Entities\StatisticsUnsubscribeEntity;
  7. use MailPoet\Entities\SubscriberEntity;
  8. use MailPoet\Newsletter\Sending\SendingQueuesRepository;
  9. use MailPoet\Statistics\StatisticsUnsubscribesRepository;
  10. use MailPoet\Subscribers\SubscribersRepository;
  11. class Unsubscribes {
  12. /** @var SendingQueuesRepository */
  13. private $sendingQueuesRepository;
  14. /** @var StatisticsUnsubscribesRepository */
  15. private $statisticsUnsubscribesRepository;
  16. /**
  17. * @var SubscribersRepository
  18. */
  19. private $subscribersRepository;
  20. public function __construct(
  21. SendingQueuesRepository $sendingQueuesRepository,
  22. StatisticsUnsubscribesRepository $statisticsUnsubscribesRepository,
  23. SubscribersRepository $subscribersRepository
  24. ) {
  25. $this->sendingQueuesRepository = $sendingQueuesRepository;
  26. $this->statisticsUnsubscribesRepository = $statisticsUnsubscribesRepository;
  27. $this->subscribersRepository = $subscribersRepository;
  28. }
  29. public function track(int $subscriberId, string $source, int $queueId = null, string $meta = null) {
  30. $queue = null;
  31. $statistics = null;
  32. if ($queueId) {
  33. $queue = $this->sendingQueuesRepository->findOneById($queueId);
  34. }
  35. $subscriber = $this->subscribersRepository->findOneById($subscriberId);
  36. if (!$subscriber instanceof SubscriberEntity) {
  37. return;
  38. }
  39. if (($queue instanceof SendingQueueEntity)) {
  40. $newsletter = $queue->getNewsletter();
  41. if ($newsletter instanceof NewsletterEntity) {
  42. $statistics = $this->statisticsUnsubscribesRepository->findOneBy(
  43. [
  44. 'queue' => $queue,
  45. 'newsletter' => $newsletter,
  46. 'subscriber' => $subscriber,
  47. ]
  48. );
  49. if (!$statistics) {
  50. $statistics = new StatisticsUnsubscribeEntity($newsletter, $queue, $subscriber);
  51. }
  52. }
  53. }
  54. if ($statistics === null) {
  55. $statistics = new StatisticsUnsubscribeEntity(null, null, $subscriber);
  56. }
  57. if ($meta !== null) {
  58. $statistics->setMeta($meta);
  59. }
  60. $statistics->setSource($source);
  61. $this->statisticsUnsubscribesRepository->persist($statistics);
  62. $this->statisticsUnsubscribesRepository->flush();
  63. }
  64. }