PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 5.4.2
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v5.4.2
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 5.4.2, at classes/controllers/FrmAppController.php

845 lines 23.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 class FrmAppController {
7
8 public static function menu() {
9 FrmAppHelper::maybe_add_permissions();
10 if ( ! current_user_can( 'frm_view_forms' ) ) {
11 return;
12 }
13
14 $menu_name = FrmAppHelper::get_menu_name();
15 add_menu_page( 'Formidable', $menu_name, 'frm_view_forms', 'formidable', 'FrmFormsController::route', self::menu_icon(), self::get_menu_position() );
16 }
17
18 /**
19 * @return int
20 */
21 private static function get_menu_position() {
22 return (int) apply_filters( 'frm_menu_position', 29 );
23 }
24
25 /**
26 * @since 3.05
27 */
28 private static function menu_icon() {
29 $icon = FrmAppHelper::svg_logo(
30 array(
31 'fill' => '#a0a5aa',
32 'orange' => '#a0a5aa',
33 )
34 );
35 $icon = 'data:image/svg+xml;base64,' . base64_encode( $icon );
36
37 return apply_filters( 'frm_icon', $icon );
38 }
39
40 /**
41 * @since 3.0
42 */
43 public static function add_admin_class( $classes ) {
44 if ( self::is_white_page() ) {
45 $classes .= ' frm-white-body ';
46 $classes .= self::get_os();
47
48 $page = str_replace( 'formidable-', '', FrmAppHelper::simple_get( 'page', 'sanitize_title' ) );
49 if ( empty( $page ) || $page === 'formidable' ) {
50 $action = FrmAppHelper::simple_get( 'frm_action', 'sanitize_title' );
51 if ( in_array( $action, array( 'settings', 'edit', 'list' ) ) ) {
52 $page .= $action;
53 } else {
54 $page = $action;
55 }
56 }
57 if ( ! empty( $page ) ) {
58 $classes .= ' frm-admin-page-' . $page;
59 }
60 }
61
62 if ( FrmAppHelper::is_full_screen() ) {
63 $classes .= apply_filters( 'frm_admin_full_screen_class', ' frm-full-screen folded' );
64 }
65
66 return $classes;
67 }
68
69 /**
70 * @since 4.0
71 */
72 private static function get_os() {
73 $agent = strtolower( FrmAppHelper::get_server_value( 'HTTP_USER_AGENT' ) );
74 $os = '';
75 if ( strpos( $agent, 'mac' ) !== false ) {
76 $os = ' osx';
77 } elseif ( strpos( $agent, 'linux' ) !== false ) {
78 $os = ' linux';
79 } elseif ( strpos( $agent, 'windows' ) !== false ) {
80 $os = ' windows';
81 }
82 return $os;
83 }
84
85 /**
86 * @since 3.0
87 */
88 private static function is_white_page() {
89 $white_pages = array(
90 'formidable',
91 'formidable-entries',
92 'formidable-views',
93 'formidable-pro-upgrade',
94 'formidable-addons',
95 'formidable-import',
96 'formidable-settings',
97 'formidable-styles',
98 'formidable-styles2',
99 'formidable-inbox',
100 'formidable-welcome',
101 'formidable-applications',
102 );
103
104 $get_page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
105 $is_white_page = in_array( $get_page, $white_pages, true );
106
107 if ( ! $is_white_page ) {
108 $screen = get_current_screen();
109 $is_white_page = ( $screen && strpos( $screen->id, 'frm_display' ) !== false );
110 }
111
112 /**
113 * Allow another add on to style a page as a Formidable "white page", which adds a white background color.
114 *
115 * @since 5.3
116 *
117 * @param bool $is_white_page
118 */
119 $is_white_page = apply_filters( 'frm_is_white_page', $is_white_page );
120
121 return $is_white_page;
122 }
123
124 public static function load_wp_admin_style() {
125 FrmAppHelper::load_font_style();
126 }
127
128 public static function get_form_nav( $form, $show_nav = false, $title = 'show' ) {
129 $show_nav = FrmAppHelper::get_param( 'show_nav', $show_nav, 'get', 'absint' );
130 if ( empty( $show_nav ) || ! $form ) {
131 return;
132 }
133
134 FrmForm::maybe_get_form( $form );
135 if ( ! is_object( $form ) ) {
136 return;
137 }
138
139 $id = $form->id;
140 $current_page = self::get_current_page();
141 $nav_items = self::get_form_nav_items( $form );
142
143 include( FrmAppHelper::plugin_path() . '/classes/views/shared/form-nav.php' );
144 }
145
146 private static function get_current_page() {
147 $page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
148 $post_type = FrmAppHelper::simple_get( 'post_type', 'sanitize_title', 'None' );
149 $current_page = isset( $_GET['page'] ) ? $page : $post_type;
150
151 if ( FrmAppHelper::is_view_builder_page() ) {
152 $current_page = 'frm_display';
153 }
154
155 return $current_page;
156 }
157
158 private static function get_form_nav_items( $form ) {
159 $id = $form->parent_form_id ? $form->parent_form_id : $form->id;
160
161 $nav_items = array(
162 array(
163 'link' => FrmForm::get_edit_link( $id ),
164 'label' => __( 'Build', 'formidable' ),
165 'current' => array( 'edit', 'new', 'duplicate' ),
166 'page' => 'formidable',
167 'permission' => 'frm_edit_forms',
168 ),
169 array(
170 'link' => admin_url( 'admin.php?page=formidable&frm_action=settings&id=' . absint( $id ) ),
171 'label' => __( 'Settings', 'formidable' ),
172 'current' => array( 'settings' ),
173 'page' => 'formidable',
174 'permission' => 'frm_edit_forms',
175 ),
176 array(
177 'link' => admin_url( 'admin.php?page=formidable-entries&frm-full=1&frm_action=list&form=' . absint( $id ) ),
178 'label' => __( 'Entries', 'formidable' ),
179 'current' => array(),
180 'page' => 'formidable-entries',
181 'permission' => 'frm_view_entries',
182 ),
183 );
184
185 $views_installed = is_callable( 'FrmProAppHelper::views_is_installed' ) ? FrmProAppHelper::views_is_installed() : FrmAppHelper::pro_is_installed();
186
187 if ( ! $views_installed ) {
188 $nav_items[] = array(
189 'link' => admin_url( 'admin.php?page=formidable-views&frm-full=1&form=' . absint( $id ) ),
190 'label' => __( 'Views', 'formidable' ),
191 'current' => array(),
192 'page' => 'formidable-views',
193 'permission' => 'frm_view_entries',
194 'atts' => array(
195 'class' => 'frm_noallow',
196 ),
197 );
198 }
199
200 // Let people know reports and views exist.
201 if ( ! FrmAppHelper::pro_is_installed() ) {
202 $nav_items[] = array(
203 'link' => admin_url( 'admin.php?page=formidable&frm_action=lite-reports&frm-full=1&form=' . absint( $id ) ),
204 'label' => __( 'Reports', 'formidable' ),
205 'current' => array( 'reports' ),
206 'page' => 'formidable',
207 'permission' => 'frm_view_entries',
208 'atts' => array(
209 'class' => 'frm_noallow',
210 ),
211 );
212 }
213
214 $nav_args = array(
215 'form_id' => $id,
216 'form' => $form,
217 );
218
219 return apply_filters( 'frm_form_nav_list', $nav_items, $nav_args );
220 }
221
222 // Adds a settings link to the plugins page
223 public static function settings_link( $links ) {
224 $settings = array();
225
226 if ( ! FrmAppHelper::pro_is_installed() ) {
227 $settings[] = '<a href="' . esc_url( FrmAppHelper::admin_upgrade_link( 'plugin-row' ) ) . '" target="_blank" rel="noopener"><b>' . esc_html__( 'Upgrade to Pro', 'formidable' ) . '</b></a>';
228 }
229
230 $settings[] = '<a href="' . esc_url( admin_url( 'admin.php?page=formidable' ) ) . '">' . __( 'Build a Form', 'formidable' ) . '</a>';
231
232 return array_merge( $settings, $links );
233 }
234
235 public static function pro_get_started_headline() {
236 self::review_request();
237 FrmAppHelper::min_pro_version_notice( '4.0' );
238 }
239
240 /**
241 * Add admin notices as needed for reviews
242 *
243 * @since 3.04.03
244 */
245 private static function review_request() {
246 $reviews = new FrmReviews();
247 $reviews->review_request();
248 }
249
250 /**
251 * Save the request to hide the review
252 *
253 * @since 3.04.03
254 */
255 public static function dismiss_review() {
256 FrmAppHelper::permission_check( 'frm_change_settings' );
257 check_ajax_referer( 'frm_ajax', 'nonce' );
258
259 $reviews = new FrmReviews();
260 $reviews->dismiss_review();
261 }
262
263 /**
264 * @since 3.04.02
265 */
266 public static function include_upgrade_overlay() {
267 self::enqueue_dialog_assets();
268 add_action( 'admin_footer', 'FrmAppController::upgrade_overlay_html' );
269 }
270
271 /**
272 * Enqueue scripts and styles required for modals.
273 *
274 * @since 5.3
275 *
276 * @return void
277 */
278 public static function enqueue_dialog_assets() {
279 wp_enqueue_script( 'jquery-ui-dialog' );
280 wp_enqueue_style( 'jquery-ui-dialog' );
281 }
282
283 /**
284 * @since 3.06.03
285 */
286 public static function upgrade_overlay_html() {
287 $is_pro = FrmAppHelper::pro_is_installed();
288 $upgrade_link = array(
289 'medium' => 'builder',
290 'content' => 'upgrade',
291 );
292 $default_link = FrmAppHelper::admin_upgrade_link( $upgrade_link );
293 $plugin_path = FrmAppHelper::plugin_path();
294 $shared_path = $plugin_path . '/classes/views/shared/';
295
296 include $shared_path . 'upgrade_overlay.php';
297 include $shared_path . 'confirm-overlay.php';
298
299 if ( FrmAppHelper::is_admin_page( 'formidable-welcome' ) || FrmAppHelper::on_form_listing_page() ) {
300 self::new_form_overlay_html();
301 }
302 }
303
304 private static function new_form_overlay_html() {
305 FrmFormsController::before_list_templates();
306
307 $plugin_path = FrmAppHelper::plugin_path();
308 $path = $plugin_path . '/classes/views/frm-forms/';
309 $expired = FrmFormsController::expired();
310 $expiring = FrmAddonsController::is_license_expiring();
311 $user = wp_get_current_user(); // $user used in leave-email.php to determine a default value for field
312 $view_path = $path . 'new-form-overlay/';
313 $modal_class = '';
314 $upgrade_link = FrmAppHelper::admin_upgrade_link(
315 array(
316 'medium' => 'new-template',
317 'content' => 'upgrade',
318 )
319 );
320 $renew_link = FrmAppHelper::admin_upgrade_link(
321 array(
322 'medium' => 'new-template',
323 'content' => 'renew',
324 )
325 );
326 $blocks_to_render = array();
327
328 if ( ! FrmAppHelper::pro_is_installed() ) {
329 // avoid rendering the email and code blocks for users who have upgraded or have a free license already
330 $api = new FrmFormTemplateApi();
331 if ( ! $api->has_free_access() ) {
332 array_push( $blocks_to_render, 'email', 'code' );
333 }
334 }
335
336 // avoid rendering the upgrade block for users with elite
337 if ( 'elite' !== FrmAddonsController::license_type() ) {
338 $blocks_to_render[] = 'upgrade';
339 }
340
341 // avoid rendering the renew block for users who are not currently expired
342 if ( $expired ) {
343 $blocks_to_render[] = 'renew';
344 $modal_class = 'frm-expired';
345 } elseif ( $expiring ) {
346 $modal_class = 'frm-expiring';
347 }
348
349 include $path . 'new-form-overlay.php';
350 }
351
352 public static function include_info_overlay() {
353 self::enqueue_dialog_assets();
354 add_action( 'admin_footer', 'FrmAppController::info_overlay_html' );
355 }
356
357 public static function info_overlay_html() {
358 include FrmAppHelper::plugin_path() . '/classes/views/shared/info-overlay.php';
359 }
360
361 /**
362 * @since 3.04.02
363 */
364 public static function remove_upsells() {
365 remove_action( 'frm_before_settings', 'FrmSettingsController::license_box' );
366 remove_action( 'frm_after_settings', 'FrmSettingsController::settings_cta' );
367 remove_action( 'frm_add_form_style_tab_options', 'FrmFormsController::add_form_style_tab_options' );
368 remove_action( 'frm_after_field_options', 'FrmFormsController::logic_tip' );
369 }
370
371 /**
372 * If there are CURL problems on this server, wp_remote_post won't work for installing
373 * Use a javascript fallback instead.
374 *
375 * @since 2.0.3
376 */
377 public static function install_js_fallback() {
378 FrmAppHelper::load_admin_wide_js();
379 echo '<div id="hidden frm_install_message"></div><script type="text/javascript">jQuery(document).ready(function(){frm_install_now();});</script>';
380 }
381
382 /**
383 * Check if the database is outdated
384 *
385 * @since 2.0.1
386 * @return boolean
387 */
388 public static function needs_update() {
389 $needs_upgrade = self::compare_for_update(
390 array(
391 'option' => 'frm_db_version',
392 'new_db_version' => FrmAppHelper::$db_version,
393 'new_plugin_version' => FrmAppHelper::plugin_version(),
394 )
395 );
396
397 if ( ! $needs_upgrade ) {
398 $needs_upgrade = apply_filters( 'frm_db_needs_upgrade', $needs_upgrade );
399 }
400
401 return $needs_upgrade;
402 }
403
404 /**
405 * Check both version number and DB number for changes
406 *
407 * @since 3.0.04
408 */
409 public static function compare_for_update( $atts ) {
410 $db_version = get_option( $atts['option'] );
411
412 if ( strpos( $db_version, '-' ) === false ) {
413 $needs_upgrade = true;
414 } else {
415 $last_upgrade = explode( '-', $db_version );
416 $needs_db_upgrade = (int) $last_upgrade[1] < (int) $atts['new_db_version'];
417 $new_version = version_compare( $last_upgrade[0], $atts['new_plugin_version'], '<' );
418 $needs_upgrade = $needs_db_upgrade || $new_version;
419 }
420
421 return $needs_upgrade;
422 }
423
424 /**
425 * Check for database update and trigger js loading
426 *
427 * @since 2.0.1
428 */
429 public static function admin_init() {
430 if ( FrmAppHelper::is_admin_page( 'formidable' ) && 'duplicate' === FrmAppHelper::get_param( 'frm_action' ) ) {
431 FrmFormsController::duplicate();
432 }
433
434 new FrmPersonalData(); // register personal data hooks
435
436 if ( ! FrmAppHelper::doing_ajax() && self::needs_update() ) {
437 self::network_upgrade_site();
438 }
439
440 if ( ! FrmAppHelper::doing_ajax() ) {
441 // don't continue during ajax calls
442 self::admin_js();
443 }
444
445 if ( FrmAppHelper::is_admin_page( 'formidable' ) ) {
446 $action = FrmAppHelper::get_param( 'frm_action' );
447
448 if ( in_array( $action, array( 'add_new', 'list_templates' ), true ) ) {
449 wp_safe_redirect( admin_url( 'admin.php?page=formidable&triggerNewFormModal=1' ) );
450 exit;
451 }
452
453 FrmInbox::maybe_disable_screen_options();
454 }
455 }
456
457 /**
458 * @return void
459 */
460 public static function admin_js() {
461 $plugin_url = FrmAppHelper::plugin_url();
462 $version = FrmAppHelper::plugin_version();
463
464 FrmAppHelper::load_admin_wide_js();
465
466 wp_register_style( 'formidable_admin_global', $plugin_url . '/css/admin/frm_admin_global.css', array(), $version );
467 wp_enqueue_style( 'formidable_admin_global' );
468
469 wp_register_style( 'formidable-admin', $plugin_url . '/css/frm_admin.css', array(), $version );
470 wp_register_style( 'formidable-grids', $plugin_url . '/css/frm_grids.css', array(), $version );
471
472 wp_register_script( 'formidable_dom', $plugin_url . '/js/admin/dom.js', array( 'jquery', 'jquery-ui-dialog', 'wp-i18n' ), $version, true );
473 wp_register_script( 'formidable_embed', $plugin_url . '/js/admin/embed.js', array( 'formidable_dom', 'jquery-ui-autocomplete' ), $version, true );
474 self::register_popper1();
475 wp_register_script( 'bootstrap_tooltip', $plugin_url . '/js/bootstrap.min.js', array( 'jquery', 'popper' ), '4.6.1', true );
476
477 $page = FrmAppHelper::simple_get( 'page', 'sanitize_title' );
478
479 if ( 'formidable-applications' === $page ) {
480 FrmApplicationsController::load_assets();
481 return;
482 }
483
484 $dependencies = array(
485 'formidable_admin_global',
486 'jquery',
487 'jquery-ui-core',
488 'jquery-ui-draggable',
489 'jquery-ui-sortable',
490 'bootstrap_tooltip',
491 'bootstrap-multiselect',
492 'wp-i18n',
493 'formidable_dom',
494 'formidable_embed',
495 );
496
497 if ( FrmAppHelper::is_admin_page( 'formidable-styles' ) || FrmAppHelper::is_admin_page( 'formidable-styles2' ) ) {
498 $dependencies[] = 'wp-color-picker';
499 }
500
501 wp_register_script( 'formidable_admin', $plugin_url . '/js/formidable_admin.js', $dependencies, $version, true );
502
503 if ( FrmAppHelper::on_form_listing_page() ) {
504 // For the existing page dropdown in the Form embed modal.
505 wp_enqueue_script( 'jquery-ui-autocomplete' );
506 }
507
508 wp_register_script( 'bootstrap-multiselect', $plugin_url . '/js/bootstrap-multiselect.js', array( 'jquery', 'bootstrap_tooltip', 'popper' ), '1.1.1', true );
509
510 $post_type = FrmAppHelper::simple_get( 'post_type', 'sanitize_title' );
511
512 global $pagenow;
513 if ( strpos( $page, 'formidable' ) === 0 || ( $pagenow === 'edit.php' && $post_type === 'frm_display' ) ) {
514
515 wp_enqueue_script( 'admin-widgets' );
516 wp_enqueue_style( 'widgets' );
517 self::maybe_deregister_popper2();
518 wp_enqueue_script( 'formidable_admin' );
519 wp_enqueue_script( 'formidable_embed' );
520 FrmAppHelper::localize_script( 'admin' );
521
522 wp_enqueue_style( 'formidable-admin' );
523 if ( 'formidable-styles' !== $page && 'formidable-styles2' !== $page ) {
524 wp_enqueue_style( 'formidable-grids' );
525 wp_enqueue_style( 'formidable-dropzone' );
526 } else {
527 wp_enqueue_style( 'formidable-grids' );
528 }
529
530 if ( 'formidable-entries' === $page ) {
531 // Load front end js for entries.
532 wp_enqueue_script( 'formidable' );
533 }
534
535 do_action( 'frm_enqueue_builder_scripts' );
536 self::include_upgrade_overlay();
537 self::include_info_overlay();
538 } elseif ( FrmAppHelper::is_view_builder_page() ) {
539 if ( isset( $_REQUEST['post_type'] ) ) {
540 $post_type = sanitize_title( wp_unslash( $_REQUEST['post_type'] ) );
541 } elseif ( isset( $_REQUEST['post'] ) && absint( $_REQUEST['post'] ) ) {
542 $post = get_post( absint( wp_unslash( $_REQUEST['post'] ) ) );
543 if ( ! $post ) {
544 return;
545 }
546 $post_type = $post->post_type;
547 } else {
548 return;
549 }
550
551 if ( $post_type === 'frm_display' ) {
552 wp_enqueue_style( 'formidable-grids' );
553 wp_enqueue_script( 'jquery-ui-draggable' );
554 self::maybe_deregister_popper2();
555 wp_enqueue_script( 'formidable_admin' );
556 wp_enqueue_style( 'formidable-admin' );
557 FrmAppHelper::localize_script( 'admin' );
558 self::include_info_overlay();
559 }
560 }
561
562 self::maybe_force_formidable_block_on_gutenberg_page();
563 }
564
565 /**
566 * Fix a Duplicator Pro conflict because it uses Popper 2. See issue #3459.
567 *
568 * @since 5.2.02.01
569 *
570 * @return void
571 */
572 private static function maybe_deregister_popper2() {
573 global $wp_scripts;
574
575 if ( ! array_key_exists( 'popper', $wp_scripts->registered ) ) {
576 return;
577 }
578
579 $popper = $wp_scripts->registered['popper'];
580 if ( version_compare( $popper->ver, '2.0', '>=' ) ) {
581 wp_deregister_script( 'popper' );
582 self::register_popper1();
583 }
584 }
585
586 /**
587 * Register Popper required for Bootstrap 4.
588 *
589 * @since 5.2.02.01
590 *
591 * @return void
592 */
593 private static function register_popper1() {
594 wp_register_script( 'popper', FrmAppHelper::plugin_url() . '/js/popper.min.js', array( 'jquery' ), '1.16.0', true );
595 }
596
597 /**
598 * Automatically insert a Formidable block when loading Gutenberg when $_GET['frmForm' is set.
599 *
600 * @since 5.2
601 *
602 * @return void
603 */
604 private static function maybe_force_formidable_block_on_gutenberg_page() {
605 global $pagenow;
606 if ( 'post.php' !== $pagenow ) {
607 return;
608 }
609
610 $form_id = FrmAppHelper::simple_get( 'frmForm', 'absint' );
611 if ( ! $form_id ) {
612 return;
613 }
614
615 self::add_js_to_inject_gutenberg_block( 'formidable/simple-form', 'formId', $form_id );
616 }
617
618 /**
619 * @since 5.3
620 *
621 * @return void
622 */
623 public static function add_js_to_inject_gutenberg_block( $block_name, $object_key, $object_id ) {
624 require FrmAppHelper::plugin_path() . '/classes/views/shared/edit-page-js.php';
625 }
626
627 public static function load_lang() {
628 load_plugin_textdomain( 'formidable', false, FrmAppHelper::plugin_folder() . '/languages/' );
629 }
630
631 /**
632 * Check if the styles are updated when a form is loaded on the front-end
633 *
634 * @since 3.0.1
635 */
636 public static function maybe_update_styles() {
637 if ( self::needs_update() ) {
638 self::network_upgrade_site();
639 }
640 }
641
642 /**
643 * @since 3.0
644 */
645 public static function create_rest_routes() {
646 $args = array(
647 'methods' => 'GET',
648 'callback' => 'FrmAppController::api_install',
649 'permission_callback' => __CLASS__ . '::can_update_db',
650 );
651
652 register_rest_route( 'frm-admin/v1', '/install', $args );
653
654 $args = array(
655 'methods' => 'GET',
656 'callback' => 'FrmAddonsController::install_addon_api',
657 'permission_callback' => 'FrmAddonsController::can_install_addon_api',
658 );
659
660 register_rest_route( 'frm-admin/v1', '/install-addon', $args );
661 }
662
663 /**
664 * Make sure the install is only being run when we tell it to.
665 * We don't want to run manually by people calling the API.
666 *
667 * @since 4.06.02
668 */
669 public static function can_update_db() {
670 return get_transient( 'frm_updating_api' );
671 }
672
673 /**
674 * Run silent upgrade on each site in the network during a network upgrade.
675 * Update database settings for all sites in a network during network upgrade process.
676 *
677 * @since 2.0.1
678 *
679 * @param int $blog_id Blog ID.
680 */
681 public static function network_upgrade_site( $blog_id = 0 ) {
682 // Flag to check if install is happening as intended.
683 set_transient( 'frm_updating_api', true, MINUTE_IN_SECONDS );
684 $request = new WP_REST_Request( 'GET', '/frm-admin/v1/install' );
685
686 self::maybe_add_wp_site_health();
687
688 if ( $blog_id ) {
689 switch_to_blog( $blog_id );
690 $response = rest_do_request( $request );
691 restore_current_blog();
692 } else {
693 $response = rest_do_request( $request );
694 }
695
696 if ( $response->is_error() ) {
697 // if the remove post fails, use javascript instead
698 add_action( 'admin_notices', 'FrmAppController::install_js_fallback' );
699 }
700 }
701
702 /**
703 * Make sure WP_Site_Health has been included because it is required when calling rest_do_request.
704 * Check first that the file exists because WP_Site_Health was only introduced in WordPress 5.2.
705 */
706 private static function maybe_add_wp_site_health() {
707 if ( ! class_exists( 'WP_Site_Health' ) ) {
708 $wp_site_health_path = ABSPATH . 'wp-admin/includes/class-wp-site-health.php';
709 if ( file_exists( $wp_site_health_path ) ) {
710 require_once $wp_site_health_path;
711 }
712 }
713 }
714
715 /**
716 * @since 3.0
717 */
718 public static function api_install() {
719 delete_transient( 'frm_updating_api' );
720 if ( self::needs_update() ) {
721 $running = get_option( 'frm_install_running' );
722 if ( false === $running || $running < strtotime( '-5 minutes' ) ) {
723 update_option( 'frm_install_running', time(), 'no' );
724 self::install();
725 delete_option( 'frm_install_running' );
726 }
727 }
728
729 return true;
730 }
731
732 /**
733 * Silent database upgrade (no redirect).
734 * Called via ajax request during network upgrade process.
735 *
736 * @since 2.0.1
737 */
738 public static function ajax_install() {
739 self::api_install();
740 wp_die();
741 }
742
743 public static function install() {
744 $frmdb = new FrmMigrate();
745 $frmdb->upgrade();
746 }
747
748 public static function uninstall() {
749 FrmAppHelper::permission_check( 'administrator' );
750 check_ajax_referer( 'frm_ajax', 'nonce' );
751
752 $frmdb = new FrmMigrate();
753 $frmdb->uninstall();
754
755 //disable the plugin and redirect after uninstall so the tables don't get added right back
756 $plugins = array( FrmAppHelper::plugin_folder() . '/formidable.php', 'formidable-pro/formidable-pro.php' );
757 deactivate_plugins( $plugins, false, false );
758 echo esc_url_raw( admin_url( 'plugins.php?deactivate=true' ) );
759
760 wp_die();
761 }
762
763 public static function drop_tables( $tables ) {
764 global $wpdb;
765 $tables[] = $wpdb->prefix . 'frm_fields';
766 $tables[] = $wpdb->prefix . 'frm_forms';
767 $tables[] = $wpdb->prefix . 'frm_items';
768 $tables[] = $wpdb->prefix . 'frm_item_metas';
769
770 return $tables;
771 }
772
773 public static function deauthorize() {
774 FrmAppHelper::permission_check( 'frm_change_settings' );
775 check_ajax_referer( 'frm_ajax', 'nonce' );
776
777 delete_option( 'frmpro-credentials' );
778 delete_option( 'frmpro-authorized' );
779 delete_site_option( 'frmpro-credentials' );
780 delete_site_option( 'frmpro-authorized' );
781 wp_die();
782 }
783
784 public static function set_footer_text( $text ) {
785 if ( FrmAppHelper::is_formidable_admin() ) {
786 $text = '';
787 }
788
789 return $text;
790 }
791
792 /**
793 * @deprecated 1.07.05
794 * @codeCoverageIgnore
795 */
796 public static function get_form_shortcode( $atts ) {
797 return FrmDeprecated::get_form_shortcode( $atts );
798 }
799
800 /**
801 * @deprecated 2.5.4
802 * @codeCoverageIgnore
803 */
804 public static function widget_text_filter( $content ) {
805 return FrmDeprecated::widget_text_filter( $content );
806 }
807
808 /**
809 * Deprecated in favor of wpmu_upgrade_site
810 *
811 * @deprecated 2.3
812 * @codeCoverageIgnore
813 */
814 public static function front_head() {
815 FrmDeprecated::front_head();
816 }
817
818 /**
819 * @deprecated 3.0.04
820 * @codeCoverageIgnore
821 */
822 public static function activation_install() {
823 FrmDeprecated::activation_install();
824 }
825
826 /**
827 * @deprecated 3.0
828 * @codeCoverageIgnore
829 */
830 public static function page_route( $content ) {
831 return FrmDeprecated::page_route( $content );
832 }
833
834 /**
835 * Include icons on page for Embed Form modal.
836 *
837 * @since 5.2
838 *
839 * @return void
840 */
841 public static function include_embed_form_icons() {
842 _deprecated_function( __METHOD__, '5.3' );
843 }
844 }
845