PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 / Form / BlocksRenderer.php
mailpoet / lib / Form Last commit date
Block 1 month ago Listing 1 month ago RestApi 1 month ago Templates 3 weeks ago Util 3 weeks ago ApiDataSanitizer.php 1 month ago AssetsController.php 3 weeks ago BlockStylesRenderer.php 3 years ago BlockWrapperRenderer.php 3 years ago BlocksRenderer.php 1 day ago DisplayFormInWPContent.php 3 months ago FormHtmlSanitizer.php 1 month ago FormMessageController.php 4 years ago FormSaveController.php 1 year ago FormsRepository.php 1 year ago PreviewPage.php 3 months ago PreviewWidget.php 1 year ago Renderer.php 3 months ago Widget.php 3 months ago index.php 3 years ago
BlocksRenderer.php
226 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Form;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Entities\FormEntity;
9 use MailPoet\Entities\SubscriberEntity;
10 use MailPoet\Form\Block\Checkbox;
11 use MailPoet\Form\Block\Close;
12 use MailPoet\Form\Block\Column;
13 use MailPoet\Form\Block\Columns;
14 use MailPoet\Form\Block\Date;
15 use MailPoet\Form\Block\Divider;
16 use MailPoet\Form\Block\Heading;
17 use MailPoet\Form\Block\Html;
18 use MailPoet\Form\Block\Image;
19 use MailPoet\Form\Block\Paragraph;
20 use MailPoet\Form\Block\Radio;
21 use MailPoet\Form\Block\Segment;
22 use MailPoet\Form\Block\Select;
23 use MailPoet\Form\Block\Submit;
24 use MailPoet\Form\Block\Text;
25 use MailPoet\Form\Block\Textarea;
26 use MailPoet\Subscribers\TrackingConsentCapture;
27 use MailPoet\Util\Security;
28
29 class BlocksRenderer {
30 /** @var Checkbox */
31 private $checkbox;
32
33 /** @var Close */
34 private $close;
35
36 /** @var Date */
37 private $date;
38
39 /** @var Divider */
40 private $divider;
41
42 /** @var Html */
43 private $html;
44
45 /** @var Image */
46 private $image;
47
48 /** @var Radio */
49 private $radio;
50
51 /** @var Segment */
52 private $segment;
53
54 /** @var Select */
55 private $select;
56
57 /** @var Submit */
58 private $submit;
59
60 /** @var Text */
61 private $text;
62
63 /** @var Textarea */
64 private $textarea;
65
66 /** @var Column */
67 private $column;
68
69 /** @var Columns */
70 private $columns;
71
72 /** @var Heading */
73 private $heading;
74
75 /** @var Paragraph */
76 private $paragraph;
77
78 /** @var TrackingConsentCapture */
79 private $trackingConsentCapture;
80
81 public function __construct(
82 Checkbox $checkbox,
83 Close $close,
84 Column $column,
85 Columns $columns,
86 Date $date,
87 Divider $divider,
88 Html $html,
89 Image $image,
90 Heading $heading,
91 Paragraph $paragraph,
92 Radio $radio,
93 Segment $segment,
94 Select $select,
95 Submit $submit,
96 Text $text,
97 Textarea $textarea,
98 TrackingConsentCapture $trackingConsentCapture
99 ) {
100 $this->checkbox = $checkbox;
101 $this->close = $close;
102 $this->column = $column;
103 $this->columns = $columns;
104 $this->date = $date;
105 $this->divider = $divider;
106 $this->html = $html;
107 $this->image = $image;
108 $this->radio = $radio;
109 $this->segment = $segment;
110 $this->select = $select;
111 $this->submit = $submit;
112 $this->text = $text;
113 $this->textarea = $textarea;
114 $this->heading = $heading;
115 $this->paragraph = $paragraph;
116 $this->trackingConsentCapture = $trackingConsentCapture;
117 }
118
119 public function renderBlock(array $block, array $formSettings, ?int $formId): string {
120 $html = '';
121 // A tracking-consent checkbox is recipient-facing, so it only appears on
122 // sites that chose to ask. On a site that tracks everyone without asking,
123 // a block a merchant placed deliberately still renders nothing.
124 if (($block['id'] ?? null) === TrackingConsentCapture::FIELD_ID) {
125 if (!$this->trackingConsentCapture->isCaptureEnabled()) {
126 return $html;
127 }
128 $block = $this->withResolvedConsentCopy($block);
129 }
130 if ($formId) {
131 $formSettings['id'] = $formId;
132 }
133 // This is used to properly show validation message when
134 // the same form is rendered on a page multiple times
135 $block['validation_id'] = Security::generateRandomString();
136 switch ($block['type']) {
137 case FormEntity::HTML_BLOCK_TYPE:
138 $html .= $this->html->render($block, $formSettings);
139 break;
140
141 case FormEntity::HEADING_BLOCK_TYPE:
142 $html .= $this->heading->render($block);
143 break;
144
145 case FormEntity::IMAGE_BLOCK_TYPE:
146 $html .= $this->image->render($block);
147 break;
148
149 case FormEntity::PARAGRAPH_BLOCK_TYPE:
150 $html .= $this->paragraph->render($block);
151 break;
152
153 case FormEntity::DIVIDER_BLOCK_TYPE:
154 $html .= $this->divider->render($block);
155 break;
156
157 case FormEntity::CHECKBOX_BLOCK_TYPE:
158 $html .= $this->checkbox->render($block, $formSettings, $formId);
159 break;
160
161 case FormEntity::RADIO_BLOCK_TYPE:
162 $html .= $this->radio->render($block, $formSettings, $formId);
163 break;
164
165 case FormEntity::SEGMENT_SELECTION_BLOCK_TYPE:
166 $html .= $this->segment->render($block, $formSettings, $formId);
167 break;
168
169 case FormEntity::DATE_BLOCK_TYPE:
170 $html .= $this->date->render($block, $formSettings, $formId);
171 break;
172
173 case FormEntity::SELECT_BLOCK_TYPE:
174 $html .= $this->select->render($block, $formSettings, $formId);
175 break;
176
177 case FormEntity::TEXT_BLOCK_TYPE:
178 $html .= $this->text->render($block, $formSettings, $formId);
179 break;
180
181 case FormEntity::TEXTAREA_BLOCK_TYPE:
182 $html .= $this->textarea->render($block, $formSettings, $formId);
183 break;
184
185 case FormEntity::SUBMIT_BLOCK_TYPE:
186 $html .= $this->submit->render($block, $formSettings);
187 break;
188
189 case FormEntity::CLOSE_BLOCK_TYPE:
190 $html .= $this->close->render($block, $formSettings);
191 break;
192 }
193 return $html;
194 }
195
196 /**
197 * Replaces the consent block's stored wording with the wording that will
198 * actually be recorded as proof. The subscriber must see exactly the sentence
199 * we file against their consent, so the blank fallback and the
200 * mailpoet_tracking_consent_copy filter have to reach the rendered label too,
201 * not only SubscriberSubscribeController's record of it.
202 */
203 private function withResolvedConsentCopy(array $block): array {
204 $stored = $block['params']['values'][0]['value'] ?? null;
205 $block['params']['values'][0]['value'] = $this->trackingConsentCapture->getCopy(
206 SubscriberEntity::TRACKING_CONSENT_METHOD_FORM,
207 is_string($stored) ? $stored : null
208 );
209 return $block;
210 }
211
212 public function renderContainerBlock(array $block, string $content) {
213 $html = '';
214 switch ($block['type']) {
215 case FormEntity::COLUMNS_BLOCK_TYPE:
216 $html .= $this->columns->render($block, $content);
217 break;
218
219 case FormEntity::COLUMN_BLOCK_TYPE:
220 $html .= $this->column->render($block, $content);
221 break;
222 }
223 return $html;
224 }
225 }
226