PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 4.3.13
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v4.3.13
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 3.6.66 All 195 releases
fluentform / app / Modules / Form / Settings / FormSettings.php

FormSettings.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 4.3.13, at app/Modules/Form/Settings/FormSettings.php

262 lines 9.4 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\Modules\Form\Settings;
4
5 use FluentForm\App\Modules\Acl\Acl;
6 use FluentForm\App\Modules\Form\Form;
7 use FluentForm\Framework\Helpers\ArrayHelper;
8 use FluentForm\Framework\Foundation\Application;
9 use FluentForm\App\Modules\Form\Settings\Validator\Validator;
10
11 class FormSettings
12 {
13 /**
14 * @var \FluentForm\Framework\Request\Request
15 */
16 private $request;
17
18 private $app;
19
20 /**
21 * @var int form ID.
22 */
23 private $formId;
24
25 /**
26 * The settings (fluentform_form_meta) query builder.
27 *
28 * @var \WpFluent\QueryBuilder\QueryBuilderHandler
29 */
30 private $settingsQuery;
31
32 /**
33 * Construct the object
34 * @throws \Exception
35 */
36 public function __construct(Application $application)
37 {
38 $this->app = $application;
39
40 $this->request = $application->request;
41 $this->formId = intval($this->request->get('form_id'));
42
43 $this->settingsQuery = wpFluent()->table('fluentform_form_meta')->where('form_id', $this->formId);
44 }
45
46 /**
47 * Get settings for a particular form by id
48 * @return void
49 */
50 public function index()
51 {
52 $metaKey = sanitize_text_field($this->request->get('meta_key'));
53
54 // We'll always try to get a collection for a given meta key.
55 // Acknowledging that a certain meta key can have multiple
56 // results. The developer using the api knows beforehand
57 // that whether the expected result contains multiple
58 // or one value. The developer will access that way.
59 $query = $this->settingsQuery->where('meta_key', $metaKey);
60
61 $result = $query->get();
62
63 foreach ($result as $item) {
64 $item->value = json_decode($item->value, true);
65 if($metaKey == 'notifications') {
66 if(!$item->value) {
67 $item->value = ['name' => ''];
68 }
69 }
70 if (isset($item->value['layout']) && !isset($item->value['layout']['asteriskPlacement'])) {
71 $item->value['layout']['asteriskPlacement'] = 'asterisk-right';
72 }
73 }
74 $result = apply_filters('fluentform_get_meta_key_settings_response', $result, $this->formId, $metaKey);
75 wp_send_json_success(['result' => $result], 200);
76 }
77
78
79 public function getGeneralSettingsAjax()
80 {
81 $formId = intval($this->request->get('form_id'));
82 $form = new Form($this->app);
83 $settings = [
84 'generalSettings' => $form->getFormsDefaultSettings($formId),
85 'advancedValidationSettings' => $form->getAdvancedValidationSettings($formId)
86 ];
87
88 $settings = apply_filters('fluentform_form_settings_ajax', $settings, $formId);
89
90 wp_send_json_success($settings, 200);
91 }
92
93 public function saveGeneralSettingsAjax()
94 {
95 $formId = intval($this->request->get('form_id'));
96 $form = new Form($this->app);
97 $formSettings = \json_decode($this->request->get('formSettings'), true);
98
99 $sanitizerMap = [
100 'redirectTo' => 'sanitize_text_field',
101 'redirectMessage' => 'fluentform_sanitize_html',
102 'messageToShow' => 'fluentform_sanitize_html',
103 'customPage' => 'sanitize_text_field',
104 'samePageFormBehavior' => 'sanitize_text_field',
105 'customUrl' => 'sanitize_url',
106 'enabled' => 'rest_sanitize_boolean',
107 'numberOfEntries' => 'intval',
108 'period' => 'intval',
109 'limitReachedMsg' => 'sanitize_text_field',
110 'start' => 'sanitize_text_field',
111 'end' => 'sanitize_text_field',
112 'pendingMsg' => 'sanitize_text_field',
113 'expiredMsg' => 'sanitize_text_field',
114 'requireLoginMsg' => 'sanitize_text_field',
115 'message' => 'sanitize_text_field',
116 'labelPlacement' => 'sanitize_text_field',
117 'helpMessagePlacement' => 'sanitize_text_field',
118 'errorMessagePlacement' => 'sanitize_text_field',
119 'asteriskPlacement' => 'sanitize_text_field',
120 'delete_entry_on_submission' => 'sanitize_text_field',
121 'id' => 'intval',
122 'showLabel' => 'rest_sanitize_boolean',
123 'showCount' => 'rest_sanitize_boolean',
124 'status' => 'rest_sanitize_boolean',
125 'type' => 'sanitize_text_field',
126 'field' => 'sanitize_text_field',
127 'operator' => 'sanitize_text_field',
128 'value' => 'sanitize_text_field',
129 'error_message' => 'sanitize_text_field',
130 'validation_type' => 'sanitize_text_field',
131 ];
132 $formSettings = $this->sanitizeData($formSettings, $sanitizerMap);
133
134 $advancedValidationSettings = \json_decode($this->request->get('advancedValidationSettings'), true);
135 $advancedValidationSettings = $this->sanitizeData($advancedValidationSettings, $sanitizerMap);
136
137 Validator::validate(
138 'confirmations',
139 ArrayHelper::get($formSettings, 'confirmation', [])
140 );
141
142 $form->updateMeta($formId, 'formSettings', $formSettings);
143 $form->updateMeta($formId, 'advancedValidationSettings', $advancedValidationSettings);
144
145 $deleteAfterXDaysStatus = ArrayHelper::get($formSettings, 'delete_after_x_days');
146 $deleteDaysCount = ArrayHelper::get($formSettings, 'auto_delete_days');
147 $deleteOnSubmission = ArrayHelper::get($formSettings, 'delete_entry_on_submission');
148
149 if ($deleteOnSubmission != 'yes' && $deleteDaysCount && $deleteAfterXDaysStatus == 'yes') {
150 // We have to set meta values
151 $form->updateMeta($formId, 'auto_delete_days', intval($deleteDaysCount));
152 } else {
153 // we have to delete meta values
154 $form->deleteMeta($formId, 'auto_delete_days');
155 }
156
157 do_action('fluentform_after_save_form_settings', $formId, $this->request->all());
158
159 wp_send_json_success([
160 'message' => __('Settings has been saved.', 'fluentform')
161 ], 200);
162
163 }
164
165 /**
166 * Save settings/meta for a form in database
167 */
168 public function store()
169 {
170 $value = $this->request->get('value', '');
171
172 $valueArray = $value ? json_decode($value, true) : [];
173
174 $key = sanitize_text_field($this->request->get('meta_key'));
175
176 if ($key == 'formSettings') {
177 Validator::validate(
178 'confirmations', ArrayHelper::get(
179 $valueArray, 'confirmation', []
180 )
181 );
182 } else {
183 Validator::validate($key, $valueArray);
184 }
185 $sanitizerMap = [
186 'name' => 'sanitize_text_field',
187 'field' => 'sanitize_text_field',
188 'email' => 'sanitize_text_field',
189 'operator' => 'sanitize_text_field',
190 'value' => 'sanitize_text_field',
191 'fromName' => 'sanitize_text_field',
192 'fromEmail' => 'sanitize_text_field',
193 'replyTo' => 'sanitize_text_field',
194 'bcc' => 'sanitize_text_field',
195 'subject' => 'sanitize_text_field',
196 'message' => 'wp_kses_post',
197 'status' => 'rest_sanitize_boolean',
198 'enabled' => 'rest_sanitize_boolean',
199 'type' => 'sanitize_text_field',
200 'url' => 'sanitize_url',
201 'webhook' => 'sanitize_url',
202 'textTitle' => 'sanitize_text_field',
203 ];
204
205 $valueArray = $this->sanitizeData($valueArray, $sanitizerMap);
206 $value = json_encode($valueArray);
207
208 $data = [
209 'meta_key' => $key,
210 'value' => $value,
211 'form_id' => $this->formId
212 ];
213
214 // If the request has an valid id field it's safe to assume
215 // that the user wants to update an existing settings.
216 // So, we'll proceed to do so by finding it first.
217 $id = intval($this->request->get('id'));
218
219 if ($id) {
220 $settings = $this->settingsQuery->find($id);
221 }
222
223 if (isset($settings)) {
224 $this->settingsQuery->where('id', $settings->id)->update($data);
225 $insertId = $settings->id;
226 } else {
227 $insertId = $this->settingsQuery->insert($data);
228 }
229
230 wp_send_json_success([
231 'message' => __('Settings has been saved.', 'fluentform'),
232 'settings' => json_decode($value, true),
233 'id' => $insertId
234 ], 200);
235 }
236
237 /**
238 * Delete settings/meta from database for a given form
239 * @return void
240 */
241 public function remove()
242 {
243 $id = intval($this->request->get('id'));
244
245 $this->settingsQuery->where('id', $id)->delete();
246
247 wp_send_json([], 200);
248 }
249
250 /**
251 * @param $formSettings
252 * @return array
253 */
254 private function sanitizeData($settings, $sanitizerMap)
255 {
256 if (current_user_can('unfiltered_html') || apply_filters('fluent_form_disable_fields_sanitize', false)) {
257 return $settings;
258 }
259 return fluentform_backend_sanitizer($settings, $sanitizerMap);
260 }
261 }
262