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

181 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'] = trim(
33 ArrayHelper::get($data, 'attributes.class', '')
34 . ' ff-name-address-wrapper ' . $this->wrapperClass . ' ' . $hasConditions
35 );
36
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) {
106 return $field['settings']['visible'];
107 }), 2);
108
109
110 $googleAutoComplete = 'yes' === ArrayHelper::get($data, 'settings.enable_g_autocomplete');
111 foreach ($visibleFields as $chunked) {
112 echo "<div class='ff-t-container'>";
113 foreach ($chunked as $item) {
114 if ($item['settings']['visible']) {
115 $itemName = $item['attributes']['name'];
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);
143 echo "<div class='ff-t-cell'>";
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>';
156 }
157 }
158 echo '</div>';
159 }
160
161 echo '</div>';
162 echo '</div>';
163
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);
179 }
180 }
181