idrivee2-media-upload/includes/class-manager-dependency.php
2026-08-17 15:50:51 +00:00

148 lines
3.5 KiB
PHP

<?php
/**
* ROBOTSTXT Manager dependency notice for iDrivee2 Media Upload.
*
* @package iDrivee2Media
* @since 1.4.2
*/
declare(strict_types=1);
namespace iDrivee2Media;
/**
* Prevent direct access to this file.
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Checks for the ROBOTSTXT Manager plugin and warns when it is missing.
*
* Plugin updates are served through ROBOTSTXT Manager (Manager by ROBOTSTXT).
* When it is not installed and active, a dismissible notice is shown on the
* plugins list page and a persistent notice is shown on the plugin settings
* page, so administrators know updates will not be delivered.
*
* @since 1.4.2
*/
class Manager_Dependency {
/**
* ROBOTSTXT Manager plugin page URL.
*
* @since 1.4.2
*
* @var string
*/
private const MANAGER_PLUGIN_URL = 'https://www.robotstxt.software/plugins/robotstxt-manager/';
/**
* Register hooks for the admin notices.
*
* @since 1.4.2
*
* @return void
*/
public function register(): void {
add_action( 'admin_notices', array( $this, 'render_plugins_page_notice' ) );
add_action( 'network_admin_notices', array( $this, 'render_plugins_page_notice' ) );
}
/**
* Whether the ROBOTSTXT Manager plugin is installed and active.
*
* Matches any active plugin whose directory slug is "robotstxt-manager",
* so the main file name does not matter. On Multisite, network-activated
* plugins are matched as well.
*
* @since 1.4.2
*
* @return bool True when ROBOTSTXT Manager is active.
*/
public static function is_manager_active(): bool {
$active = get_option( 'active_plugins', array() );
if ( is_array( $active ) ) {
foreach ( $active as $basename ) {
if ( is_string( $basename ) && str_starts_with( $basename, 'robotstxt-manager/' ) ) {
return true;
}
}
}
if ( is_multisite() ) {
$network_active = get_site_option( 'active_sitewide_plugins', array() );
if ( is_array( $network_active ) ) {
foreach ( array_keys( $network_active ) as $basename ) {
if ( is_string( $basename ) && str_starts_with( $basename, 'robotstxt-manager/' ) ) {
return true;
}
}
}
}
return false;
}
/**
* Render the dismissible notice on the plugins list page.
*
* @since 1.4.2
*
* @return void
*/
public function render_plugins_page_notice(): void {
global $pagenow;
$current_page = isset( $pagenow ) && is_string( $pagenow ) ? $pagenow : '';
if ( 'plugins.php' !== $current_page ) {
return;
}
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
if ( self::is_manager_active() ) {
return;
}
printf(
'<div class="notice notice-warning is-dismissible"><p>%s</p></div>',
wp_kses_post( self::message_html() )
);
}
/**
* Render the persistent notice for the plugin settings page.
*
* @since 1.4.2
*
* @return void
*/
public static function render_settings_notice(): void {
if ( self::is_manager_active() ) {
return;
}
printf(
'<div class="notice notice-warning"><p>%s</p></div>',
wp_kses_post( self::message_html() )
);
}
/**
* Build the shared warning message HTML.
*
* @since 1.4.2
*
* @return string Message HTML with an escaped link.
*/
private static function message_html(): string {
return sprintf(
/* translators: %s: link to the ROBOTSTXT Manager plugin page. */
esc_html__( 'To receive plugin updates, the ROBOTSTXT Manager plugin must be installed and active. Download it from %s.', 'idrivee2-media-upload' ),
'<a href="' . esc_url( self::MANAGER_PLUGIN_URL ) . '">ROBOTSTXT Manager</a>'
);
}
}