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/Modules/Form/Settings/FormSettings.php +140 -21 3.6.516.2.14 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,22 +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
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 + );
109 +
110 + $settings = $this->app->applyFilters('fluentform/form_settings_ajax', $settings, $formId);
111 +
88 112 wp_send_json_success($settings, 200);
89 113 }
90 114
91 115 public function saveGeneralSettingsAjax()
@@ -92,9 +116,48 @@
92 116 {
93 117 $formId = intval($this->request->get('form_id'));
94 118 $form = new Form($this->app);
95 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 +
96 158 $advancedValidationSettings = \json_decode($this->request->get('advancedValidationSettings'), true);
159 + $advancedValidationSettings = $this->sanitizeData($advancedValidationSettings, $sanitizerMap);
97 160
98 161 Validator::validate(
99 162 'confirmations',
100 163 ArrayHelper::get($formSettings, 'confirmation', [])
@@ -102,12 +165,36 @@
102 165
103 166 $form->updateMeta($formId, 'formSettings', $formSettings);
104 167 $form->updateMeta($formId, 'advancedValidationSettings', $advancedValidationSettings);
105 168
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');
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 +
106 194 wp_send_json_success([
107 - 'message' => __('Settings has been saved.', 'fluentform')
195 + 'message' => __('Settings has been saved.', 'fluentform'),
108 196 ], 200);
109 -
110 197 }
111 198
112 199 /**
113 200 * Save settings/meta for a form in database
@@ -119,22 +206,47 @@
119 206 $valueArray = $value ? json_decode($value, true) : [];
120 207
121 208 $key = sanitize_text_field($this->request->get('meta_key'));
122 209
123 - if ($key == 'formSettings') {
210 + if ('formSettings' == $key) {
124 211 Validator::validate(
125 - 'confirmations', ArrayHelper::get(
126 - $valueArray, 'confirmation', []
127 - )
212 + 'confirmations',
213 + ArrayHelper::get(
214 + $valueArray,
215 + 'confirmation',
216 + []
217 + )
128 218 );
129 219 } else {
130 220 Validator::validate($key, $valueArray);
131 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 + ];
132 241
242 + $valueArray = $this->sanitizeData($valueArray, $sanitizerMap);
243 + $value = json_encode($valueArray);
244 +
133 245 $data = [
134 246 'meta_key' => $key,
135 - 'value' => $value,
136 - 'form_id' => $this->formId
247 + 'value' => $value,
248 + 'form_id' => $this->formId,
137 249 ];
138 250
139 251 // If the request has an valid id field it's safe to assume
140 252 // that the user wants to update an existing settings.
@@ -148,21 +260,20 @@
148 260 if (isset($settings)) {
149 261 $this->settingsQuery->where('id', $settings->id)->update($data);
150 262 $insertId = $settings->id;
151 263 } else {
152 - $insertId = $this->settingsQuery->insert($data);
264 + $insertId = $this->settingsQuery->insertGetId($data);
153 265 }
154 266
155 267 wp_send_json_success([
156 - 'message' => __('Settings has been saved.', 'fluentform'),
268 + 'message' => __('Settings has been saved.', 'fluentform'),
157 269 'settings' => json_decode($value, true),
158 - 'id' => $insertId
270 + 'id' => $insertId,
159 271 ], 200);
160 272 }
161 273
162 274 /**
163 275 * Delete settings/meta from database for a given form
164 - * @return void
165 276 */
166 277 public function remove()
167 278 {
168 279 $id = intval($this->request->get('id'));
@@ -169,6 +280,14 @@
169 280
170 281 $this->settingsQuery->where('id', $id)->delete();
171 282
172 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);
173 292 }
174 293 }