PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.21.2
MailPoet – Newsletters, Email Marketing, and Automation v5.21.2
5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Newsletter / Sending / ScheduledTaskSubscribersListingRepository.php
mailpoet / lib / Newsletter / Sending Last commit date
ScheduledTaskSubscribersListingRepository.php 1 year ago ScheduledTaskSubscribersRepository.php 1 year ago ScheduledTasksRepository.php 1 year ago SendingQueuesRepository.php 1 year ago index.php 3 years ago
ScheduledTaskSubscribersListingRepository.php
135 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Newsletter\Sending;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Entities\ScheduledTaskSubscriberEntity;
9 use MailPoet\Listing\ListingDefinition;
10 use MailPoet\Listing\ListingRepository;
11 use MailPoet\Util\Helpers;
12 use MailPoetVendor\Doctrine\ORM\QueryBuilder;
13
14 class ScheduledTaskSubscribersListingRepository extends ListingRepository {
15 public function getGroups(ListingDefinition $definition): array {
16 $queryBuilder = clone $this->queryBuilder;
17 $this->applyFromClause($queryBuilder);
18 $this->applyParameters($queryBuilder, $definition->getParameters());
19
20 // total count
21 $countQueryBuilder = clone $queryBuilder;
22 $countQueryBuilder->select('COUNT(sts.subscriber) AS subscriberCount');
23 $totalCount = intval($countQueryBuilder->getQuery()->getSingleScalarResult());
24
25 // Sent count
26 $sentCountQuery = clone $queryBuilder;
27 $sentCountQuery->select('COUNT(sts.subscriber) AS subscriberCount');
28 $sentCountQuery->andWhere('sts.processed = :processedStatus');
29 $sentCountQuery->andWhere('sts.failed = :failedStatus');
30 $sentCountQuery->setParameter('processedStatus', ScheduledTaskSubscriberEntity::STATUS_PROCESSED);
31 $sentCountQuery->setParameter('failedStatus', ScheduledTaskSubscriberEntity::FAIL_STATUS_OK);
32 $sentCount = intval($sentCountQuery->getQuery()->getSingleScalarResult());
33
34 // Failed count
35 $failedCountQuery = clone $queryBuilder;
36 $failedCountQuery->select('COUNT(sts.subscriber) AS subscriberCount');
37 $failedCountQuery->andWhere('sts.failed = :failedStatus');
38 $failedCountQuery->setParameter('failedStatus', ScheduledTaskSubscriberEntity::FAIL_STATUS_FAILED);
39 $failedCount = intval($failedCountQuery->getQuery()->getSingleScalarResult());
40
41 // Unprocessed count
42 $unprocessedCountQuery = clone $queryBuilder;
43 $unprocessedCountQuery->select('COUNT(sts.subscriber) AS subscriberCount');
44 $unprocessedCountQuery->andWhere('sts.processed = :processedStatus');
45 $unprocessedCountQuery->setParameter('processedStatus', ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED);
46 $unprocessedCount = intval($unprocessedCountQuery->getQuery()->getSingleScalarResult());
47
48 return [
49 [
50 'name' => 'all',
51 'label' => __('All', 'mailpoet'),
52 'count' => $totalCount,
53 ],
54 [
55 'name' => ScheduledTaskSubscriberEntity::SENDING_STATUS_SENT,
56 'label' => __('Sent', 'mailpoet'),
57 'count' => $sentCount,
58 ],
59 [
60 'name' => ScheduledTaskSubscriberEntity::SENDING_STATUS_FAILED,
61 'label' => __('Failed', 'mailpoet'),
62 'count' => $failedCount,
63 ],
64 [
65 'name' => ScheduledTaskSubscriberEntity::SENDING_STATUS_UNPROCESSED,
66 'label' => __('Unprocessed', 'mailpoet'),
67 'count' => $unprocessedCount,
68 ],
69 ];
70 }
71
72 protected function applySelectClause(QueryBuilder $queryBuilder) {
73 $queryBuilder->select("PARTIAL sts.{task,subscriber,processed,failed,error,createdAt,updatedAt}, PARTIAL s.{id, email, firstName, lastName}");
74 }
75
76 protected function applyFromClause(QueryBuilder $queryBuilder) {
77 $queryBuilder->from(ScheduledTaskSubscriberEntity::class, 'sts')
78 ->leftJoin('sts.subscriber', 's');
79 }
80
81 protected function applyGroup(QueryBuilder $queryBuilder, string $group) {
82 if ($group === ScheduledTaskSubscriberEntity::SENDING_STATUS_SENT) {
83 $queryBuilder->andWhere('sts.processed = :processedStatus');
84 $queryBuilder->andWhere('sts.failed = :failedStatus');
85 $queryBuilder->setParameter('processedStatus', ScheduledTaskSubscriberEntity::STATUS_PROCESSED);
86 $queryBuilder->setParameter('failedStatus', ScheduledTaskSubscriberEntity::FAIL_STATUS_OK);
87 } elseif ($group === ScheduledTaskSubscriberEntity::SENDING_STATUS_FAILED) {
88 $queryBuilder->andWhere('sts.failed = :failedStatus');
89 $queryBuilder->setParameter('failedStatus', ScheduledTaskSubscriberEntity::FAIL_STATUS_FAILED);
90 } elseif ($group === ScheduledTaskSubscriberEntity::SENDING_STATUS_UNPROCESSED) {
91 $queryBuilder->andWhere('sts.processed = :processedStatus');
92 $queryBuilder->setParameter('processedStatus', ScheduledTaskSubscriberEntity::STATUS_UNPROCESSED);
93 }
94 }
95
96 protected function applySorting(QueryBuilder $queryBuilder, string $sortBy, string $sortOrder) {
97 // ScheduledTaskSubscriber doesn't have id column so the default fallback value 'id'
98 // generated in MailPoet\Listing\Handler needs to be changed to something else
99 if ($sortBy === 'id') {
100 $sortBy = 'sts.subscriber';
101 } elseif ($sortBy === 'subscriberId') { // Ordering by subscriberId is mapped to email for consistency with Subscriber listing
102 $sortBy = 's.email';
103 } else {
104 $sortBy = "sts.{$sortBy}";
105 }
106 $queryBuilder->addOrderBy($sortBy, $sortOrder);
107 }
108
109 protected function applySearch(QueryBuilder $queryBuilder, string $search, array $parameters = []) {
110 $search = Helpers::escapeSearch($search);
111 $queryBuilder
112 ->andWhere('s.email LIKE :search or s.firstName LIKE :search or s.lastName LIKE :search')
113 ->setParameter('search', "%$search%");
114 }
115
116 protected function applyFilters(QueryBuilder $queryBuilder, array $filters) {
117 // the parent class requires this method, but scheduled task subscribers listing doesn't currently support this feature.
118 }
119
120 protected function applyParameters(QueryBuilder $queryBuilder, array $parameters) {
121 if (isset($parameters['task_ids']) && !empty($parameters['task_ids'])) {
122 $queryBuilder->andWhere('sts.task IN (:taskIds)')
123 ->setParameter('taskIds', $parameters['task_ids']);
124 }
125 }
126
127 public function getCount(ListingDefinition $definition): int {
128 $queryBuilder = clone $this->queryBuilder;
129 $this->applyFromClause($queryBuilder);
130 $this->applyConstraints($queryBuilder, $definition);
131 $queryBuilder->select("COUNT(DISTINCT sts.subscriber)");
132 return intval($queryBuilder->getQuery()->getSingleScalarResult());
133 }
134 }
135