PluginProbe
Faust.js / 1.0.2
Faust.js v1.0.2
1.8.12 1.8.11 1.4.1 1.8.0 1.8.8 1.8.9 trunk 0.7.0 0.7.1 0.7.10 0.7.11 0.7.3 0.7.4 0.7.5 0.7.6 0.7.7 0.7.8 0.7.9 0.8.0 0.8.1 0.8.3 0.8.4 0.8.5 0.8.6 0.8.7 All 40 releases
faustwp / includes / detect-conflicts / callbacks.php

callbacks.php in Faust.js 1.0.2, at includes/detect-conflicts/callbacks.php

114 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Callbacks for display and dismissal of plugin conflicts warning.
4 *
5 * @package FaustWP
6 */
7
8 namespace WPE\FaustWP\Detect_Conflicts;
9
10 /** Unique ID for the conflict warning. */
11 const NOTICE_ID = 'faustwp_plugin_conflicts';
12
13 /**
14 * Renders the plugin conflicts admin notice.
15 *
16 * @return void
17 */
18 function show_warning() {
19 if ( ! needs_warning() ) {
20 return;
21 }
22
23 $plugins = get_plugin_conflicts();
24 $warnings = array();
25
26 foreach ( $plugins as $plugin ) {
27 $plugin_headers = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
28 $warnings[] = $plugin_headers['Name'];
29 }
30
31 printf(
32 '<div id="%s" class="notice notice-warning notice-alt is-dismissible">
33 <h2 class="notice-title">%s</h2>
34 <p>%s</p>
35 <p>%s</p>
36 </div>',
37 esc_attr( NOTICE_ID ),
38 esc_html__( 'Faust detected incompatible plugins', 'faustwp' ),
39 esc_html__( 'The following active plugins are known to conflict with Faust and may cause unexpected behavior:', 'faustwp' ),
40 esc_html( implode( ', ', $warnings ) )
41 );
42 }
43 add_action( 'admin_notices', __NAMESPACE__ . '\\show_warning' );
44
45 /**
46 * Includes a script for dismissing the plugin conflicts warning.
47 *
48 * Modified from https://github.com/WPTT/admin-notices.
49 *
50 * @return void
51 */
52 function print_scripts() {
53 if ( ! needs_warning() ) {
54 return;
55 }
56
57 // Create a nonce.
58 $nonce = wp_create_nonce( NOTICE_ID );
59 ?>
60 <script>
61
62 window.addEventListener( 'load', function() {
63 let wait_for_btn = null;
64 let notice_selector = '#<?php echo esc_attr( NOTICE_ID ); ?> .notice-dismiss';
65
66 // Wait for core WP to add the dismiss button to the notice.
67 wait_for_btn = setInterval(function() {
68 let dismissBtn = document.querySelector( notice_selector );
69
70 if (!dismissBtn && !dismissBtn.length) {
71 return;
72 }
73
74 clearInterval(wait_for_btn);
75
76 // Add an event listener to the dismiss button.
77 dismissBtn.addEventListener( 'click', function( event ) {
78 let postData = new FormData();
79 postData.append('action', '<?php echo esc_attr( NOTICE_ID ); ?>');
80 postData.append('nonce', '<?php echo esc_html( $nonce ); ?>');
81
82 window.fetch('<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>', {
83 method: 'POST',
84 body: postData,
85 })
86 });
87 }, 100);
88 });
89 </script>
90 <?php
91 }
92 add_action( 'admin_footer', __NAMESPACE__ . '\\print_scripts' );
93
94 /**
95 * Ajax handler for dismissing plugin conflicts.
96 *
97 * Modified from https://github.com/WPTT/admin-notices.
98 *
99 * @return void
100 */
101 function ajax_maybe_dismiss_conflicts() {
102 // Sanity check: Early exit if we're not on a faustwp_plugin_conflicts action.
103 if ( ! isset( $_POST['action'] ) || esc_attr( NOTICE_ID ) !== $_POST['action'] ) {
104 return;
105 }
106
107 // Security check: Make sure nonce is OK.
108 check_ajax_referer( NOTICE_ID, 'nonce', true );
109
110 // If we got this far, we need to dismiss the current plugin conflicts.
111 dismiss_active_conflicts();
112 }
113 add_action( 'wp_ajax_' . NOTICE_ID, __NAMESPACE__ . '\\ajax_maybe_dismiss_conflicts' );
114