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 / Form / Renderer.php
mailpoet / lib / Form Last commit date
Block 1 week ago Listing 1 month ago RestApi 1 month ago Templates 2 years ago Util 2 months ago ApiDataSanitizer.php 2 weeks ago AssetsController.php 2 months ago BlockStylesRenderer.php 3 years ago BlockWrapperRenderer.php 3 years ago BlocksRenderer.php 1 week ago DisplayFormInWPContent.php 2 months ago FormHtmlSanitizer.php 1 month ago FormMessageController.php 4 years ago FormSaveController.php 1 year ago FormsRepository.php 1 year ago PreviewPage.php 2 months ago PreviewWidget.php 1 year ago Renderer.php 2 months ago Widget.php 2 months ago index.php 3 years ago
Renderer.php
148 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\Captcha\CaptchaConstants;
9 use MailPoet\Entities\FormEntity;
10 use MailPoet\Form\Templates\FormTemplate;
11 use MailPoet\Form\Util\CustomFonts;
12 use MailPoet\Form\Util\Styles;
13 use MailPoet\Settings\SettingsController;
14
15 class Renderer {
16 /** @var Styles */
17 private $styleUtils;
18
19 /** @var SettingsController */
20 private $settings;
21
22 /** @var BlocksRenderer */
23 private $blocksRenderer;
24
25 /** @var CustomFonts */
26 private $customFonts;
27
28 public function __construct(
29 Styles $styleUtils,
30 SettingsController $settings,
31 CustomFonts $customFonts,
32 BlocksRenderer $blocksRenderer
33 ) {
34 $this->styleUtils = $styleUtils;
35 $this->settings = $settings;
36 $this->blocksRenderer = $blocksRenderer;
37 $this->customFonts = $customFonts;
38 }
39
40 public function renderStyles(FormEntity $form, string $prefix, string $displayType): string {
41 $this->customFonts->enqueueStyle();
42 $html = $this->styleUtils->prefixStyles($this->getCustomStyles($form), $prefix);
43 $html .= strip_tags($this->styleUtils->renderFormSettingsStyles($form, $prefix, $displayType));
44 return $html;
45 }
46
47 public function renderHTML(?FormEntity $form = null): string {
48 if (($form instanceof FormEntity) && !empty($form->getBody()) && is_array($form->getSettings())) {
49 return $this->renderBlocks($form->getBody(), $form->getSettings(), $form->getId());
50 }
51 return '';
52 }
53
54 public function getCustomStyles(?FormEntity $form = null): string {
55 if (($form instanceof FormEntity) && (strlen(trim($form->getStyles() ?? '')) > 0)) {
56 return strip_tags($form->getStyles() ?? '');
57 } else {
58 return FormTemplate::DEFAULT_STYLES;
59 }
60 }
61
62 public function renderBlocks(
63 array $blocks = [],
64 array $formSettings = [],
65 ?int $formId = null,
66 bool $honeypotEnabled = true,
67 bool $captchaEnabled = true
68 ): string {
69 // add honeypot for spambots
70 $html = ($honeypotEnabled) ? $this->renderHoneypot() : '';
71 foreach ($blocks as $key => $block) {
72 if (
73 $captchaEnabled
74 && $block['type'] === FormEntity::SUBMIT_BLOCK_TYPE
75 ) {
76 $html .= $this->renderCaptcha();
77 }
78 if (in_array($block['type'], [FormEntity::COLUMN_BLOCK_TYPE, FormEntity::COLUMNS_BLOCK_TYPE])) {
79 $blocks = $block['body'] ?? [];
80 $html .= $this->blocksRenderer->renderContainerBlock($block, $this->renderBlocks($blocks, $formSettings, $formId, false)) . PHP_EOL;
81 } else {
82 $html .= $this->blocksRenderer->renderBlock($block, $formSettings, $formId) . PHP_EOL;
83 }
84 }
85 return $html;
86 }
87
88 private function renderHoneypot(): string {
89 return '<label class="mailpoet_hp_email_label" style="display: none !important;">' . __('Please leave this field empty', 'mailpoet') . '<input type="email" name="data[email]"/></label>';
90 }
91
92 private function renderCaptcha(): string {
93 $type = $this->settings->get('captcha.type');
94 if (CaptchaConstants::isReCaptcha($type)) {
95 return $this->renderReCaptcha();
96 }
97 if (CaptchaConstants::isTurnstile($type)) {
98 return $this->renderTurnstile();
99 }
100 return '';
101 }
102
103 private function renderReCaptcha(): string {
104 if ($this->settings->get('captcha.type') === CaptchaConstants::TYPE_RECAPTCHA) {
105 $siteKey = (string)$this->settings->get('captcha.recaptcha_site_token');
106 $size = '';
107 } else {
108 $siteKey = (string)$this->settings->get('captcha.recaptcha_invisible_site_token');
109 $size = 'invisible';
110 }
111 $siteKeyAttr = esc_attr($siteKey);
112 $fallbackUrl = esc_url('https://www.google.com/recaptcha/api/fallback?k=' . $siteKey);
113
114 $html = '<div class="mailpoet_recaptcha" data-sitekey="' . $siteKeyAttr . '" ' . ($size === 'invisible' ? 'data-size="invisible"' : '') . '>
115 <div class="mailpoet_recaptcha_container"></div>
116 <noscript>
117 <div>
118 <div class="mailpoet_recaptcha_noscript_container">
119 <div>
120 <iframe src="' . $fallbackUrl . '" frameborder="0" scrolling="no">
121 </iframe>
122 </div>
123 </div>
124 <div class="mailpoet_recaptcha_noscript_input">
125 <textarea id="g-recaptcha-response" name="data[recaptcha]" class="g-recaptcha-response">
126 </textarea>
127 </div>
128 </div>
129 </noscript>
130 <input class="mailpoet_recaptcha_field" type="hidden" name="recaptchaWidgetId">
131 </div>';
132 if ($size !== 'invisible') {
133 $html .= '<div class="parsley-errors-list parsley-required mailpoet_error_recaptcha">' . __('This field is required.', 'mailpoet') . '</div>';
134 }
135
136 return $html;
137 }
138
139 private function renderTurnstile(): string {
140 $siteKey = esc_attr((string)$this->settings->get('captcha.turnstile_site_token'));
141
142 return '<div class="mailpoet_turnstile" data-sitekey="' . $siteKey . '">
143 <div class="mailpoet_turnstile_container"></div>
144 <input class="mailpoet_turnstile_field" type="hidden" name="turnstileWidgetId">
145 </div>';
146 }
147 }
148