3 * @package WPSEO\admin|ajax
7 * Class Yoast_Plugin_Conflict_Ajax
9 class Yoast_Plugin_Conflict_Ajax {
14 private $option_name = 'wpseo_dismissed_conflicts';
19 private $dismissed_conflicts = array();
22 * Initialize the hooks for the AJAX request
24 public function __construct() {
25 add_action( 'wp_ajax_wpseo_dismiss_plugin_conflict', array( $this, 'dismiss_notice' ) );
29 * Handles the dismiss notice request
31 public function dismiss_notice() {
32 check_ajax_referer( 'dismiss-plugin-conflict' );
34 $conflict_data = filter_input( INPUT_POST, 'data', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
36 $this->dismissed_conflicts = $this->get_dismissed_conflicts( $conflict_data['section'] );
38 $this->compare_plugins( $conflict_data['plugins'] );
40 $this->save_dismissed_conflicts( $conflict_data['section'] );
46 * Getting the user option from the database
50 private function get_dismissed_option() {
51 return get_user_meta( get_current_user_id(), $this->option_name, true );
55 * Getting the dismissed conflicts from the database
57 * @param string $plugin_section
61 private function get_dismissed_conflicts( $plugin_section ) {
62 $dismissed_conflicts = $this->get_dismissed_option();
64 if ( is_array( $dismissed_conflicts ) && array_key_exists( $plugin_section, $dismissed_conflicts ) ) {
65 return $dismissed_conflicts[ $plugin_section ];
72 * Storing the conflicting plugins as an user option in the database
74 * @param string $plugin_section
76 private function save_dismissed_conflicts( $plugin_section ) {
77 $dismissed_conflicts = $this->get_dismissed_option();
79 $dismissed_conflicts[ $plugin_section ] = $this->dismissed_conflicts;
81 update_user_meta( get_current_user_id(), $this->option_name, $dismissed_conflicts );
85 * Loop through the plugins to compare them with the already stored dismissed plugin conflicts
87 * @param array $posted_plugins
89 public function compare_plugins( array $posted_plugins ) {
90 foreach ( $posted_plugins as $posted_plugin ) {
91 $this->compare_plugin( $posted_plugin );
96 * Check if plugin is already dismissed, if not store it in the array that will be saved later
98 * @param string $posted_plugin
100 private function compare_plugin( $posted_plugin ) {
101 if ( ! in_array( $posted_plugin, $this->dismissed_conflicts ) ) {
102 $this->dismissed_conflicts[] = $posted_plugin;