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

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

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