2021-09-21 15:01:08 +02:00
< ? php
/**
* WPSEO plugin file .
*
* @ package WPSEO\Admin\Notifiers
*/
/**
* Represents the logic for showing the notification .
*/
class WPSEO_Configuration_Notifier implements WPSEO_Listener {
2021-09-21 15:05:30 +02:00
/**
* Option name use to determine whether the notice has been dismissed .
*
* @ var string
*/
2021-09-21 15:01:08 +02:00
const META_NAME = 'wpseo-dismiss-configuration-notice' ;
2021-09-21 15:05:30 +02:00
/**
* Default value .
*
* @ var string
*/
2021-09-21 15:01:08 +02:00
const META_VALUE = 'yes' ;
2021-09-21 15:05:30 +02:00
/**
* Should the notification be shown .
*
* @ var bool
*/
2021-09-21 15:01:08 +02:00
protected $show_notification ;
/**
* Constructs the object by setting the show notification property based the given options .
*/
public function __construct () {
$this -> show_notification = WPSEO_Options :: get ( 'show_onboarding_notice' , false );
}
/**
* 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 $this -> re_run_notification ();
}
return $this -> first_time_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 ();
}
/**
* Returns the notification to re - run the config wizard .
*
* @ return string The notification .
*/
private function re_run_notification () {
$content = 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. */
2021-09-21 15:05:30 +02:00
esc_html__ ( 'If you want to double-check your %1$s settings, or change something, you can always %2$sreopen the configuration wizard%3$s.' , 'wordpress-seo' ),
2021-09-21 15:01:08 +02:00
'Yoast SEO' ,
'<a href="' . esc_url ( admin_url ( 'admin.php?page=' . WPSEO_Configuration_Page :: PAGE_IDENTIFIER ) ) . '">' ,
'</a>'
);
2021-09-21 15:05:30 +02:00
return $this -> notification ( __ ( 'SEO settings configured' , 'wordpress-seo' ), $content );
2021-09-21 15:01:08 +02:00
}
/**
* Returns the notification to start the config wizard for the first time .
*
* @ return string The notification .
*/
private function first_time_notification () {
$content = 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>'
);
return $this -> notification ( __ ( 'First-time SEO configuration' , 'wordpress-seo' ), $content , true );
}
/**
* Returns a styled notification .
*
* @ param string $title Title for the notification .
* @ param string $content Content for the notification .
* @ param bool $show_dismissal Whether to show the dismiss button or not .
*
* @ return string The styled notification .
*/
private function notification ( $title , $content , $show_dismissal = false ) {
$notification = '<div class="yoast-container yoast-container__configuration-wizard">' ;
$notification .= sprintf (
2021-09-21 15:05:30 +02:00
'<img src="%1$s" height="%2$s" width="%3$d" alt="" />' ,
2021-09-21 15:01:08 +02:00
esc_url ( plugin_dir_url ( WPSEO_FILE ) . 'images/new-to-configuration-notice.svg' ),
60 ,
60
);
$notification .= '<div class="yoast-container__configuration-wizard--content">' ;
2021-09-21 15:05:30 +02:00
$notification .= sprintf (
'<h3>%s<span class="dashicons dashicons-yes"></span></h3>' ,
esc_html ( $title )
);
2021-09-21 15:01:08 +02:00
$notification .= '<p>' ;
$notification .= $content ;
$notification .= '</p>' ;
$notification .= '</div>' ;
if ( $show_dismissal ) {
$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 ;
}
}