PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 4.04.05
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v4.04.05
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
formidable / classes / controllers / FrmAppController.php

FrmAppController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 4.04.05, at classes/controllers/FrmAppController.php

606 lines 16.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class FrmAppController {
4
5 public static function menu() {
6 FrmAppHelper::maybe_add_permissions();
7 if ( ! current_user_can( 'frm_view_forms' ) ) {
8 return;
9 }
10
11 $menu_name = FrmAppHelper::get_menu_name();
12 add_menu_page( 'Formidable', $menu_name, 'frm_view_forms', 'formidable', 'FrmFormsController::route', self::menu_icon(), self::get_menu_position() );
13 }
14
15 private static function get_menu_position() {
16 return apply_filters( 'frm_menu_position', '29.3' );
17 }
18
19 /**
20 * @since 3.05
21 */
22 private static function menu_icon() {
23 $icon = FrmAppHelper::svg_logo(
24 array(
25 'fill' => '#a0a5aa',
26 'orange' => '#a0a5aa',
27 )
28 );
29 $icon = 'data:image/svg+xml;base64,' . base64_encode( $icon );
30
31 return apply_filters( 'frm_icon', $icon );
32 }
33
34 /**
35 * @since 3.0
36 */
37 public static function add_admin_class( $classes ) {
38 if ( self::is_white_page() ) {
39 $classes .= ' frm-white-body ';
40 $classes .= self::get_os();
41
42 $page = str_replace( 'formidable-', '', FrmAppHelper::simple_get( 'page', 'sanitize_title' ) );
43 if ( empty( $page ) || $page === 'formidable' ) {
44 $action = FrmAppHelper::simple_get( 'frm_action', 'sanitize_title' );
45 if ( in_array( $action, array( 'settings', 'edit', 'list' ) ) ) {
46 $page .= $action;
47 } else {
48 $page = $action;
49 }
50 }
51 if ( ! empty( $page ) ) {
52 $classes .= ' frm-admin-page-' . $page;
53 }
54 }
55
56 if ( FrmAppHelper::is_full_screen() ) {
57 $classes .= apply_filters( 'frm_admin_full_screen_class', ' frm-full-screen folded' );
58 }
59
60 return $classes;
61 }
62
63 /**
64 * @since 4.0
65 */
66 private static function get_os() {
67 $agent = strtolower( FrmAppHelper::get_server_value( 'HTTP_USER_AGENT' ) );
68 $os = '';
69 if ( strpos( $agent, 'mac' ) !== false ) {
70 $os = ' osx';
71 } elseif ( strpos( $agent, 'linux' ) !== false ) {
72 $os = ' linux';
73 } elseif ( strpos( $agent, 'windows' ) !== false ) {
74 $os = ' windows';
75 }
76 return $os;
77 }
78
79 /**
80 * @since 3.0
81 */
82 private static function is_white_page() {
83 $white_pages = array(
84 'formidable',
85 'formidable-entries',
86 'formidable-pro-upgrade',
87 'formidable-addons',
88 'formidable-import',
89 'formidable-settings',
90 'formidable-styles',
91 );
92
93 $get_page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
94 $is_white_page = in_array( $get_page, $white_pages );
95
96 if ( ! $is_white_page ) {
97 $screen = get_current_screen();
98 $is_white_page = ( $screen && strpos( $screen->id, 'frm_display' ) !== false );
99 }
100
101 return $is_white_page;
102 }
103
104 public static function load_wp_admin_style() {
105 FrmAppHelper::load_font_style();
106 }
107
108 public static function get_form_nav( $form, $show_nav = false, $title = 'show' ) {
109 $show_nav = FrmAppHelper::get_param( 'show_nav', $show_nav, 'get', 'absint' );
110 if ( empty( $show_nav ) || ! $form ) {
111 return;
112 }
113
114 FrmForm::maybe_get_form( $form );
115 if ( ! is_object( $form ) ) {
116 return;
117 }
118
119 $id = $form->id;
120 $current_page = self::get_current_page();
121 $nav_items = self::get_form_nav_items( $form );
122
123 include( FrmAppHelper::plugin_path() . '/classes/views/shared/form-nav.php' );
124 }
125
126 private static function get_current_page() {
127 $page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
128 $post_type = FrmAppHelper::simple_get( 'post_type', 'sanitize_title', 'None' );
129 $current_page = isset( $_GET['page'] ) ? $page : $post_type;
130
131 if ( FrmAppHelper::is_view_builder_page() ) {
132 $current_page = 'frm_display';
133 }
134
135 return $current_page;
136 }
137
138 private static function get_form_nav_items( $form ) {
139 $id = $form->parent_form_id ? $form->parent_form_id : $form->id;
140
141 $nav_items = array(
142 array(
143 'link' => FrmForm::get_edit_link( $id ),
144 'label' => __( 'Build', 'formidable' ),
145 'current' => array( 'edit', 'new', 'duplicate' ),
146 'page' => 'formidable',
147 'permission' => 'frm_edit_forms',
148 ),
149 array(
150 'link' => admin_url( 'admin.php?page=formidable&frm_action=settings&id=' . absint( $id ) ),
151 'label' => __( 'Settings', 'formidable' ),
152 'current' => array( 'settings' ),
153 'page' => 'formidable',
154 'permission' => 'frm_edit_forms',
155 ),
156 array(
157 'link' => admin_url( 'admin.php?page=formidable-entries&frm-full=1&frm_action=list&form=' . absint( $id ) ),
158 'label' => __( 'Entries', 'formidable' ),
159 'current' => array(),
160 'page' => 'formidable-entries',
161 'permission' => 'frm_view_entries',
162 ),
163 );
164
165 // Let people know reports and views exist.
166 if ( ! FrmAppHelper::pro_is_installed() ) {
167 $nav_items[] = array(
168 'link' => '',
169 'label' => __( 'Views', 'formidable' ),
170 'current' => array(),
171 'page' => '',
172 'permission' => 'frm_view_entries',
173 'atts' => array(
174 'class' => 'frm_show_upgrade frm_noallow',
175 'data-upgrade' => __( 'Views', 'formidable' ),
176 'data-medium' => 'views-nav',
177 ),
178 );
179 $nav_items[] = array(
180 'link' => '',
181 'label' => __( 'Reports', 'formidable' ),
182 'current' => array(),
183 'page' => '',
184 'permission' => 'frm_view_entries',
185 'atts' => array(
186 'class' => 'frm_show_upgrade frm_noallow',
187 'data-upgrade' => __( 'Reports', 'formidable' ),
188 'data-medium' => 'reports-nav',
189 ),
190 );
191 }
192
193 $nav_args = array(
194 'form_id' => $id,
195 'form' => $form,
196 );
197
198 return apply_filters( 'frm_form_nav_list', $nav_items, $nav_args );
199 }
200
201 // Adds a settings link to the plugins page
202 public static function settings_link( $links ) {
203 $settings = '<a href="' . esc_url( admin_url( 'admin.php?page=formidable' ) ) . '">' . __( 'Build a Form', 'formidable' ) . '</a>';
204 array_unshift( $links, $settings );
205
206 return $links;
207 }
208
209 public static function pro_get_started_headline() {
210 self::review_request();
211 FrmAppHelper::min_pro_version_notice( '4.0' );
212 }
213
214 /**
215 * Add admin notices as needed for reviews
216 *
217 * @since 3.04.03
218 */
219 private static function review_request() {
220 $reviews = new FrmReviews();
221 $reviews->review_request();
222 }
223
224 /**
225 * Save the request to hide the review
226 *
227 * @since 3.04.03
228 */
229 public static function dismiss_review() {
230 FrmAppHelper::permission_check( 'frm_change_settings' );
231 check_ajax_referer( 'frm_ajax', 'nonce' );
232
233 $reviews = new FrmReviews();
234 $reviews->dismiss_review();
235 }
236
237 /**
238 * @since 3.04.02
239 */
240 public static function include_upgrade_overlay() {
241 wp_enqueue_script( 'jquery-ui-dialog' );
242 wp_enqueue_style( 'jquery-ui-dialog' );
243
244 add_action( 'admin_footer', 'FrmAppController::upgrade_overlay_html' );
245 }
246
247 /**
248 * @since 3.06.03
249 */
250 public static function upgrade_overlay_html() {
251 $is_pro = FrmAppHelper::pro_is_installed();
252 $upgrade_link = array(
253 'medium' => 'builder',
254 'content' => 'upgrade',
255 );
256 $default_link = FrmAppHelper::admin_upgrade_link( $upgrade_link );
257
258 include( FrmAppHelper::plugin_path() . '/classes/views/shared/upgrade_overlay.php' );
259
260 include( FrmAppHelper::plugin_path() . '/classes/views/shared/confirm-overlay.php' );
261 }
262
263 public static function include_info_overlay() {
264 wp_enqueue_script( 'jquery-ui-dialog' );
265 wp_enqueue_style( 'jquery-ui-dialog' );
266
267 add_action( 'admin_footer', 'FrmAppController::info_overlay_html' );
268 }
269
270 public static function info_overlay_html() {
271 include( FrmAppHelper::plugin_path() . '/classes/views/shared/info-overlay.php' );
272 }
273
274 /**
275 * @since 3.04.02
276 */
277 public static function remove_upsells() {
278 remove_action( 'frm_before_settings', 'FrmSettingsController::license_box' );
279 remove_action( 'frm_after_settings', 'FrmSettingsController::settings_cta' );
280 }
281
282 /**
283 * If there are CURL problems on this server, wp_remote_post won't work for installing
284 * Use a javascript fallback instead.
285 *
286 * @since 2.0.3
287 */
288 public static function install_js_fallback() {
289 FrmAppHelper::load_admin_wide_js();
290 echo '<div id="hidden frm_install_message"></div><script type="text/javascript">jQuery(document).ready(function(){frm_install_now();});</script>';
291 }
292
293 /**
294 * Check if the database is outdated
295 *
296 * @since 2.0.1
297 * @return boolean
298 */
299 public static function needs_update() {
300 $needs_upgrade = self::compare_for_update(
301 array(
302 'option' => 'frm_db_version',
303 'new_db_version' => FrmAppHelper::$db_version,
304 'new_plugin_version' => FrmAppHelper::plugin_version(),
305 )
306 );
307
308 if ( ! $needs_upgrade ) {
309 $needs_upgrade = apply_filters( 'frm_db_needs_upgrade', $needs_upgrade );
310 }
311
312 return $needs_upgrade;
313 }
314
315 /**
316 * Check both version number and DB number for changes
317 *
318 * @since 3.0.04
319 */
320 public static function compare_for_update( $atts ) {
321 $db_version = get_option( $atts['option'] );
322
323 if ( strpos( $db_version, '-' ) === false ) {
324 $needs_upgrade = true;
325 } else {
326 $last_upgrade = explode( '-', $db_version );
327 $needs_db_upgrade = (int) $last_upgrade[1] < (int) $atts['new_db_version'];
328 $new_version = version_compare( $last_upgrade[0], $atts['new_plugin_version'], '<' );
329 $needs_upgrade = $needs_db_upgrade || $new_version;
330 }
331
332 return $needs_upgrade;
333 }
334
335 /**
336 * Check for database update and trigger js loading
337 *
338 * @since 2.0.1
339 */
340 public static function admin_init() {
341 new FrmPersonalData(); // register personal data hooks
342
343 if ( ! FrmAppHelper::doing_ajax() && self::needs_update() ) {
344 self::network_upgrade_site();
345 }
346
347 if ( ! FrmAppHelper::doing_ajax() ) {
348 // don't continue during ajax calls
349 self::admin_js();
350 }
351 }
352
353 public static function admin_js() {
354 $version = FrmAppHelper::plugin_version();
355 FrmAppHelper::load_admin_wide_js( false );
356
357 $dependecies = array(
358 'formidable_admin_global',
359 'jquery',
360 'jquery-ui-core',
361 'jquery-ui-draggable',
362 'jquery-ui-sortable',
363 'bootstrap_tooltip',
364 'bootstrap-multiselect',
365 );
366
367 if ( FrmAppHelper::is_admin_page( 'formidable-styles' ) ) {
368 $dependecies[] = 'wp-color-picker';
369 }
370
371 wp_register_script( 'formidable_admin', FrmAppHelper::plugin_url() . '/js/formidable_admin.js', $dependecies, $version, true );
372 wp_register_style( 'formidable-admin', FrmAppHelper::plugin_url() . '/css/frm_admin.css', array(), $version );
373 wp_register_script( 'bootstrap_tooltip', FrmAppHelper::plugin_url() . '/js/bootstrap.min.js', array( 'jquery' ), '3.3.4' );
374 wp_register_style( 'formidable-grids', FrmAppHelper::plugin_url() . '/css/frm_grids.css', array(), $version );
375
376 // load multselect js
377 $depends_on = array( 'jquery', 'bootstrap_tooltip' );
378 wp_register_script( 'bootstrap-multiselect', FrmAppHelper::plugin_url() . '/js/bootstrap-multiselect.js', $depends_on, '0.9.8', true );
379
380 $page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
381 $post_type = FrmAppHelper::simple_get( 'post_type', 'sanitize_title' );
382
383 global $pagenow;
384 if ( strpos( $page, 'formidable' ) === 0 || ( $pagenow == 'edit.php' && $post_type == 'frm_display' ) ) {
385
386 wp_enqueue_script( 'admin-widgets' );
387 wp_enqueue_style( 'widgets' );
388 wp_enqueue_script( 'formidable_admin' );
389 FrmAppHelper::localize_script( 'admin' );
390
391 wp_enqueue_style( 'formidable-admin' );
392 if ( 'formidable-styles' !== $page ) {
393 wp_enqueue_style( 'formidable-grids' );
394 wp_enqueue_style( 'formidable-dropzone' );
395 } else {
396 $settings = FrmAppHelper::get_settings();
397 if ( empty( $settings->old_css ) ) {
398 wp_enqueue_style( 'formidable-grids' );
399 }
400 }
401
402 if ( 'formidable-entries' === $page ) {
403 // Load front end js for entries.
404 wp_enqueue_script( 'formidable' );
405 }
406
407 do_action( 'frm_enqueue_builder_scripts' );
408 self::include_upgrade_overlay();
409 self::include_info_overlay();
410 } elseif ( FrmAppHelper::is_view_builder_page() ) {
411 if ( isset( $_REQUEST['post_type'] ) ) {
412 $post_type = sanitize_title( wp_unslash( $_REQUEST['post_type'] ) );
413 } elseif ( isset( $_REQUEST['post'] ) && absint( $_REQUEST['post'] ) ) {
414 $post = get_post( absint( wp_unslash( $_REQUEST['post'] ) ) );
415 if ( ! $post ) {
416 return;
417 }
418 $post_type = $post->post_type;
419 } else {
420 return;
421 }
422
423 if ( $post_type == 'frm_display' ) {
424 wp_enqueue_style( 'formidable-grids' );
425 wp_enqueue_script( 'jquery-ui-draggable' );
426 wp_enqueue_script( 'formidable_admin' );
427 wp_enqueue_style( 'formidable-admin' );
428 FrmAppHelper::localize_script( 'admin' );
429 self::include_info_overlay();
430 }
431 } elseif ( $pagenow == 'widgets.php' ) {
432 FrmAppHelper::load_admin_wide_js();
433 }
434 }
435
436 public static function load_lang() {
437 load_plugin_textdomain( 'formidable', false, FrmAppHelper::plugin_folder() . '/languages/' );
438 }
439
440 /**
441 * Check if the styles are updated when a form is loaded on the front-end
442 *
443 * @since 3.0.1
444 */
445 public static function maybe_update_styles() {
446 if ( self::needs_update() ) {
447 self::network_upgrade_site();
448 }
449 }
450
451 /**
452 * @since 3.0
453 */
454 public static function create_rest_routes() {
455 $args = array(
456 'methods' => 'GET',
457 'callback' => 'FrmAppController::api_install',
458 );
459 register_rest_route( 'frm-admin/v1', '/install', $args );
460 }
461
462 /**
463 * Run silent upgrade on each site in the network during a network upgrade.
464 * Update database settings for all sites in a network during network upgrade process.
465 *
466 * @since 2.0.1
467 *
468 * @param int $blog_id Blog ID.
469 */
470 public static function network_upgrade_site( $blog_id = 0 ) {
471
472 $request = new WP_REST_Request( 'GET', '/frm-admin/v1/install' );
473
474 if ( $blog_id ) {
475 switch_to_blog( $blog_id );
476 $response = rest_do_request( $request );
477 restore_current_blog();
478 } else {
479 $response = rest_do_request( $request );
480 }
481
482 if ( $response->is_error() ) {
483 // if the remove post fails, use javascript instead
484 add_action( 'admin_notices', 'FrmAppController::install_js_fallback' );
485 }
486 }
487
488 /**
489 * @since 3.0
490 */
491 public static function api_install() {
492 if ( self::needs_update() ) {
493 $running = get_option( 'frm_install_running' );
494 if ( false === $running || $running < strtotime( '-5 minutes' ) ) {
495 update_option( 'frm_install_running', time(), 'no' );
496 self::install();
497 delete_option( 'frm_install_running' );
498 }
499 }
500
501 return true;
502 }
503
504 /**
505 * Silent database upgrade (no redirect).
506 * Called via ajax request during network upgrade process.
507 *
508 * @since 2.0.1
509 */
510 public static function ajax_install() {
511 self::api_install();
512 wp_die();
513 }
514
515 public static function install() {
516 $frmdb = new FrmMigrate();
517 $frmdb->upgrade();
518 }
519
520 public static function uninstall() {
521 FrmAppHelper::permission_check( 'administrator' );
522 check_ajax_referer( 'frm_ajax', 'nonce' );
523
524 $frmdb = new FrmMigrate();
525 $frmdb->uninstall();
526
527 //disable the plugin and redirect after uninstall so the tables don't get added right back
528 $plugins = array( FrmAppHelper::plugin_folder() . '/formidable.php', 'formidable-pro/formidable-pro.php' );
529 deactivate_plugins( $plugins, false, false );
530 echo esc_url_raw( admin_url( 'plugins.php?deactivate=true' ) );
531
532 wp_die();
533 }
534
535 public static function drop_tables( $tables ) {
536 global $wpdb;
537 $tables[] = $wpdb->prefix . 'frm_fields';
538 $tables[] = $wpdb->prefix . 'frm_forms';
539 $tables[] = $wpdb->prefix . 'frm_items';
540 $tables[] = $wpdb->prefix . 'frm_item_metas';
541
542 return $tables;
543 }
544
545 public static function deauthorize() {
546 FrmAppHelper::permission_check( 'frm_change_settings' );
547 check_ajax_referer( 'frm_ajax', 'nonce' );
548
549 delete_option( 'frmpro-credentials' );
550 delete_option( 'frmpro-authorized' );
551 delete_site_option( 'frmpro-credentials' );
552 delete_site_option( 'frmpro-authorized' );
553 wp_die();
554 }
555
556 public static function set_footer_text( $text ) {
557 if ( FrmAppHelper::is_formidable_admin() ) {
558 $text = '';
559 }
560
561 return $text;
562 }
563
564 /**
565 * @deprecated 1.07.05
566 * @codeCoverageIgnore
567 */
568 public static function get_form_shortcode( $atts ) {
569 return FrmDeprecated::get_form_shortcode( $atts );
570 }
571
572 /**
573 * @deprecated 2.5.4
574 * @codeCoverageIgnore
575 */
576 public static function widget_text_filter( $content ) {
577 return FrmDeprecated::widget_text_filter( $content );
578 }
579
580 /**
581 * Deprecated in favor of wpmu_upgrade_site
582 *
583 * @deprecated 2.3
584 * @codeCoverageIgnore
585 */
586 public static function front_head() {
587 FrmDeprecated::front_head();
588 }
589
590 /**
591 * @deprecated 3.0.04
592 * @codeCoverageIgnore
593 */
594 public static function activation_install() {
595 FrmDeprecated::activation_install();
596 }
597
598 /**
599 * @deprecated 3.0
600 * @codeCoverageIgnore
601 */
602 public static function page_route( $content ) {
603 return FrmDeprecated::page_route( $content );
604 }
605 }
606