PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.14
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.14
6.2.14 6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 All 196 releases
← All changes | app/Services/FormBuilder/Components/Address.php +146 -31 3.6.516.2.14 View file →
@@ -1,65 +1,180 @@
1 1 <?php
2 2
3 3 namespace FluentForm\App\Services\FormBuilder\Components;
4 4
5 +use FluentForm\App\Helpers\Helper;
6 +use FluentForm\Framework\Helpers\ArrayHelper;
7 +
5 8 class Address extends BaseComponent
6 9 {
7 10 /**
8 11 * Wrapper class for address element
12 + *
9 13 * @var string
10 14 */
11 - protected $wrapperClass = 'fluent-address';
15 + protected $wrapperClass = 'fluent-address';
12 16
13 17 /**
14 18 * Compile and echo the html element
15 - * @param array $data [element data]
16 - * @param stdClass $form [Form Object]
17 - * @return viod
19 + *
20 + * @param array $data [element data]
21 + * @param \stdClass $form [Form Object]
22 + *
23 + * @return void
18 24 */
19 - public function compile($data, $form)
20 - {
25 + public function compile($data, $form)
26 + {
21 27 $elementName = $data['element'];
22 - $data = apply_filters('fluenform_rendering_field_data_'.$elementName, $data, $form);
28 + $data = apply_filters('fluentform/rendering_field_data_' . $elementName, $data, $form);
23 29
24 30 $rootName = $data['attributes']['name'];
25 - $hasConditions = $this->hasConditions($data) ? 'has-conditions ' : '';
26 - $data['attributes']['class'] .= ' ff-name-address-wrapper ' . $this->wrapperClass . ' ' . $hasConditions;
27 - $data['attributes']['class'] = trim($data['attributes']['class']);
28 - $atts = $this->buildAttributes(
29 - \FluentForm\Framework\Helpers\ArrayHelper::except($data['attributes'], 'name')
31 + $hasConditions = $this->hasConditions($data) ? 'has-conditions ' : '';
32 + $data['attributes']['class'] = trim(
33 + ArrayHelper::get($data, 'attributes.class', '')
34 + . ' ff-name-address-wrapper ' . $this->wrapperClass . ' ' . $hasConditions
30 35 );
31 - ob_start();
32 - echo "<div {$atts}>";
33 - if($data['settings']['label']):
34 - echo "<div class='ff-el-input--label'>";
35 - echo "<label>{$data['settings']['label']}</label>";
36 - echo "</div>";
37 - endif;
38 - echo "<div class='ff-el-input--content'>";
39 36
40 - $visibleFields = array_chunk(array_filter($data['fields'], function($field) {
37 + $provider = ArrayHelper::get($data, 'settings.autocomplete_provider');
38 + $legacyGoogleEnable = ArrayHelper::get($data, 'settings.enable_g_autocomplete', 'no') === 'yes';
39 + $isLegacyProvider = !ArrayHelper::has($data, 'settings.autocomplete_provider');
40 + // Render coordinate fields if Pro is active and coordinate saving is enabled
41 + if (Helper::hasPro() && 'yes' == ArrayHelper::get($data, 'settings.save_coordinates')) {
42 + $coordinateFields = [
43 + 'latitude' => $rootName . '[latitude]',
44 + 'longitude' => $rootName . '[longitude]'
45 + ];
46 +
47 + $textComponent = new \FluentForm\App\Services\FormBuilder\Components\Text();
48 +
49 + foreach ($coordinateFields as $type => $fieldName) {
50 + $fieldConfig = [
51 + 'attributes' => [
52 + 'name' => $fieldName,
53 + 'type' => 'hidden',
54 + 'data-key_name' => $type,
55 + ],
56 + 'element' => 'input_hidden'
57 + ];
58 +
59 + $textComponent->compile($fieldConfig, $form);
60 + }
61 + }
62 +
63 + if ($provider === 'google' || ($isLegacyProvider && $legacyGoogleEnable)) {
64 + $data['attributes']['class'] .= ' ff_map_autocomplete';
65 + $data['attributes']['data-ff_with_g_map'] = ArrayHelper::get($data, 'settings.enable_g_map', 'no') === 'yes' ? '1' : '';
66 + $data['attributes']['data-ff_with_auto_locate'] = ArrayHelper::get($data, 'settings.enable_auto_locate', false);
67 + do_action('fluentform/address_map_autocomplete', $data, $form);
68 + } elseif ($provider === 'html5') {
69 + $data['attributes']['class'] .= ' ff_html5_geolocate';
70 + $data['attributes']['data-ff_html5_locate'] = ArrayHelper::get($data, 'settings.enable_auto_locate', 'on_click');
71 + $data['attributes']['data-name'] = $data['attributes']['name'];
72 + do_action('fluentform/address_map_autocomplete', $data, $form);
73 + }
74 +
75 + $atts = $this->buildAttributes(
76 + ArrayHelper::except($data['attributes'], 'name')
77 + );
78 +
79 + //re order fields from version 4.3.2
80 + if ($order = ArrayHelper::get($data, 'settings.field_order')) {
81 + $order = array_values(array_column($order, 'value'));
82 + $fields = ArrayHelper::get($data, 'fields');
83 + $data['fields'] = array_merge(array_flip($order), $fields);
84 + }
85 + ob_start();
86 + echo '<div ' . $atts . '>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- $atts is escaped before being passed in.
87 + do_action_deprecated(
88 + 'fluentform_rendering_address_field',
89 + [
90 + $data,
91 + $form
92 + ],
93 + FLUENTFORM_FRAMEWORK_UPGRADE,
94 + 'fluentform/rendering_address_field',
95 + 'Use fluentform/rendering_address_field instead of fluentform_rendering_address_field.'
96 + );
97 + do_action('fluentform/rendering_address_field', $data, $form);
98 + if ($label = $data['settings']['label']):
99 + echo "<div class='ff-el-input--label'>";
100 + echo '<label aria-label="'.esc_attr($this->removeShortcode($label)).'">' . fluentform_sanitize_html($data['settings']['label']) . '</label>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- fluentform_sanitize_html escaped
101 + echo '</div>';
102 + endif;
103 + echo "<div class='ff-el-input--content'>";
104 +
105 + $visibleFields = array_chunk(array_filter($data['fields'], function ($field) {
41 106 return $field['settings']['visible'];
42 107 }), 2);
108 +
43 109
110 + $googleAutoComplete = 'yes' === ArrayHelper::get($data, 'settings.enable_g_autocomplete');
44 111 foreach ($visibleFields as $chunked) {
45 112 echo "<div class='ff-t-container'>";
46 113 foreach ($chunked as $item) {
47 - if($item['settings']['visible']) {
114 + if ($item['settings']['visible']) {
48 115 $itemName = $item['attributes']['name'];
49 - $item['attributes']['name'] = $rootName.'['.$itemName.']';
50 - $item = apply_filters('fluentform_before_render_item', $item, $form);
116 + $item['attributes']['data-key_name'] = $itemName;
117 + $item['attributes']['name'] = $rootName . '[' . $itemName . ']';
118 +
119 + if ('select_country' === $item['element'] && $googleAutoComplete) {
120 + $selectedCountries = (array) ArrayHelper::get($item, 'attributes.value', []);
121 + if ('visible_list' === ArrayHelper::get($item, 'settings.country_list.active_list')) {
122 + $selectedCountries = array_unique(
123 + array_merge(
124 + $selectedCountries,
125 + ArrayHelper::get($item, 'settings.country_list.visible_list', [])
126 + )
127 + );
128 + }
129 + $item['attributes']['data-autocomplete_restrictions'] = json_encode(array_filter($selectedCountries));
130 + }
131 +
132 + $item = apply_filters_deprecated(
133 + 'fluentform_before_render_item',
134 + [
135 + $item,
136 + $form
137 + ],
138 + FLUENTFORM_FRAMEWORK_UPGRADE,
139 + 'fluentform/before_render_item',
140 + 'Use fluentform/before_render_item instead of fluentform_before_render_item.'
141 + );
142 + $item = apply_filters('fluentform/before_render_item', $item, $form);
51 143 echo "<div class='ff-t-cell'>";
52 - do_action('fluentform_render_item_'.$item['element'], $item, $form);
53 - echo "</div>";
144 + do_action_deprecated(
145 + 'fluentform_render_item_' . $item['element'],
146 + [
147 + $item,
148 + $form
149 + ],
150 + FLUENTFORM_FRAMEWORK_UPGRADE,
151 + 'fluentform/render_item_' . $item['element'],
152 + 'Use fluentform/render_item_' . $item['element'] . ' instead of fluentform_render_item_' . $item['element']
153 + );
154 + do_action('fluentform/render_item_' . $item['element'], $item, $form);
155 + echo '</div>';
54 156 }
55 157 }
56 - echo "</div>";
158 + echo '</div>';
57 159 }
58 160
59 - echo "</div>";
60 - echo "</div>";
161 + echo '</div>';
162 + echo '</div>';
61 163
62 - $html = ob_get_clean();
63 - echo apply_filters('fluenform_rendering_field_html_'.$elementName, $html, $data, $form);
164 + $html = ob_get_clean();
165 +
166 + $html = apply_filters_deprecated(
167 + 'fluentform_rendering_field_html_' . $elementName,
168 + [
169 + $html,
170 + $data,
171 + $form
172 + ],
173 + FLUENTFORM_FRAMEWORK_UPGRADE,
174 + 'fluentform/rendering_field_html_' . $elementName,
175 + 'Use fluentform/rendering_field_html_' . $elementName . ' instead of fluentform/rendering_field_html_' . $elementName
176 + );
177 +
178 + $this->printContent('fluentform/rendering_field_html_' . $elementName, $html, $data, $form);
64 179 }
65 180 }