PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 4.01.02
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v4.01.02
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/controllers/FrmSettingsController.php +77 -317 6.334.01.02 View file →
@@ -1,150 +1,77 @@
1 1 <?php
2 -if ( ! defined( 'ABSPATH' ) ) {
3 - die( 'You are not allowed to call this page directly.' );
4 -}
5 2
6 3 class FrmSettingsController {
7 4
8 - /**
9 - * Payments sections are removed from the top level and added to a payments section.
10 - *
11 - * @since 6.22.1
12 - *
13 - * @var array
14 - */
15 - private static $removed_payments_sections = array();
16 -
17 - /**
18 - * @return void
19 - */
20 5 public static function menu() {
21 6 // Make sure admins can see the menu items
22 7 FrmAppHelper::force_capability( 'frm_change_settings' );
23 8
24 - add_submenu_page( 'formidable', 'Formidable | ' . __( 'Global Settings', 'formidable' ), __( 'Global Settings', 'formidable' ), 'frm_change_settings', 'formidable-settings', 'FrmSettingsController::route' ); // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong
9 + add_submenu_page( 'formidable', 'Formidable | ' . __( 'Global Settings', 'formidable' ), __( 'Global Settings', 'formidable' ), 'frm_change_settings', 'formidable-settings', 'FrmSettingsController::route' );
25 10 }
26 11
27 - /**
28 - * Include license box template on demand.
29 - *
30 - * @return void
31 - */
32 12 public static function license_box() {
33 - if ( ! current_user_can( 'activate_plugins' ) ) {
34 - return;
35 - }
36 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/license_box.php';
13 + $a = FrmAppHelper::simple_get( 't', 'sanitize_title', 'general_settings' );
14 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/license_box.php' );
37 15 }
38 16
39 - /**
40 - * @param array $errors
41 - * @param string $message
42 - *
43 - * @return void
44 - */
45 17 public static function display_form( $errors = array(), $message = '' ) {
46 18 global $frm_vars;
47 19
48 20 $frm_settings = FrmAppHelper::get_settings();
49 - $uploads = wp_upload_dir();
50 - $target_path = $uploads['basedir'] . '/formidable/css';
51 - $sections = self::get_settings_tabs();
52 - $current = FrmAppHelper::simple_get( 't', 'sanitize_title', 'general_settings' );
53 21
54 - if ( in_array( $current, array( 'stripe_settings', 'square_settings', 'authorize_net_settings', 'paypal_settings' ), true ) ) {
55 - $current = 'payments_settings';
56 - }
22 + $uploads = wp_upload_dir();
23 + $target_path = $uploads['basedir'] . '/formidable/css';
57 24
58 - require FrmAppHelper::plugin_path() . '/classes/views/frm-settings/form.php';
25 + $sections = self::get_settings_tabs();
26 + $current = FrmAppHelper::simple_get( 't', 'sanitize_title', 'general_settings' );
27 +
28 + require( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/form.php' );
59 29 }
60 30
61 - /**
62 - * Get sections to use for Global Settings.
63 - *
64 - * @return array<array>
65 - */
66 31 private static function get_settings_tabs() {
67 32 $sections = array(
68 - 'general' => array(
69 - 'class' => self::class,
33 + 'general' => array(
34 + 'class' => __CLASS__,
70 35 'function' => 'general_settings',
71 36 'name' => __( 'General Settings', 'formidable' ),
72 - 'icon' => 'frmfont frm_settings_icon',
37 + 'icon' => 'frm_icon_font frm_settings_icon',
73 38 ),
74 - 'messages' => array(
75 - 'class' => self::class,
39 + 'messages' => array(
40 + 'class' => __CLASS__,
76 41 'function' => 'message_settings',
77 42 'name' => __( 'Message Defaults', 'formidable' ),
78 - 'icon' => 'frmfont frm_stamp_icon',
43 + 'icon' => 'frm_icon_font frm_stamp_icon',
79 44 ),
80 - 'permissions' => array(
81 - 'class' => self::class,
45 + 'permissions' => array(
46 + 'class' => __CLASS__,
82 47 'function' => 'permission_settings',
83 48 'name' => __( 'Permissions', 'formidable' ),
84 - 'icon' => 'frmfont frm_lock_icon',
49 + 'icon' => 'frm_icon_font frm_lock_icon',
85 50 ),
86 - 'payments' => array(
87 - 'name' => __( 'Payments', 'formidable' ),
88 - 'icon' => 'frmfont frm_simple_cc_icon',
89 - 'class' => self::class,
90 - 'function' => 'payments_settings',
51 + 'recaptcha' => array(
52 + 'class' => __CLASS__,
53 + 'function' => 'recaptcha_settings',
54 + 'name' => __( 'reCaptcha', 'formidable' ),
55 + 'icon' => 'frm_icon_font frm_shield_check_icon',
91 56 ),
92 - 'custom_css' => array(
93 - 'class' => 'FrmStylesController',
94 - 'function' => 'custom_css',
95 - 'name' => __( 'Custom CSS', 'formidable' ),
96 - 'icon' => 'frmfont frm_code_icon',
97 - ),
98 - 'manage_styles' => array(
99 - 'class' => 'FrmStylesController',
100 - 'function' => 'manage',
101 - 'name' => __( 'Manage Styles', 'formidable' ),
102 - 'icon' => 'frmfont frm_pallet_icon',
103 - ),
104 - 'captcha' => array(
105 - 'class' => self::class,
106 - 'function' => 'captcha_settings',
107 - 'name' => __( 'Captcha/Spam', 'formidable' ),
108 - 'icon' => 'frmfont frm_shield_check_icon',
109 - ),
110 - 'email' => array(
111 - 'class' => self::class,
112 - 'function' => 'email_settings',
113 - 'name' => __( 'Email', 'formidable' ),
114 - 'icon' => 'frmfont frm_email_icon',
115 - ),
116 - 'white_label' => array(
57 + 'white_label' => array(
117 58 'name' => __( 'White Labeling', 'formidable' ),
118 - 'icon' => 'frmfont frm_ghost_icon',
119 - 'html_class' => 'frm_show_upgrade_tab frm_noallow',
59 + 'icon' => 'frm_icon_font frm_ghost_icon',
60 + 'html_class' => 'frm_show_upgrade frm_noallow',
120 61 'data' => array(
121 - 'medium' => 'white-label',
122 - 'upgrade' => __( 'White labeling options', 'formidable' ),
123 - 'screenshot' => 'white-label.png',
124 - 'learn-more' => FrmAppHelper::get_doc_url( 'features/white-label-form-builder-wordpress', 'white-labeling-global-settings', false ),
62 + 'medium' => 'white-label',
63 + 'upgrade' => __( 'White labeling options', 'formidable' ),
125 64 ),
126 65 ),
127 - 'inbox' => array(
128 - 'name' => __( 'Inbox', 'formidable' ),
129 - 'icon' => 'frmfont frm_email_icon',
130 - 'html_class' => 'frm_show_upgrade_tab frm_noallow',
131 - 'data' => array(
132 - 'medium' => 'inbox-settings',
133 - 'upgrade' => __( 'Inbox settings', 'formidable' ),
134 - 'screenshot' => 'inbox.png',
135 - 'learn-more' => FrmAppHelper::get_doc_url( 'global-settings-overview/#kb-inbox', 'inbox-global-settings' ),
136 - ),
137 - ),
138 66 );
139 67
140 68 if ( apply_filters( 'frm_include_addon_page', false ) ) {
141 - // If no addons need a license, skip this page
69 + // if no addons need a license, skip this page
142 70 $show_licenses = false;
143 71 $installed_addons = apply_filters( 'frm_installed_addons', array() );
144 -
145 72 foreach ( $installed_addons as $installed_addon ) {
146 - if ( ! $installed_addon->is_parent_licence && $installed_addon->plugin_name !== 'Formidable Pro' && $installed_addon->needs_license ) {
73 + if ( ! $installed_addon->is_parent_licence && $installed_addon->plugin_name != 'Formidable Pro' ) {
147 74 $show_licenses = true;
148 75 break;
149 76 }
150 77 }
@@ -153,24 +80,19 @@
153 80 $sections['licenses'] = array(
154 81 'class' => 'FrmAddonsController',
155 82 'function' => 'license_settings',
156 83 'name' => __( 'Plugin Licenses', 'formidable' ),
157 - 'icon' => 'frmfont frm_key_icon',
84 + 'icon' => 'frm_icon_font frm_keyalt_icon',
158 85 'ajax' => true,
159 86 );
160 87 }
161 - }//end if
162 -
163 - /**
164 - * @param array<array> $sections
165 - */
88 + }
166 89 $sections = apply_filters( 'frm_add_settings_section', $sections );
167 - self::remove_payments_sections( $sections );
168 90
169 91 $sections['misc'] = array(
170 92 'name' => __( 'Miscellaneous', 'formidable' ),
171 - 'icon' => 'frmfont frm_shuffle_icon',
172 - 'class' => self::class,
93 + 'icon' => 'frm_icon_font frm_shuffle_icon',
94 + 'class' => __CLASS__,
173 95 'function' => 'misc_settings',
174 96 );
175 97
176 98 foreach ( $sections as $key => $section ) {
@@ -177,9 +99,9 @@
177 99 $original = $section;
178 100 $defaults = array(
179 101 'html_class' => '',
180 102 'name' => ucfirst( $key ),
181 - 'icon' => 'frmfont frm_settings_icon',
103 + 'icon' => 'frm_icon_font frm_settings_icon',
182 104 'anchor' => $key . '_settings',
183 105 'data' => array(),
184 106 );
185 107
@@ -194,60 +116,13 @@
194 116 $section['function'] = $original;
195 117 }
196 118
197 119 $sections[ $key ] = $section;
198 - }//end foreach
120 + }
199 121
200 122 return $sections;
201 123 }
202 124
203 - /**
204 - * Remove the payments sections (PayPal, Square, Stripe, Authorize.Net)
205 - * and show them all on the payments section in separate tabs.
206 - *
207 - * @since 6.22.1
208 - *
209 - * @param array $sections
210 - *
211 - * @return void
212 - */
213 - private static function remove_payments_sections( &$sections ) {
214 - $payment_section_keys = array( 'paypal', 'square', 'stripe', 'authorize_net' );
215 -
216 - foreach ( $sections as $key => $section ) {
217 - if ( ! in_array( $key, $payment_section_keys, true ) ) {
218 - continue;
219 - }
220 -
221 - self::$removed_payments_sections[ $key ] = $section;
222 - unset( $sections[ $key ] );
223 - }
224 -
225 - uksort( self::$removed_payments_sections, array( self::class, 'payment_sections_sort_callback' ) );
226 - }
227 -
228 - /**
229 - * Sort the payments sections (PayPal, Square, Stripe, Authorize.Net)
230 - *
231 - * @since 6.22.1
232 - *
233 - * @param string $a
234 - * @param string $b
235 - *
236 - * @return int
237 - */
238 - private static function payment_sections_sort_callback( $a, $b ) {
239 - $order = array( 'stripe', 'square', 'paypal', 'authorize_net' );
240 - $first_key = array_search( $a, $order, true );
241 - $second_key = array_search( $b, $order, true );
242 -
243 - if ( false === $first_key || false === $second_key ) {
244 - return 0;
245 - }
246 -
247 - return $first_key - $second_key;
248 - }
249 -
250 125 public static function load_settings_tab() {
251 126 FrmAppHelper::permission_check( 'frm_change_settings' );
252 127 check_ajax_referer( 'frm_ajax', 'nonce' );
253 128
@@ -252,9 +127,8 @@
252 127 check_ajax_referer( 'frm_ajax', 'nonce' );
253 128
254 129 $section = FrmAppHelper::get_post_param( 'tab', '', 'sanitize_text_field' );
255 130 $sections = self::get_settings_tabs();
256 -
257 131 if ( ! isset( $sections[ $section ] ) ) {
258 132 wp_die();
259 133 }
260 134
@@ -262,150 +136,82 @@
262 136
263 137 if ( isset( $section['class'] ) ) {
264 138 call_user_func( array( $section['class'], $section['function'] ) );
265 139 } else {
266 - call_user_func( $section['function'] ?? $section );
140 + call_user_func( ( isset( $section['function'] ) ? $section['function'] : $section ) );
267 141 }
268 -
269 142 wp_die();
270 143 }
271 144
272 145 /**
273 - * Render the general global settings section.
274 - *
275 146 * @since 4.0
276 - *
277 - * @return void
278 147 */
279 148 public static function general_settings() {
280 149 $frm_settings = FrmAppHelper::get_settings();
281 - $uploads = wp_upload_dir();
282 - $target_path = $uploads['basedir'] . '/formidable/css';
283 150
284 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/general.php';
285 - }
151 + $uploads = wp_upload_dir();
152 + $target_path = $uploads['basedir'] . '/formidable/css';
286 153
287 - /**
288 - * Render the global currency selector if Pro is up to date.
289 - *
290 - * @param FrmSettings $frm_settings
291 - *
292 - * @return void
293 - */
294 - public static function maybe_render_currency_selector( $frm_settings ) {
295 - if ( is_callable( 'FrmProSettingsController::add_currency_settings' ) ) {
296 - FrmProSettingsController::add_currency_settings();
297 - return;
298 - }
299 -
300 - $currencies = FrmCurrencyHelper::get_currencies();
301 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/_currency.php';
154 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/general.php' );
302 155 }
303 156
304 157 /**
305 158 * @since 4.0
306 - *
307 - * @return void
308 159 */
309 160 public static function message_settings() {
310 161 $frm_settings = FrmAppHelper::get_settings();
311 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/messages.php';
162 +
163 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/messages.php' );
312 164 }
313 165
314 166 /**
315 167 * @since 4.0
316 - *
317 - * @return void
318 168 */
319 - public static function captcha_settings() {
169 + public static function recaptcha_settings() {
320 170 $frm_settings = FrmAppHelper::get_settings();
321 171 $captcha_lang = FrmAppHelper::locales( 'captcha' );
322 172
323 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/captcha/captcha.php';
173 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/recaptcha.php' );
324 174 }
325 175
326 176 /**
327 - * Shows email settings.
328 - *
329 - * @since 6.25
330 - *
331 - * @return void
332 - */
333 - public static function email_settings() {
334 - $frm_settings = FrmAppHelper::get_settings();
335 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/email/email-styles.php';
336 - }
337 -
338 - /**
339 177 * @since 4.0
340 - *
341 - * @return void
342 178 */
343 179 public static function permission_settings() {
344 180 $frm_settings = FrmAppHelper::get_settings();
345 181 $frm_roles = FrmAppHelper::frm_capabilities();
346 182
347 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/permissions.php';
183 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/permissions.php' );
348 184 }
349 185
350 186 /**
351 - * @return void
352 - */
353 - public static function payments_settings() {
354 - $payment_sections = self::$removed_payments_sections;
355 - $tab = FrmAppHelper::simple_get( 't', 'sanitize_title', 'general_settings' );
356 -
357 - if ( $tab && in_array( $tab, array( 'stripe_settings', 'square_settings', 'authorize_net_settings', 'paypal_settings' ), true ) ) {
358 - $tab = str_replace( '_settings', '', $tab );
359 - } else {
360 - $tab = 'stripe';
361 - }
362 -
363 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/payments.php';
364 - }
365 -
366 - /**
367 187 * @since 4.0
368 - *
369 - * @return void
370 188 */
371 189 public static function misc_settings() {
372 190 $frm_settings = FrmAppHelper::get_settings();
373 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/misc.php';
191 +
192 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/misc.php' );
374 193 }
375 194
376 - /**
377 - * Save form data submitted from the Global settings page.
378 - *
379 - * @param bool|string $stop_load
380 - *
381 - * @return void
382 - */
383 195 public static function process_form( $stop_load = false ) {
384 196 global $frm_vars;
385 197
386 198 $frm_settings = FrmAppHelper::get_settings();
199 +
387 200 $process_form = FrmAppHelper::get_post_param( 'process_form', '', 'sanitize_text_field' );
388 -
389 201 if ( ! wp_verify_nonce( $process_form, 'process_form_nonce' ) ) {
390 - $error_args = array(
391 - 'title' => __( 'Verification failed', 'formidable' ),
392 - 'body' => $frm_settings->admin_permission,
393 - 'cancel_text' => __( 'Cancel', 'formidable' ),
394 - );
395 - FrmAppController::show_error_modal( $error_args );
396 - return;
202 + wp_die( esc_html( $frm_settings->admin_permission ) );
397 203 }
398 204
399 205 $errors = array();
400 206 $message = '';
401 207
402 - if ( empty( $frm_vars['settings_routed'] ) ) {
208 + if ( ! isset( $frm_vars['settings_routed'] ) || ! $frm_vars['settings_routed'] ) {
403 209 $errors = $frm_settings->validate( $_POST, array() );
404 210
405 211 $frm_settings->update( wp_unslash( $_POST ) );
406 212
407 - if ( ! $errors ) {
213 + if ( empty( $errors ) ) {
408 214 $frm_settings->store();
409 215 $message = __( 'Settings Saved', 'formidable' );
410 216 }
411 217 } else {
@@ -411,10 +217,11 @@
411 217 } else {
412 218 $message = __( 'Settings Saved', 'formidable' );
413 219 }
414 220
415 - if ( $stop_load === 'stop_load' ) {
221 + if ( $stop_load == 'stop_load' ) {
416 222 $frm_vars['settings_routed'] = true;
223 +
417 224 return;
418 225 }
419 226
420 227 self::display_form( $errors, $message );
@@ -423,10 +230,8 @@
423 230 /**
424 231 * Include the Update button on the global settings page.
425 232 *
426 233 * @since 4.0.02
427 - *
428 - * @return void
429 234 */
430 235 public static function save_button() {
431 236 echo '<input class="button-primary frm-button-primary" type="submit"
432 237 value="' . esc_attr__( 'Update', 'formidable' ) . '"/>';
@@ -431,21 +236,16 @@
431 236 echo '<input class="button-primary frm-button-primary" type="submit"
432 237 value="' . esc_attr__( 'Update', 'formidable' ) . '"/>';
433 238 }
434 239
435 - /**
436 - * @param bool|string $stop_load
437 - *
438 - * @return void
439 - */
440 240 public static function route( $stop_load = false ) {
441 241 $action = isset( $_REQUEST['frm_action'] ) ? 'frm_action' : 'action';
442 242 $action = FrmAppHelper::get_param( $action, '', 'get', 'sanitize_title' );
443 243 FrmAppHelper::include_svg();
444 244
445 - if ( $action === 'process-form' ) {
245 + if ( $action == 'process-form' ) {
446 246 self::process_form( $stop_load );
447 - } elseif ( $stop_load !== 'stop_load' ) {
247 + } elseif ( $stop_load != 'stop_load' ) {
448 248 self::display_form();
449 249 }
450 250 }
451 251
@@ -452,17 +252,34 @@
452 252 /**
453 253 * Add CTA to the bottom on the plugin settings pages.
454 254 *
455 255 * @since 3.04.02
456 - *
457 - * @return void
458 256 */
459 - public static function settings_cta() {
257 + public static function settings_cta( $view ) {
258 +
460 259 if ( get_option( 'frm_lite_settings_upgrade', false ) ) {
461 260 return;
462 261 }
463 262
464 - include FrmAppHelper::plugin_path() . '/classes/views/frm-settings/settings_cta.php';
263 + $features = array(
264 + __( 'Extra form features like file uploads, pagination, etc', 'formidable' ),
265 + __( 'Repeaters & cascading fields for advanced forms', 'formidable' ),
266 + __( 'Flexibly view, search, edit, and delete entries anywhere', 'formidable' ),
267 + __( 'Display entries with virtually limitless Formidable views', 'formidable' ),
268 + __( 'Create surveys & polls', 'formidable' ),
269 + __( 'WordPress user registration and login forms', 'formidable' ),
270 + __( 'Create Stripe, PayPal or Authorize.net payment forms', 'formidable' ),
271 + __( 'Powerful conditional logic for smart forms', 'formidable' ),
272 + __( 'Integrations with 1000+ marketing & payment services', 'formidable' ),
273 + __( 'Collect digital signatures', 'formidable' ),
274 + __( 'Accept user-submitted content with Post submissions', 'formidable' ),
275 + __( 'Email routing', 'formidable' ),
276 + __( 'Create calculator forms', 'formidable' ),
277 + __( 'Save draft entries and return later', 'formidable' ),
278 + __( 'Analyze form data with graphs & stats', 'formidable' ),
279 + );
280 +
281 + include( FrmAppHelper::plugin_path() . '/classes/views/frm-settings/settings_cta.php' );
465 282 }
466 283
467 284 /**
468 285 * Dismiss upgrade notice at the bottom on the plugin settings pages.
@@ -469,69 +286,12 @@
469 286 *
470 287 * @since 3.04.02
471 288 */
472 289 public static function settings_cta_dismiss() {
473 - check_ajax_referer( 'frm_ajax', 'nonce' );
474 290 FrmAppHelper::permission_check( 'frm_change_settings' );
475 291
476 - update_option( 'frm_lite_settings_upgrade', time(), false );
292 + update_option( 'frm_lite_settings_upgrade', time(), 'no' );
477 293
478 294 wp_send_json_success();
479 295 }
480 296
481 - /**
482 - * Autocomplete page admin ajax endpoint
483 - *
484 - * @since 4.03.06
485 - */
486 - public static function page_search() {
487 - FrmAppHelper::permission_check( 'frm_edit_forms' );
488 - check_ajax_referer( 'frm_ajax', 'nonce' );
489 -
490 - global $wpdb;
491 -
492 - $term = FrmAppHelper::get_param( 'term', '', 'get', 'sanitize_text_field' );
493 - $post_type = FrmAppHelper::get_param( 'post_type', 'page', 'get', 'sanitize_text_field' );
494 -
495 - $where = array(
496 - 'post_status' => 'publish',
497 - 'post_type' => $post_type,
498 - 'post_title LIKE' => $term,
499 - );
500 -
501 - $atts = array(
502 - 'limit' => 25,
503 - 'order_by' => 'post_title',
504 - );
505 -
506 - $pages = FrmDb::get_results( $wpdb->posts, $where, 'ID, post_title', $atts );
507 - $results = array();
508 -
509 - foreach ( $pages as $page ) {
510 - $results[] = array(
511 - 'value' => $page->ID,
512 - 'label' => $page->post_title,
513 - );
514 - }
515 -
516 - wp_send_json( $results );
517 - }
518 -
519 - /**
520 - * Shows a fake color picker.
521 - *
522 - * @since 6.25
523 - *
524 - * @param string $color Color value.
525 - *
526 - * @return void
527 - */
528 - public static function fake_color_picker( $color ) {
529 - ?>
530 - <div class="wp-picker-container">
531 - <button type="button" class="button wp-color-result" aria-expanded="false" aria-disabled="true" tabindex="-1" style="background-color:<?php echo esc_attr( $color ); ?>;"><?php // phpcs:ignore SlevomatCodingStandard.Files.LineLength.LineTooLong ?>
532 - <span class="wp-color-result-text" style="color:#a7aaad;"><?php esc_html_e( 'Select Color', 'formidable' ); ?></span>
533 - </button>
534 - </div>
535 - <?php
536 - }
537 297 }