113 lines
3.4 KiB
PHP
113 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* @package WPSEO\Admin\Notifiers
|
|
*/
|
|
|
|
/**
|
|
* Represents the logic for showing the notification.
|
|
*/
|
|
class WPSEO_Configuration_Notifier implements WPSEO_Listener {
|
|
|
|
const META_NAME = 'wpseo-dismiss-configuration-notice';
|
|
const META_VALUE = 'yes';
|
|
|
|
/** @var bool */
|
|
protected $show_notification;
|
|
|
|
/**
|
|
* Constructs the object by setting the show notification property based the given options.
|
|
*
|
|
* @param array $options The array with options.
|
|
*/
|
|
public function __construct( $options ) {
|
|
$this->show_notification = ! empty( $options['show_onboarding_notice'] );
|
|
}
|
|
|
|
/**
|
|
* Returns the content of the notification.
|
|
*
|
|
* @return string A string with the notification HTML, or empty string when no notification is needed.
|
|
*/
|
|
public function notify() {
|
|
if ( ! $this->show_notification() ) {
|
|
return '';
|
|
}
|
|
|
|
$notification = '<div class="yoast-container yoast-container__configuration-wizard">';
|
|
$notification .= sprintf(
|
|
'<img src="%1$s" height="%2$s" width="%3$d" />',
|
|
esc_url( plugin_dir_url( WPSEO_FILE ) . 'images/new-to-configuration-notice.svg' ),
|
|
60,
|
|
60
|
|
);
|
|
$notification .= '<div class="yoast-container__configuration-wizard--content">';
|
|
$notification .= '<h3>' . esc_html__( 'First-time SEO configuration', 'wordpress-seo' ) . '</h3>';
|
|
$notification .= '<p>';
|
|
$notification .= sprintf(
|
|
/* translators: %1$s expands to Yoast SEO, %2$s is a link start tag to the Onboarding Wizard, %3$s is the link closing tag. */
|
|
esc_html__( 'Get started quickly with the %1$s %2$sconfiguration wizard%3$s!', 'wordpress-seo' ),
|
|
'Yoast SEO',
|
|
'<a href="' . esc_url( admin_url( 'admin.php?page=' . WPSEO_Configuration_Page::PAGE_IDENTIFIER ) ) . '">',
|
|
'</a>'
|
|
);
|
|
$notification .= '</p>';
|
|
$notification .= '</div>';
|
|
$notification .= sprintf(
|
|
'<a href="%1$s" style="" class="button dismiss yoast-container__configuration-wizard--dismiss"><span class="screen-reader-text">%2$s</span><span class="dashicons dashicons-no-alt"></span></a>',
|
|
esc_url( admin_url( 'admin.php?page=wpseo_dashboard&dismiss_get_started=1' ) ),
|
|
esc_html__( 'Dismiss this item.', 'wordpress-seo' )
|
|
);
|
|
$notification .= '</div>';
|
|
|
|
return $notification;
|
|
}
|
|
|
|
/**
|
|
* Listens to an argument in the request URL. When triggered just set the notification to dismissed.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function listen() {
|
|
if ( ! $this->show_notification() || ! $this->dismissal_is_triggered() ) {
|
|
return;
|
|
}
|
|
|
|
$this->set_dismissed();
|
|
}
|
|
|
|
/**
|
|
* Checks if the dismissal should be triggered.
|
|
*
|
|
* @return bool True when action has been triggered.
|
|
*/
|
|
protected function dismissal_is_triggered() {
|
|
return filter_input( INPUT_GET, 'dismiss_get_started' ) === '1';
|
|
}
|
|
|
|
/**
|
|
* Checks if the current user has dismissed the notification.
|
|
*
|
|
* @return bool True when the notification has been dismissed.
|
|
*/
|
|
protected function is_dismissed() {
|
|
return get_user_meta( get_current_user_id(), self::META_NAME, true ) === self::META_VALUE;
|
|
}
|
|
|
|
/**
|
|
* Sets the dismissed state for the current user.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function set_dismissed() {
|
|
update_user_meta( get_current_user_id(), self::META_NAME, self::META_VALUE );
|
|
}
|
|
|
|
/**
|
|
* Checks if the notification should be shown.
|
|
*
|
|
* @return bool True when notification should be shown.
|
|
*/
|
|
protected function show_notification() {
|
|
return $this->show_notification && ! $this->is_dismissed();
|
|
}
|
|
}
|