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 / Entities / DynamicSegmentFilterData.php
mailpoet / lib / Entities Last commit date
CustomFieldEntity.php 2 months ago DynamicSegmentFilterData.php 2 months ago DynamicSegmentFilterEntity.php 3 years ago FeatureFlagEntity.php 3 years ago FormEntity.php 1 week ago LogEntity.php 3 years ago NewsletterEntity.php 2 months ago NewsletterLinkEntity.php 3 years ago NewsletterOptionEntity.php 3 years ago NewsletterOptionFieldEntity.php 1 month ago NewsletterPostEntity.php 3 years ago NewsletterSegmentEntity.php 3 years ago NewsletterTemplateEntity.php 3 years ago ScheduledTaskEntity.php 1 month ago ScheduledTaskSubscriberEntity.php 1 year ago SegmentEntity.php 2 months ago SendingQueueEntity.php 2 months ago SettingEntity.php 3 years ago StatisticsBounceEntity.php 3 years ago StatisticsClickEntity.php 3 years ago StatisticsFormEntity.php 3 years ago StatisticsNewsletterEntity.php 1 year ago StatisticsOpenEntity.php 3 years ago StatisticsUnsubscribeEntity.php 2 months ago StatisticsWooCommercePurchaseEntity.php 2 years ago StatsNotificationEntity.php 3 years ago SubscriberCustomFieldEntity.php 3 years ago SubscriberEntity.php 4 days ago SubscriberIPEntity.php 3 years ago SubscriberSegmentEntity.php 3 years ago SubscriberTagEntity.php 4 years ago TagEntity.php 3 years ago UserAgentEntity.php 3 years ago UserFlagEntity.php 3 years ago WpPostEntity.php 2 years ago index.php 3 years ago
DynamicSegmentFilterData.php
172 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Entities;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\InvalidStateException;
9 use MailPoet\Segments\DynamicSegments\Filters\UserRole;
10 use MailPoet\Segments\DynamicSegments\Filters\WooCommerceProduct;
11 use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
12
13 /**
14 * @ORM\Embeddable()
15 */
16 class DynamicSegmentFilterData {
17 const TYPE_AUTOMATIONS = 'automations';
18 const TYPE_USER_ROLE = 'userRole';
19 const TYPE_EMAIL = 'email';
20 const TYPE_WOOCOMMERCE = 'woocommerce';
21 const TYPE_WOOCOMMERCE_MEMBERSHIP = 'woocommerceMembership';
22 const TYPE_WOOCOMMERCE_SUBSCRIPTION = 'woocommerceSubscription';
23
24 public const CONNECT_TYPE_AND = 'and';
25 public const CONNECT_TYPE_OR = 'or';
26 public const CONNECT_TYPE_NONE = 'none';
27
28 public const OPERATOR_ALL = 'all';
29 public const OPERATOR_ANY = 'any';
30 public const OPERATOR_NONE = 'none';
31
32 public const OPERATOR_STARTS_WITH = 'startsWith';
33 public const OPERATOR_NOT_ENDS_WITH = 'notEndsWith';
34 public const OPERATOR_IS = 'is';
35 public const OPERATOR_CONTAINS = 'contains';
36 public const OPERATOR_NOT_CONTAINS = 'notContains';
37 public const OPERATOR_NOT_STARTS_WITH = 'notStartsWith';
38 public const OPERATOR_IS_NOT = 'isNot';
39 public const OPERATOR_ENDS_WITH = 'endsWith';
40 public const TEXT_FIELD_OPERATORS = [
41 DynamicSegmentFilterData::OPERATOR_IS,
42 DynamicSegmentFilterData::OPERATOR_IS_NOT,
43 DynamicSegmentFilterData::OPERATOR_CONTAINS,
44 DynamicSegmentFilterData::OPERATOR_NOT_CONTAINS,
45 DynamicSegmentFilterData::OPERATOR_STARTS_WITH,
46 DynamicSegmentFilterData::OPERATOR_NOT_STARTS_WITH,
47 DynamicSegmentFilterData::OPERATOR_ENDS_WITH,
48 DynamicSegmentFilterData::OPERATOR_NOT_ENDS_WITH,
49 ];
50 public const IS_NOT_BLANK = 'is_not_blank';
51 public const IS_BLANK = 'is_blank';
52
53 public const TIMEFRAME_ALL_TIME = 'allTime';
54 public const TIMEFRAME_IN_THE_LAST = 'inTheLast';
55 public const TIMEFRAME_BEFORE = 'before';
56 public const TIMEFRAME_AFTER = 'after';
57 public const TIMEFRAME_ON = 'on';
58 public const TIMEFRAME_BETWEEN = 'between';
59 public const TIMEFRAMES = [
60 self::TIMEFRAME_ALL_TIME,
61 self::TIMEFRAME_IN_THE_LAST,
62 self::TIMEFRAME_BEFORE,
63 self::TIMEFRAME_AFTER,
64 self::TIMEFRAME_ON,
65 self::TIMEFRAME_BETWEEN,
66 ];
67
68 /**
69 * @ORM\Column(type="serialized_array")
70 * @var array|null
71 */
72 private $filterData;
73
74 /**
75 * @ORM\Column(type="string", nullable=true)
76 * @var string|null
77 */
78 private $filterType;
79
80 /**
81 * @ORM\Column(type="string", nullable=true)
82 * @var string|null
83 */
84 private $action;
85
86 public function __construct(
87 string $filterType,
88 string $action,
89 array $filterData = []
90 ) {
91 $this->filterType = $filterType;
92 $this->action = $action;
93 $this->filterData = $filterData;
94 }
95
96 public function getData(): ?array {
97 return $this->filterData;
98 }
99
100 /**
101 * @return mixed|null
102 */
103 public function getParam(string $name) {
104 return $this->filterData[$name] ?? null;
105 }
106
107 public function getStringParam(string $name): string {
108 $value = $this->filterData[$name] ?? null;
109 if (!is_string($value)) {
110 throw new InvalidStateException("No string value found in filter data for param $name.");
111 }
112 return $value;
113 }
114
115 public function getIntParam(string $name): int {
116 $value = $this->filterData[$name] ?? null;
117 if (is_int($value)) {
118 return $value;
119 }
120
121 if (is_string($value)) {
122 return (int)($value);
123 }
124
125 throw new InvalidStateException("No compatible integer value found in filter data for param $name.");
126 }
127
128 public function getArrayParam(string $name): array {
129 $value = $this->getParam($name);
130 if (!is_array($value)) {
131 throw new InvalidStateException("No array value found in filter data for param $name.");
132 }
133 return $value;
134 }
135
136 public function getFilterType(): ?string {
137 if ($this->filterType) {
138 return $this->filterType;
139 }
140 // When a new column is empty, we try to get the value from serialized data
141 return $this->filterData['segmentType'] ?? null;
142 }
143
144 public function getAction(): ?string {
145 if ($this->action) {
146 return $this->action;
147 }
148 // When a new column is empty, we try to get the value from serialized data
149 // BC compatibility, the wordpress user role segment didn't have action
150 if ($this->getFilterType() === self::TYPE_USER_ROLE && !isset($this->filterData['action'])) {
151 return UserRole::TYPE;
152 }
153 return $this->filterData['action'] ?? null;
154 }
155
156 public function getOperator(): ?string {
157 $operator = $this->filterData['operator'] ?? null;
158 if (!$operator) {
159 return $this->getDefaultOperator();
160 }
161
162 return $operator;
163 }
164
165 private function getDefaultOperator(): ?string {
166 if ($this->getFilterType() === self::TYPE_WOOCOMMERCE && $this->getAction() === WooCommerceProduct::ACTION_PRODUCT) {
167 return self::OPERATOR_ANY;
168 }
169 return null;
170 }
171 }
172