PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.34.2
MailPoet – Newsletters, Email Marketing, and Automation v5.34.2
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 / Block / Select.php
mailpoet / lib / Form / Block Last commit date
BlockRendererHelper.php 3 weeks ago Checkbox.php 1 year ago Close.php 2 weeks ago Column.php 2 months ago Columns.php 2 months ago Date.php 1 year ago Divider.php 3 years ago Heading.php 2 months ago Html.php 1 year ago Image.php 10 months ago Paragraph.php 3 weeks ago Radio.php 1 year ago Segment.php 2 months ago Select.php 2 months ago Submit.php 1 year ago Text.php 1 year ago Textarea.php 1 year ago index.php 3 years ago
Select.php
143 lines
1 <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing
2
3 namespace MailPoet\Form\Block;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Form\BlockStylesRenderer;
9 use MailPoet\Form\BlockWrapperRenderer;
10 use MailPoet\WP\Functions as WPFunctions;
11
12 class Select {
13
14 /** @var BlockRendererHelper */
15 private $rendererHelper;
16
17 /** @var WPFunctions */
18 private $wp;
19
20 /** @var BlockWrapperRenderer */
21 private $wrapper;
22
23 /** @var BlockStylesRenderer */
24 private $blockStylesRenderer;
25
26 public function __construct(
27 BlockRendererHelper $rendererHelper,
28 BlockWrapperRenderer $wrapper,
29 BlockStylesRenderer $blockStylesRenderer,
30 WPFunctions $wp
31 ) {
32 $this->rendererHelper = $rendererHelper;
33 $this->wrapper = $wrapper;
34 $this->wp = $wp;
35 $this->blockStylesRenderer = $blockStylesRenderer;
36 }
37
38 public function render(array $block, array $formSettings, ?int $formId = null): string {
39 $html = '';
40
41 $fieldName = 'data[' . $this->rendererHelper->getFieldName($block) . ']';
42 $automationId = ($block['id'] == 'status') ? ' data-automation-id="form_status"' : '';
43 $inputId = $this->getInputId($block, $formSettings);
44 $descriptionId = $this->getDescriptionId($block, $inputId);
45
46 if ($inputId !== '') {
47 $block['params']['input_id'] = $inputId;
48 }
49
50 $html .= $this->rendererHelper->renderLabel($block, $formSettings);
51 if (!empty($block['params']['description'])) {
52 $html .= '<p class="mailpoet_field_description"';
53 if ($descriptionId !== '') {
54 $html .= ' id="' . $this->wp->escAttr($descriptionId) . '"';
55 }
56 $html .= '>' . $this->wp->escHtml($block['params']['description']) . '</p>';
57 }
58 $html .= '<select
59 class="mailpoet_select"
60 ' . ($inputId !== '' ? 'id="' . $this->wp->escAttr($inputId) . '"' : '') . '
61 name="' . $fieldName . '"'
62 . $automationId
63 . ($descriptionId !== '' ? ' aria-describedby="' . $this->wp->escAttr($descriptionId) . '"' : '')
64 . ' style="' . $this->wp->escAttr($this->blockStylesRenderer->renderForSelect([], $formSettings)) . '"'
65 . '>';
66
67 if (isset($block['params']['label_within']) && $block['params']['label_within']) {
68 $label = $this->rendererHelper->getFieldLabel($block);
69 if (!empty($block['params']['required'])) {
70 $label .= ' *';
71 }
72 $html .= '<option value="" disabled selected hidden>' . $this->wp->escHtml($label) . '</option>';
73 } else {
74 if (empty($block['params']['required'])) {
75 $html .= '<option value="">-</option>';
76 }
77 }
78
79 $options = (!empty($block['params']['values'])
80 ? $block['params']['values']
81 : []
82 );
83
84 foreach ($options as $option) {
85 if (!empty($option['is_hidden'])) {
86 continue;
87 }
88
89 $isSelected = '';
90
91 if ($this->rendererHelper->getFieldValue($block) === $option['value']) {
92 // use selected value if it exist
93 $isSelected = ' selected="selected"';
94 } elseif ((isset($option['is_checked']) && $option['is_checked']) && !($this->rendererHelper->getFieldValue($block))) {
95 // use default value otherwise
96 $isSelected = ' selected="selected"';
97 }
98
99 $isDisabled = (!empty($option['is_disabled'])) ? ' disabled="disabled"' : '';
100
101 if (is_array($option['value'])) {
102 $value = key($option['value']);
103 $label = reset($option['value']);
104 } else {
105 $value = $option['value'];
106 $label = $option['value'];
107 }
108
109 $html .= '<option value="' . $this->wp->escAttr($value) . '"' . $isSelected . $isDisabled . '>';
110 $html .= $this->wp->escAttr($label);
111 $html .= '</option>';
112 }
113 $html .= '</select>';
114
115 $html .= $this->rendererHelper->renderErrorsContainer($block, $formId);
116
117 return $this->wrapper->render($block, $html);
118 }
119
120 private function getInputId(array $block, array $formSettings): string {
121 if (!empty($block['params']['input_id']) && is_scalar($block['params']['input_id'])) {
122 return (string)$block['params']['input_id'];
123 }
124 if (isset($formSettings['id'])) {
125 return 'form_' . (string)$block['id'] . '_' . (string)$formSettings['id'];
126 }
127 return '';
128 }
129
130 private function getDescriptionId(array $block, string $inputId): string {
131 if (empty($block['params']['description'])) {
132 return '';
133 }
134 if (!empty($block['params']['description_id']) && is_scalar($block['params']['description_id'])) {
135 return (string)$block['params']['description_id'];
136 }
137 if ($inputId !== '') {
138 return $inputId . '_description';
139 }
140 return '';
141 }
142 }
143