106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * WPSEO plugin file.
 | |
|  *
 | |
|  * @package WPSEO\Admin
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Handles the Gutenberg Compatibility notification showing and hiding.
 | |
|  */
 | |
| class WPSEO_Admin_Gutenberg_Compatibility_Notification implements WPSEO_WordPress_Integration {
 | |
| 
 | |
| 	/**
 | |
| 	 * Notification ID to use.
 | |
| 	 *
 | |
| 	 * @var string
 | |
| 	 */
 | |
| 	private $notification_id = 'wpseo-outdated-gutenberg-plugin';
 | |
| 
 | |
| 	/**
 | |
| 	 * Instance of gutenberg compatibility checker.
 | |
| 	 *
 | |
| 	 * @var WPSEO_Gutenberg_Compatibility
 | |
| 	 */
 | |
| 	protected $compatibility_checker;
 | |
| 
 | |
| 	/**
 | |
| 	 * Instance of Yoast Notification Center.
 | |
| 	 *
 | |
| 	 * @var Yoast_Notification_Center
 | |
| 	 */
 | |
| 	protected $notification_center;
 | |
| 
 | |
| 	/**
 | |
| 	 * WPSEO_Admin_Gutenberg_Compatibility_Notification constructor.
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		$this->compatibility_checker = new WPSEO_Gutenberg_Compatibility();
 | |
| 		$this->notification_center   = Yoast_Notification_Center::get();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Registers all hooks to WordPress.
 | |
| 	 *
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function register_hooks() {
 | |
| 		add_action( 'admin_init', [ $this, 'manage_notification' ] );
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Manages if the notification should be shown or removed.
 | |
| 	 *
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	public function manage_notification() {
 | |
| 		/**
 | |
| 		 * Filter: 'yoast_display_gutenberg_compat_notification' - Allows developer to disable the Gutenberg compatibility
 | |
| 		 * notification.
 | |
| 		 *
 | |
| 		 * @api bool
 | |
| 		 */
 | |
| 		$display_notification = apply_filters( 'yoast_display_gutenberg_compat_notification', true );
 | |
| 
 | |
| 		if (
 | |
| 			! $this->compatibility_checker->is_installed()
 | |
| 			|| $this->compatibility_checker->is_fully_compatible()
 | |
| 			|| ! $display_notification
 | |
| 		) {
 | |
| 			$this->notification_center->remove_notification_by_id( $this->notification_id );
 | |
| 
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		$this->add_notification();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Adds the notification to the notificaton center.
 | |
| 	 *
 | |
| 	 * @return void
 | |
| 	 */
 | |
| 	protected function add_notification() {
 | |
| 		$level = $this->compatibility_checker->is_below_minimum() ? Yoast_Notification::ERROR : Yoast_Notification::WARNING;
 | |
| 
 | |
| 		$message = sprintf(
 | |
| 			/* translators: %1$s expands to Yoast SEO, %2$s expands to the installed version, %3$s expands to Gutenberg */
 | |
| 			__( '%1$s detected you are using version %2$s of %3$s, please update to the latest version to prevent compatibility issues.', 'wordpress-seo' ),
 | |
| 			'Yoast SEO',
 | |
| 			$this->compatibility_checker->get_installed_version(),
 | |
| 			'Gutenberg'
 | |
| 		);
 | |
| 
 | |
| 		$notification = new Yoast_Notification(
 | |
| 			$message,
 | |
| 			[
 | |
| 				'id'       => $this->notification_id,
 | |
| 				'type'     => $level,
 | |
| 				'priority' => 1,
 | |
| 			]
 | |
| 		);
 | |
| 
 | |
| 		$this->notification_center->add_notification( $notification );
 | |
| 	}
 | |
| }
 |