92 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * WPSEO plugin file.
 | 
						|
 *
 | 
						|
 * @package WPSEO\Admin\Ajax
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * This class will catch the request to dismiss the target notice (set by notice_name)
 | 
						|
 * and will store the dismiss status as an user meta in the database.
 | 
						|
 */
 | 
						|
class Yoast_Dismissable_Notice_Ajax {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Notice type toggle value for user notices.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	const FOR_USER = 'user_meta';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Notice type toggle value for network notices.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	const FOR_NETWORK = 'site_option';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Notice type toggle value for site notices.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	const FOR_SITE = 'option';
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Name of the notice that will be dismissed.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	private $notice_name;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The type of the current notice.
 | 
						|
	 *
 | 
						|
	 * @var string
 | 
						|
	 */
 | 
						|
	private $notice_type;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Initialize the hooks for the AJAX request.
 | 
						|
	 *
 | 
						|
	 * @param string $notice_name The name for the hook to catch the notice.
 | 
						|
	 * @param string $notice_type The notice type.
 | 
						|
	 */
 | 
						|
	public function __construct( $notice_name, $notice_type = self::FOR_USER ) {
 | 
						|
		$this->notice_name = $notice_name;
 | 
						|
		$this->notice_type = $notice_type;
 | 
						|
 | 
						|
		add_action( 'wp_ajax_wpseo_dismiss_' . $notice_name, [ $this, 'dismiss_notice' ] );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Handles the dismiss notice request.
 | 
						|
	 */
 | 
						|
	public function dismiss_notice() {
 | 
						|
		check_ajax_referer( 'wpseo-dismiss-' . $this->notice_name );
 | 
						|
 | 
						|
		$this->save_dismissed();
 | 
						|
 | 
						|
		wp_die( 'true' );
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Storing the dismissed value in the database. The target location is based on the set notification type.
 | 
						|
	 */
 | 
						|
	private function save_dismissed() {
 | 
						|
		if ( $this->notice_type === self::FOR_SITE ) {
 | 
						|
			update_option( 'wpseo_dismiss_' . $this->notice_name, 1 );
 | 
						|
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( $this->notice_type === self::FOR_NETWORK ) {
 | 
						|
			update_site_option( 'wpseo_dismiss_' . $this->notice_name, 1 );
 | 
						|
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		update_user_meta( get_current_user_id(), 'wpseo_dismiss_' . $this->notice_name, 1 );
 | 
						|
	}
 | 
						|
}
 |