PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 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 / Automation / Integrations / MailPoet / Fields / SubscriberFieldsFactory.php
mailpoet / lib / Automation / Integrations / MailPoet / Fields Last commit date
NewsletterLinkFieldsFactory.php 2 years ago SubscriberAutomationFieldsFactory.php 1 year ago SubscriberCustomFieldsFactory.php 2 months ago SubscriberFieldsFactory.php 2 months ago SubscriberStatisticFieldsFactory.php 2 years ago index.php 3 years ago
SubscriberFieldsFactory.php
264 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Integrations\MailPoet\Fields;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\Data\Field;
9 use MailPoet\Automation\Integrations\MailPoet\Payloads\SubscriberPayload;
10 use MailPoet\Entities\SegmentEntity;
11 use MailPoet\Entities\SubscriberEntity;
12 use MailPoet\Segments\SegmentsFinder;
13 use MailPoet\Segments\SegmentsRepository;
14 use MailPoet\Tags\TagRepository;
15
16 class SubscriberFieldsFactory {
17 /** @var SegmentsFinder */
18 private $segmentsFinder;
19
20 /** @var SegmentsRepository */
21 private $segmentsRepository;
22
23 /** @var SubscriberAutomationFieldsFactory */
24 private $automationFieldsFactory;
25
26 /** @var SubscriberCustomFieldsFactory */
27 private $customFieldsFactory;
28
29 /** @var TagRepository */
30 private $tagRepository;
31
32 /** @var SubscriberStatisticFieldsFactory */
33 private $statisticFieldsFactory;
34
35 public function __construct(
36 SegmentsFinder $segmentsFinder,
37 SegmentsRepository $segmentsRepository,
38 SubscriberAutomationFieldsFactory $automationFieldsFactory,
39 SubscriberCustomFieldsFactory $customFieldsFactory,
40 SubscriberStatisticFieldsFactory $statisticFieldsFactory,
41 TagRepository $tagRepository
42 ) {
43 $this->segmentsFinder = $segmentsFinder;
44 $this->segmentsRepository = $segmentsRepository;
45 $this->automationFieldsFactory = $automationFieldsFactory;
46 $this->customFieldsFactory = $customFieldsFactory;
47 $this->statisticFieldsFactory = $statisticFieldsFactory;
48 $this->tagRepository = $tagRepository;
49 }
50
51 /** @return Field[] */
52 public function getFields(): array {
53 return array_merge(
54 $this->customFieldsFactory->getFields(),
55 [
56 new Field(
57 'mailpoet:subscriber:email',
58 Field::TYPE_STRING,
59 __('Email address', 'mailpoet'),
60 function (SubscriberPayload $payload) {
61 return $payload->getEmail();
62 }
63 ),
64 new Field(
65 'mailpoet:subscriber:engagement-score',
66 Field::TYPE_NUMBER,
67 __('Engagement score', 'mailpoet'),
68 function (SubscriberPayload $payload) {
69 return $payload->getSubscriber()->getEngagementScore();
70 }
71 ),
72 new Field(
73 'mailpoet:subscriber:first-name',
74 Field::TYPE_STRING,
75 __('First name', 'mailpoet'),
76 function (SubscriberPayload $payload) {
77 return $payload->getSubscriber()->getFirstName();
78 }
79 ),
80 new Field(
81 'mailpoet:subscriber:last-name',
82 Field::TYPE_STRING,
83 __('Last name', 'mailpoet'),
84 function (SubscriberPayload $payload) {
85 return $payload->getSubscriber()->getLastName();
86 }
87 ),
88 new Field(
89 'mailpoet:subscriber:is-globally-subscribed',
90 Field::TYPE_BOOLEAN,
91 __('Is globally subscribed', 'mailpoet'),
92 function (SubscriberPayload $payload) {
93 return $payload->getStatus() === SubscriberEntity::STATUS_SUBSCRIBED;
94 }
95 ),
96 new Field(
97 'mailpoet:subscriber:last-engagement-at',
98 Field::TYPE_DATETIME,
99 __('Last engaged', 'mailpoet'),
100 function (SubscriberPayload $payload) {
101 return $payload->getSubscriber()->getLastEngagementAt();
102 }
103 ),
104 new Field(
105 'mailpoet:subscriber:status',
106 Field::TYPE_ENUM,
107 __('Status', 'mailpoet'),
108 function (SubscriberPayload $payload) {
109 return $payload->getStatus();
110 },
111 [
112 'options' => [
113 [
114 'id' => SubscriberEntity::STATUS_SUBSCRIBED,
115 'name' => __('Subscribed', 'mailpoet'),
116 ],
117 [
118 'id' => SubscriberEntity::STATUS_UNCONFIRMED,
119 'name' => __('Unconfirmed', 'mailpoet'),
120 ],
121 [
122 'id' => SubscriberEntity::STATUS_UNSUBSCRIBED,
123 'name' => __('Unsubscribed', 'mailpoet'),
124 ],
125 [
126 'id' => SubscriberEntity::STATUS_INACTIVE,
127 'name' => __('Inactive', 'mailpoet'),
128 ],
129 [
130 'id' => SubscriberEntity::STATUS_BOUNCED,
131 'name' => __('Bounced', 'mailpoet'),
132 ],
133 ],
134 ]
135 ),
136 new Field(
137 'mailpoet:subscriber:subscription-source',
138 Field::TYPE_ENUM,
139 __('Subscription source', 'mailpoet'),
140 function (SubscriberPayload $payload) {
141 return $payload->getSubscriber()->getSource();
142 },
143 [
144 'options' => [
145 [
146 'id' => 'api',
147 'name' => __('API', 'mailpoet'),
148 ],
149 [
150 'id' => 'form',
151 'name' => __('Form', 'mailpoet'),
152 ],
153 [
154 'id' => 'unknown',
155 'name' => __('Unknown', 'mailpoet'),
156 ],
157 [
158 'id' => 'imported',
159 'name' => __('Imported', 'mailpoet'),
160 ],
161 [
162 'id' => 'administrator',
163 'name' => __('Administrator', 'mailpoet'),
164 ],
165 [
166 'id' => 'wordpress_user',
167 'name' => __('WordPress user', 'mailpoet'),
168 ],
169 [
170 'id' => 'wordpress_user_deleted',
171 'name' => __('WordPress user (deleted)', 'mailpoet'),
172 ],
173 [
174 'id' => 'woocommerce_user',
175 'name' => __('WooCommerce user', 'mailpoet'),
176 ],
177 [
178 'id' => 'woocommerce_checkout',
179 'name' => __('WooCommerce checkout', 'mailpoet'),
180 ],
181 ],
182 ]
183 ),
184 new Field(
185 'mailpoet:subscriber:last-subscribed-at',
186 Field::TYPE_DATETIME,
187 __('Subscribed date', 'mailpoet'),
188 function (SubscriberPayload $payload) {
189 return $payload->getSubscriber()->getLastSubscribedAt();
190 }
191 ),
192 new Field(
193 'mailpoet:subscriber:lists',
194 Field::TYPE_ENUM_ARRAY,
195 __('Subscribed lists', 'mailpoet'),
196 function (SubscriberPayload $payload) {
197 $value = [];
198 foreach ($payload->getSubscriber()->getSegments() as $list) {
199 if ($list->getType() !== SegmentEntity::TYPE_DYNAMIC) {
200 $value[] = $list->getId();
201 }
202 }
203 return $value;
204 },
205 [
206 'options' => array_map(function ($segment) {
207 return [
208 'id' => $segment->getId(),
209 'name' => $segment->getName(),
210 ];
211 }, $this->segmentsRepository->findByTypeNotIn([SegmentEntity::TYPE_DYNAMIC])),
212 ]
213 ),
214 new Field(
215 'mailpoet:subscriber:tags',
216 Field::TYPE_ENUM_ARRAY,
217 __('Tags', 'mailpoet'),
218 function (SubscriberPayload $payload) {
219 $value = [];
220 foreach ($payload->getSubscriber()->getSubscriberTags() as $subscriberTag) {
221 $tag = $subscriberTag->getTag();
222 if ($tag) {
223 $value[] = $tag->getId();
224 }
225 }
226 return $value;
227 },
228 [
229 'options' => array_map(function ($tag) {
230 return [
231 'id' => $tag->getId(),
232 'name' => $tag->getName(),
233 ];
234 }, $this->tagRepository->findAll()),
235 ]
236 ),
237 new Field(
238 'mailpoet:subscriber:segments',
239 Field::TYPE_ENUM_ARRAY,
240 __('Segments', 'mailpoet'),
241 function (SubscriberPayload $payload) {
242 $segments = $this->segmentsFinder->findDynamicSegments($payload->getSubscriber());
243 $value = [];
244 foreach ($segments as $segment) {
245 $value[] = $segment->getId();
246 }
247 return $value;
248 },
249 [
250 'options' => array_map(function ($segment) {
251 return [
252 'id' => $segment->getId(),
253 'name' => $segment->getName(),
254 ];
255 }, $this->segmentsRepository->findBy(['type' => SegmentEntity::TYPE_DYNAMIC])),
256 ]
257 ),
258 ],
259 $this->statisticFieldsFactory->getFields(),
260 $this->automationFieldsFactory->getFields()
261 );
262 }
263 }
264