Нема описа

AutomaticEmailsRepository.php 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace MailPoet\Newsletter;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\Doctrine\Repository;
  5. use MailPoet\Entities\NewsletterEntity;
  6. use MailPoet\Entities\SendingQueueEntity;
  7. use MailPoetVendor\Doctrine\ORM\QueryBuilder;
  8. /**
  9. * @extends Repository<NewsletterEntity>
  10. */
  11. class AutomaticEmailsRepository extends Repository {
  12. protected function getEntityClassName() {
  13. return NewsletterEntity::class;
  14. }
  15. public function wasScheduledForSubscriber(int $newsletterId, int $subscriberId): bool {
  16. $query = $this->doctrineRepository->createQueryBuilder('n')
  17. ->select('COUNT(q)')
  18. ->from(SendingQueueEntity::class, 'q');
  19. $query = $this->getAllQueuesForSubscscriberQuery($query, $newsletterId, $subscriberId);
  20. $count = $query->getQuery()
  21. ->getSingleScalarResult() ?: 0;
  22. return ((int)$count) > 0;
  23. }
  24. private function getAllQueuesForSubscscriberQuery(QueryBuilder $query, int $newsletterId, int $subscriberId): QueryBuilder {
  25. return $query
  26. ->join('q.task', 't')
  27. ->join('t.subscribers', 's')
  28. ->andWhere('q.newsletter = :newsletterId')
  29. ->andWhere('s.subscriber = :subscriberId')
  30. ->setParameter('newsletterId', $newsletterId)
  31. ->setParameter('subscriberId', $subscriberId);
  32. }
  33. /**
  34. * Search products/categories in meta if all of the ordered products have already been sent to the subscriber.
  35. */
  36. public function alreadySentAllProducts(int $newsletterId, int $subscriberId, string $orderedKey, array $ordered): bool {
  37. $query = $this->doctrineRepository->createQueryBuilder('n')
  38. ->select('q')
  39. ->from(SendingQueueEntity::class, 'q');
  40. $queues = $this->getAllQueuesForSubscscriberQuery($query, $newsletterId, $subscriberId)
  41. ->getQuery()
  42. ->getResult();
  43. $sent = [];
  44. foreach ($queues as $queue) {
  45. $meta = $queue->getMeta();
  46. if (isset($meta[$orderedKey])) {
  47. $sent = array_merge($sent, $meta[$orderedKey]);
  48. }
  49. }
  50. $notSentProducts = array_diff($ordered, $sent);
  51. return empty($notSentProducts);
  52. }
  53. }