PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 6.2.15
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v6.2.15
6.2.15 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 All 197 releases
fluentform / app / Services / FormBuilder / Components / Address.php

Address.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 6.2.15, at app/Services/FormBuilder/Components/Address.php

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