v1.2.1
This commit is contained in:
parent
3bb9ed33e1
commit
b9029e62fe
14 changed files with 1750 additions and 946 deletions
170
includes/class-robotstxt-og-manager-notice.php
Normal file
170
includes/class-robotstxt-og-manager-notice.php
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
<?php
|
||||
/**
|
||||
* Manager Plugin Notice
|
||||
*
|
||||
* Recommends installing Manager (by ROBOTSTXT). Since the bundled
|
||||
* self-updater was removed in 1.2.1, the Manager plugin provides updates
|
||||
* for this plugin.
|
||||
*
|
||||
* @package ROBOTSTXT_OG
|
||||
* @since 1.2.1
|
||||
*/
|
||||
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit; // Exit if accessed directly.
|
||||
}
|
||||
|
||||
/**
|
||||
* Class Robotstxt_OG_Manager_Notice
|
||||
*
|
||||
* Shows a dismissible notice on the Plugins list page and a persistent
|
||||
* message on the plugin settings page when Manager (by ROBOTSTXT) is not
|
||||
* active.
|
||||
*
|
||||
* @since 1.2.1
|
||||
*/
|
||||
class Robotstxt_OG_Manager_Notice {
|
||||
|
||||
/**
|
||||
* Basename of the Manager (by ROBOTSTXT) plugin.
|
||||
*
|
||||
* @since 1.2.1
|
||||
* @var string
|
||||
*/
|
||||
const MANAGER_BASENAME = 'robotstxt-manager/robotstxt-manager.php';
|
||||
|
||||
/**
|
||||
* Query argument used to dismiss the notice.
|
||||
*
|
||||
* @since 1.2.1
|
||||
* @var string
|
||||
*/
|
||||
const DISMISS_ARG = 'robotstxt_og_dismiss_manager_notice';
|
||||
|
||||
/**
|
||||
* Nonce action for the dismiss link.
|
||||
*
|
||||
* @since 1.2.1
|
||||
* @var string
|
||||
*/
|
||||
const DISMISS_ACTION = 'robotstxt_og_dismiss_manager_notice';
|
||||
|
||||
/**
|
||||
* User meta key storing the per-user dismissal.
|
||||
*
|
||||
* @since 1.2.1
|
||||
* @var string
|
||||
*/
|
||||
const DISMISS_META = '_robotstxt_og_manager_notice_dismissed';
|
||||
|
||||
/**
|
||||
* Manager plugin page URL.
|
||||
*
|
||||
* @since 1.2.1
|
||||
* @var string
|
||||
*/
|
||||
const MANAGER_URL = 'https://www.robotstxt.software/plugins/robotstxt-manager/';
|
||||
|
||||
/**
|
||||
* Whether the Manager (by ROBOTSTXT) plugin is installed and active.
|
||||
*
|
||||
* @since 1.2.1
|
||||
*
|
||||
* @return bool True if the Manager plugin is active.
|
||||
*/
|
||||
public static function is_manager_active(): bool {
|
||||
return is_plugin_active( self::MANAGER_BASENAME );
|
||||
}
|
||||
|
||||
/**
|
||||
* Register hooks.
|
||||
*
|
||||
* @since 1.2.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function init(): void {
|
||||
add_action( 'admin_init', array( $this, 'handle_dismiss' ) );
|
||||
add_action( 'admin_notices', array( $this, 'render_notice' ) );
|
||||
add_action( 'network_admin_notices', array( $this, 'render_notice' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Persist the notice dismissal for the current user.
|
||||
*
|
||||
* Runs on admin_init; the notice check on admin_notices (fired later in
|
||||
* the same request) then omits the notice immediately.
|
||||
*
|
||||
* @since 1.2.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function handle_dismiss(): void {
|
||||
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
|
||||
if ( ! isset( $_GET[ self::DISMISS_ARG ] ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! current_user_can( 'manage_options' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
check_admin_referer( self::DISMISS_ACTION );
|
||||
|
||||
update_user_meta( get_current_user_id(), self::DISMISS_META, 1 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the dismissible notice on the Plugins list page.
|
||||
*
|
||||
* Hooked to both `admin_notices` (single-site Plugins page) and
|
||||
* `network_admin_notices` (Multisite network Plugins page); both screens
|
||||
* share the `plugins` screen base.
|
||||
*
|
||||
* @since 1.2.1
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function render_notice(): void {
|
||||
$screen = get_current_screen();
|
||||
|
||||
if ( null === $screen || 'plugins' !== $screen->base ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ! current_user_can( 'manage_options' ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( self::is_manager_active() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( get_user_meta( get_current_user_id(), self::DISMISS_META, true ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$dismiss_url = wp_nonce_url(
|
||||
add_query_arg( array( self::DISMISS_ARG => 1 ) ),
|
||||
self::DISMISS_ACTION
|
||||
);
|
||||
?>
|
||||
<div class="notice notice-info">
|
||||
<p>
|
||||
<?php
|
||||
echo wp_kses_post(
|
||||
sprintf(
|
||||
/* translators: %s: Manager (by ROBOTSTXT) plugin page URL. */
|
||||
__( 'To receive plugin updates, the <a href="%s">Manager (by ROBOTSTXT)</a> plugin must be installed and active.', 'robotstxt-og' ),
|
||||
esc_url( self::MANAGER_URL )
|
||||
)
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
<p>
|
||||
<a class="button" href="<?php echo esc_url( $dismiss_url ); ?>"><?php esc_html_e( 'Dismiss this notice', 'robotstxt-og' ); ?></a>
|
||||
</p>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue