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
← All changes | app/Modules/Form/Settings/FormSettings.php +138 -23 3.6.60 → 6.2.15 View file →
@@ -10,8 +10,10 @@
10 10
11 11 class FormSettings
12 12 {
13 13 /**
14 + * Request object
15 + *
14 16 * @var \FluentForm\Framework\Request\Request
15 17 */
16 18 private $request;
17 19
@@ -16,11 +18,8 @@
16 18 private $request;
17 19
18 20 private $app;
19 21
20 - /**
21 - * @var int form ID.
22 - */
23 22 private $formId;
24 23
25 24 /**
26 25 * The settings (fluentform_form_meta) query builder.
@@ -30,8 +29,9 @@
30 29 private $settingsQuery;
31 30
32 31 /**
33 32 * Construct the object
33 + *
34 34 * @throws \Exception
35 35 */
36 36 public function __construct(Application $application)
37 37 {
@@ -44,9 +44,8 @@
44 44 }
45 45
46 46 /**
47 47 * Get settings for a particular form by id
48 - * @return void
49 48 */
50 49 public function index()
51 50 {
52 51 $metaKey = sanitize_text_field($this->request->get('meta_key'));
@@ -61,10 +60,10 @@
61 60 $result = $query->get();
62 61
63 62 foreach ($result as $item) {
64 63 $item->value = json_decode($item->value, true);
65 - if($metaKey == 'notifications') {
66 - if(!$item->value) {
64 + if ('notifications' == $metaKey) {
65 + if (!$item->value) {
67 66 $item->value = ['name' => ''];
68 67 }
69 68 }
70 69 if (isset($item->value['layout']) && !isset($item->value['layout']['asteriskPlacement'])) {
@@ -70,24 +69,47 @@
70 69 if (isset($item->value['layout']) && !isset($item->value['layout']['asteriskPlacement'])) {
71 70 $item->value['layout']['asteriskPlacement'] = 'asterisk-right';
72 71 }
73 72 }
73 +
74 + $result = apply_filters_deprecated(
75 + 'fluentform_get_meta_key_settings_response',
76 + [
77 + $result,
78 + $this->formId,
79 + $metaKey
80 + ],
81 + FLUENTFORM_FRAMEWORK_UPGRADE,
82 + 'fluentform/get_meta_key_settings_response',
83 + 'Use fluentform/get_meta_key_settings_response instead of fluentform_get_meta_key_settings_response.'
84 + );
74 85
86 + $result = $this->app->applyFilters('fluentform/get_meta_key_settings_response', $result, $this->formId, $metaKey);
75 87 wp_send_json_success(['result' => $result], 200);
76 88 }
77 89
78 -
79 90 public function getGeneralSettingsAjax()
80 91 {
81 92 $formId = intval($this->request->get('form_id'));
82 93 $form = new Form($this->app);
83 94 $settings = [
84 - 'generalSettings' => $form->getFormsDefaultSettings($formId),
85 - 'advancedValidationSettings' => $form->getAdvancedValidationSettings($formId)
95 + 'generalSettings' => $form->getFormsDefaultSettings($formId),
96 + 'advancedValidationSettings' => $form->getAdvancedValidationSettings($formId),
86 97 ];
87 98
88 - $settings = apply_filters('fluentform_form_settings_ajax', $settings, $formId);
99 + $settings = apply_filters_deprecated(
100 + 'fluentform_form_settings_ajax',
101 + [
102 + $settings,
103 + $formId
104 + ],
105 + FLUENTFORM_FRAMEWORK_UPGRADE,
106 + 'fluentform/form_settings_ajax',
107 + 'Use fluentform/form_settings_ajax instead of fluentform_form_settings_ajax.'
108 + );
89 109
110 + $settings = $this->app->applyFilters('fluentform/form_settings_ajax', $settings, $formId);
111 +
90 112 wp_send_json_success($settings, 200);
91 113 }
92 114
93 115 public function saveGeneralSettingsAjax()
@@ -94,9 +116,48 @@
94 116 {
95 117 $formId = intval($this->request->get('form_id'));
96 118 $form = new Form($this->app);
97 119 $formSettings = \json_decode($this->request->get('formSettings'), true);
120 +
121 + $sanitizerMap = [
122 + 'redirectTo' => 'sanitize_text_field',
123 + 'redirectMessage' => 'fluentform_sanitize_html',
124 + 'messageToShow' => 'fluentform_sanitize_html',
125 + 'customPage' => 'sanitize_text_field',
126 + 'samePageFormBehavior' => 'sanitize_text_field',
127 + 'customUrl' => 'sanitize_url',
128 + 'enabled' => 'rest_sanitize_boolean',
129 + 'numberOfEntries' => 'intval',
130 + 'period' => 'sanitize_text_field',
131 + 'limitReachedMsg' => 'sanitize_text_field',
132 + 'start' => 'sanitize_text_field',
133 + 'end' => 'sanitize_text_field',
134 + 'pendingMsg' => 'sanitize_text_field',
135 + 'expiredMsg' => 'sanitize_text_field',
136 + 'requireLoginMsg' => 'sanitize_text_field',
137 + 'message' => 'sanitize_text_field',
138 + 'labelPlacement' => 'sanitize_text_field',
139 + 'helpMessagePlacement' => 'sanitize_text_field',
140 + 'errorMessagePlacement' => 'sanitize_text_field',
141 + 'asteriskPlacement' => 'sanitize_text_field',
142 + 'delete_entry_on_submission' => 'sanitize_text_field',
143 + 'id' => 'intval',
144 + 'showLabel' => 'rest_sanitize_boolean',
145 + 'showCount' => 'rest_sanitize_boolean',
146 + 'status' => 'rest_sanitize_boolean',
147 + 'type' => 'sanitize_text_field',
148 + 'field' => 'sanitize_text_field',
149 + 'operator' => 'sanitize_text_field',
150 + 'value' => 'sanitize_text_field',
151 + 'error_message' => 'sanitize_text_field',
152 + 'validation_type' => 'sanitize_text_field',
153 + 'conv_form_per_step_save' => 'rest_sanitize_boolean',
154 + 'conv_form_resume_from_last_step' => 'rest_sanitize_boolean',
155 + ];
156 + $formSettings = $this->sanitizeData($formSettings, $sanitizerMap);
157 +
98 158 $advancedValidationSettings = \json_decode($this->request->get('advancedValidationSettings'), true);
159 + $advancedValidationSettings = $this->sanitizeData($advancedValidationSettings, $sanitizerMap);
99 160
100 161 Validator::validate(
101 162 'confirmations',
102 163 ArrayHelper::get($formSettings, 'confirmation', [])
@@ -104,14 +165,36 @@
104 165
105 166 $form->updateMeta($formId, 'formSettings', $formSettings);
106 167 $form->updateMeta($formId, 'advancedValidationSettings', $advancedValidationSettings);
107 168
108 - do_action('fluentform_after_save_form_settings', $formId, $this->request->all());
169 + $deleteAfterXDaysStatus = ArrayHelper::get($formSettings, 'delete_after_x_days');
170 + $deleteDaysCount = ArrayHelper::get($formSettings, 'auto_delete_days');
171 + $deleteOnSubmission = ArrayHelper::get($formSettings, 'delete_entry_on_submission');
109 172
173 + if ('yes' != $deleteOnSubmission && $deleteDaysCount && 'yes' == $deleteAfterXDaysStatus) {
174 + // We have to set meta values
175 + $form->updateMeta($formId, 'auto_delete_days', intval($deleteDaysCount));
176 + } else {
177 + // we have to delete meta values
178 + $form->deleteMeta($formId, 'auto_delete_days');
179 + }
180 +
181 + do_action_deprecated(
182 + 'fluentform_after_save_form_settings',
183 + [
184 + $formId,
185 + $this->request->all()
186 + ],
187 + FLUENTFORM_FRAMEWORK_UPGRADE,
188 + 'fluentform/after_save_form_settings',
189 + 'Use fluentform/after_save_form_settings instead of fluentform_after_save_form_settings.'
190 + );
191 +
192 + $this->app->doAction('fluentform/after_save_form_settings', $formId, $this->request->all());
193 +
110 194 wp_send_json_success([
111 - 'message' => __('Settings has been saved.', 'fluentform')
195 + 'message' => __('Settings has been saved.', 'fluentform'),
112 196 ], 200);
113 -
114 197 }
115 198
116 199 /**
117 200 * Save settings/meta for a form in database
@@ -123,22 +206,47 @@
123 206 $valueArray = $value ? json_decode($value, true) : [];
124 207
125 208 $key = sanitize_text_field($this->request->get('meta_key'));
126 209
127 - if ($key == 'formSettings') {
210 + if ('formSettings' == $key) {
128 211 Validator::validate(
129 - 'confirmations', ArrayHelper::get(
130 - $valueArray, 'confirmation', []
131 - )
212 + 'confirmations',
213 + ArrayHelper::get(
214 + $valueArray,
215 + 'confirmation',
216 + []
217 + )
132 218 );
133 219 } else {
134 220 Validator::validate($key, $valueArray);
135 221 }
222 + $sanitizerMap = [
223 + 'name' => 'sanitize_text_field',
224 + 'field' => 'sanitize_text_field',
225 + 'email' => 'sanitize_text_field',
226 + 'operator' => 'sanitize_text_field',
227 + 'value' => 'sanitize_text_field',
228 + 'fromName' => 'sanitize_text_field',
229 + 'fromEmail' => 'sanitize_text_field',
230 + 'replyTo' => 'sanitize_text_field',
231 + 'bcc' => 'sanitize_text_field',
232 + 'subject' => 'sanitize_text_field',
233 + 'message' => 'wp_kses_post',
234 + 'status' => 'rest_sanitize_boolean',
235 + 'enabled' => 'rest_sanitize_boolean',
236 + 'type' => 'sanitize_text_field',
237 + 'url' => 'sanitize_url',
238 + 'webhook' => 'sanitize_url',
239 + 'textTitle' => 'sanitize_text_field',
240 + ];
136 241
242 + $valueArray = $this->sanitizeData($valueArray, $sanitizerMap);
243 + $value = json_encode($valueArray);
244 +
137 245 $data = [
138 246 'meta_key' => $key,
139 - 'value' => $value,
140 - 'form_id' => $this->formId
247 + 'value' => $value,
248 + 'form_id' => $this->formId,
141 249 ];
142 250
143 251 // If the request has an valid id field it's safe to assume
144 252 // that the user wants to update an existing settings.
@@ -152,21 +260,20 @@
152 260 if (isset($settings)) {
153 261 $this->settingsQuery->where('id', $settings->id)->update($data);
154 262 $insertId = $settings->id;
155 263 } else {
156 - $insertId = $this->settingsQuery->insert($data);
264 + $insertId = $this->settingsQuery->insertGetId($data);
157 265 }
158 266
159 267 wp_send_json_success([
160 - 'message' => __('Settings has been saved.', 'fluentform'),
268 + 'message' => __('Settings has been saved.', 'fluentform'),
161 269 'settings' => json_decode($value, true),
162 - 'id' => $insertId
270 + 'id' => $insertId,
163 271 ], 200);
164 272 }
165 273
166 274 /**
167 275 * Delete settings/meta from database for a given form
168 - * @return void
169 276 */
170 277 public function remove()
171 278 {
172 279 $id = intval($this->request->get('id'));
@@ -173,6 +280,14 @@
173 280
174 281 $this->settingsQuery->where('id', $id)->delete();
175 282
176 283 wp_send_json([], 200);
284 + }
285 +
286 + private function sanitizeData($settings, $sanitizerMap)
287 + {
288 + if (fluentformCanUnfilteredHTML()) {
289 + return $settings;
290 + }
291 + return fluentform_backend_sanitizer($settings, $sanitizerMap);
177 292 }
178 293 }