PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.33.1
MailPoet – Newsletters, Email Marketing, and Automation v5.33.1
5.37.0 5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 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 / FormEntity.php
mailpoet / lib / Entities Last commit date
CustomFieldEntity.php 3 months ago DynamicSegmentFilterData.php 3 months ago DynamicSegmentFilterEntity.php 3 years ago FeatureFlagEntity.php 3 years ago FormEntity.php 1 year ago LogEntity.php 3 years ago NewsletterEntity.php 4 months ago NewsletterLinkEntity.php 3 years ago NewsletterOptionEntity.php 3 years ago NewsletterOptionFieldEntity.php 3 months ago NewsletterPostEntity.php 3 years ago NewsletterSegmentEntity.php 3 years ago NewsletterTemplateEntity.php 3 years ago ScheduledTaskEntity.php 2 months ago ScheduledTaskSubscriberEntity.php 1 year ago SegmentEntity.php 3 months ago SendingQueueEntity.php 4 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 3 months ago StatisticsWooCommercePurchaseEntity.php 2 years ago StatsNotificationEntity.php 3 years ago SubscriberCustomFieldEntity.php 3 years ago SubscriberEntity.php 1 month ago SubscriberIPEntity.php 3 years ago SubscriberSegmentEntity.php 3 years ago SubscriberTagEntity.php 4 years ago TagEntity.php 4 years ago UserAgentEntity.php 3 years ago UserFlagEntity.php 3 years ago WpPostEntity.php 2 years ago index.php 3 years ago
FormEntity.php
222 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Entities;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait;
9 use MailPoet\Doctrine\EntityTraits\CreatedAtTrait;
10 use MailPoet\Doctrine\EntityTraits\DeletedAtTrait;
11 use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait;
12 use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
13
14 /**
15 * @ORM\Entity()
16 * @ORM\Table(name="forms")
17 */
18 class FormEntity {
19 use AutoincrementedIdTrait;
20 use CreatedAtTrait;
21 use UpdatedAtTrait;
22 use DeletedAtTrait;
23
24 const DISPLAY_TYPE_BELOW_POST = 'below_posts';
25 const DISPLAY_TYPE_FIXED_BAR = 'fixed_bar';
26 const DISPLAY_TYPE_POPUP = 'popup';
27 const DISPLAY_TYPE_SLIDE_IN = 'slide_in';
28 const DISPLAY_TYPE_OTHERS = 'others';
29
30 const STATUS_ENABLED = 'enabled';
31 const STATUS_DISABLED = 'disabled';
32
33 const HTML_BLOCK_TYPE = 'html';
34 const HEADING_BLOCK_TYPE = 'heading';
35 const IMAGE_BLOCK_TYPE = 'image';
36 const PARAGRAPH_BLOCK_TYPE = 'paragraph';
37 const DIVIDER_BLOCK_TYPE = 'divider';
38 const CHECKBOX_BLOCK_TYPE = 'checkbox';
39 const RADIO_BLOCK_TYPE = 'radio';
40 const SEGMENT_SELECTION_BLOCK_TYPE = 'segment';
41 const DATE_BLOCK_TYPE = 'date';
42 const SELECT_BLOCK_TYPE = 'select';
43 const TEXT_BLOCK_TYPE = 'text';
44 const TEXTAREA_BLOCK_TYPE = 'textarea';
45 const SUBMIT_BLOCK_TYPE = 'submit';
46 const COLUMNS_BLOCK_TYPE = 'columns';
47 const COLUMN_BLOCK_TYPE = 'column';
48
49 public const FORM_DISPLAY_TYPES = [
50 self::DISPLAY_TYPE_BELOW_POST,
51 self::DISPLAY_TYPE_FIXED_BAR,
52 self::DISPLAY_TYPE_POPUP,
53 self::DISPLAY_TYPE_SLIDE_IN,
54 self::DISPLAY_TYPE_OTHERS,
55 ];
56
57 public const FORM_FIELD_TYPES = [
58 self::CHECKBOX_BLOCK_TYPE,
59 self::RADIO_BLOCK_TYPE,
60 self::SEGMENT_SELECTION_BLOCK_TYPE,
61 self::DATE_BLOCK_TYPE,
62 self::SELECT_BLOCK_TYPE,
63 self::TEXT_BLOCK_TYPE,
64 self::TEXTAREA_BLOCK_TYPE,
65 ];
66
67 /**
68 * @ORM\Column(type="string")
69 * @var string
70 */
71 private $name;
72
73 /**
74 * @ORM\Column(type="serialized_array")
75 * @var array|null
76 */
77 private $body;
78
79 /**
80 * @ORM\Column(type="string")
81 * @var string
82 */
83 private $status;
84
85 /**
86 * @ORM\Column(type="serialized_array")
87 * @var array|null
88 */
89 private $settings;
90
91 /**
92 * @ORM\Column(type="string", nullable=true)
93 * @var string|null
94 */
95 private $styles;
96
97 public function __construct(
98 $name
99 ) {
100 $this->name = $name;
101 $this->status = self::STATUS_ENABLED;
102 }
103
104 /**
105 * @return string
106 */
107 public function getName() {
108 return $this->name;
109 }
110
111 /**
112 * @return array|null
113 */
114 public function getBody() {
115 return $this->body;
116 }
117
118 /**
119 * @return array|null
120 */
121 public function getSettings() {
122 return $this->settings;
123 }
124
125 /**
126 * @return string|null
127 */
128 public function getStyles() {
129 return $this->styles;
130 }
131
132 /**
133 * @param string $name
134 */
135 public function setName($name) {
136 $this->name = $name;
137 }
138
139 /**
140 * @param array|null $body
141 */
142 public function setBody($body) {
143 $this->body = $body;
144 }
145
146 /**
147 * @param array|null $settings
148 */
149 public function setSettings($settings) {
150 $this->settings = $settings;
151 }
152
153 /**
154 * @param string|null $styles
155 */
156 public function setStyles($styles) {
157 $this->styles = $styles;
158 }
159
160 /**
161 * @param string $status
162 */
163 public function setStatus(string $status) {
164 $this->status = $status;
165 }
166
167 /**
168 * @return string
169 */
170 public function getStatus(): string {
171 return $this->status;
172 }
173
174 public function toArray(): array {
175 return [
176 'id' => $this->getId(),
177 'name' => $this->getName(),
178 'body' => $this->getBody(),
179 'settings' => $this->getSettings(),
180 'styles' => $this->getStyles(),
181 'status' => $this->getStatus(),
182 'created_at' => $this->getCreatedAt(),
183 'updated_at' => $this->getUpdatedAt(),
184 'deleted_at' => $this->getDeletedAt(),
185 ];
186 }
187
188 public function getBlocksByTypes(array $types, ?array $blocks = null): array {
189 $found = [];
190 if ($blocks === null) {
191 $blocks = $this->getBody() ?? [];
192 }
193 foreach ($blocks as $block) {
194 if (isset($block['type']) && in_array($block['type'], $types, true)) {
195 $found[] = $block;
196 }
197 if (isset($block['body']) && is_array($block['body']) && !empty($block['body'])) {
198 $found = array_merge($found, $this->getBlocksByTypes($types, $block['body']));
199 }
200 }
201 return $found;
202 }
203
204 public function getSegmentBlocksSegmentIds(): array {
205 $listSelectionBlocks = $this->getBlocksByTypes([FormEntity::SEGMENT_SELECTION_BLOCK_TYPE]);
206 $listSelection = [];
207 foreach ($listSelectionBlocks as $listSelectionBlock) {
208 $listSelection = array_unique(
209 array_merge(
210 $listSelection,
211 array_column($listSelectionBlock['params']['values'] ?? [], 'id')
212 )
213 );
214 }
215 return $listSelection;
216 }
217
218 public function getSettingsSegmentIds(): array {
219 return $this->settings['segments'] ?? [];
220 }
221 }
222