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 +143 -19 3.6.416.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,26 +60,56 @@
61 60 $result = $query->get();
62 61
63 62 foreach ($result as $item) {
64 63 $item->value = json_decode($item->value, true);
64 + if ('notifications' == $metaKey) {
65 + if (!$item->value) {
66 + $item->value = ['name' => ''];
67 + }
68 + }
65 69 if (isset($item->value['layout']) && !isset($item->value['layout']['asteriskPlacement'])) {
66 70 $item->value['layout']['asteriskPlacement'] = 'asterisk-right';
67 71 }
68 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 + );
69 85
86 + $result = $this->app->applyFilters('fluentform/get_meta_key_settings_response', $result, $this->formId, $metaKey);
70 87 wp_send_json_success(['result' => $result], 200);
71 88 }
72 89
73 -
74 90 public function getGeneralSettingsAjax()
75 91 {
76 92 $formId = intval($this->request->get('form_id'));
77 93 $form = new Form($this->app);
78 94 $settings = [
79 - 'generalSettings' => $form->getFormsDefaultSettings($formId),
80 - 'advancedValidationSettings' => $form->getAdvancedValidationSettings($formId)
95 + 'generalSettings' => $form->getFormsDefaultSettings($formId),
96 + 'advancedValidationSettings' => $form->getAdvancedValidationSettings($formId),
81 97 ];
82 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 +
83 112 wp_send_json_success($settings, 200);
84 113 }
85 114
86 115 public function saveGeneralSettingsAjax()
@@ -87,9 +116,48 @@
87 116 {
88 117 $formId = intval($this->request->get('form_id'));
89 118 $form = new Form($this->app);
90 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 +
91 158 $advancedValidationSettings = \json_decode($this->request->get('advancedValidationSettings'), true);
159 + $advancedValidationSettings = $this->sanitizeData($advancedValidationSettings, $sanitizerMap);
92 160
93 161 Validator::validate(
94 162 'confirmations',
95 163 ArrayHelper::get($formSettings, 'confirmation', [])
@@ -97,12 +165,36 @@
97 165
98 166 $form->updateMeta($formId, 'formSettings', $formSettings);
99 167 $form->updateMeta($formId, 'advancedValidationSettings', $advancedValidationSettings);
100 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 +
101 194 wp_send_json_success([
102 - 'message' => __('Settings has been saved.', 'fluentform')
195 + 'message' => __('Settings has been saved.', 'fluentform'),
103 196 ], 200);
104 -
105 197 }
106 198
107 199 /**
108 200 * Save settings/meta for a form in database
@@ -114,22 +206,47 @@
114 206 $valueArray = $value ? json_decode($value, true) : [];
115 207
116 208 $key = sanitize_text_field($this->request->get('meta_key'));
117 209
118 - if ($key == 'formSettings') {
210 + if ('formSettings' == $key) {
119 211 Validator::validate(
120 - 'confirmations', ArrayHelper::get(
121 - $valueArray, 'confirmation', []
122 - )
212 + 'confirmations',
213 + ArrayHelper::get(
214 + $valueArray,
215 + 'confirmation',
216 + []
217 + )
123 218 );
124 219 } else {
125 220 Validator::validate($key, $valueArray);
126 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 + ];
127 241
242 + $valueArray = $this->sanitizeData($valueArray, $sanitizerMap);
243 + $value = json_encode($valueArray);
244 +
128 245 $data = [
129 246 'meta_key' => $key,
130 - 'value' => $value,
131 - 'form_id' => $this->formId
247 + 'value' => $value,
248 + 'form_id' => $this->formId,
132 249 ];
133 250
134 251 // If the request has an valid id field it's safe to assume
135 252 // that the user wants to update an existing settings.
@@ -143,21 +260,20 @@
143 260 if (isset($settings)) {
144 261 $this->settingsQuery->where('id', $settings->id)->update($data);
145 262 $insertId = $settings->id;
146 263 } else {
147 - $insertId = $this->settingsQuery->insert($data);
264 + $insertId = $this->settingsQuery->insertGetId($data);
148 265 }
149 266
150 267 wp_send_json_success([
151 - 'message' => __('Settings has been saved.', 'fluentform'),
268 + 'message' => __('Settings has been saved.', 'fluentform'),
152 269 'settings' => json_decode($value, true),
153 - 'id' => $insertId
270 + 'id' => $insertId,
154 271 ], 200);
155 272 }
156 273
157 274 /**
158 275 * Delete settings/meta from database for a given form
159 - * @return void
160 276 */
161 277 public function remove()
162 278 {
163 279 $id = intval($this->request->get('id'));
@@ -164,6 +280,14 @@
164 280
165 281 $this->settingsQuery->where('id', $id)->delete();
166 282
167 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);
168 292 }
169 293 }