12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?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 );
- }
- }
|