robotstxt-mediaaudit/includes/Network/Plugin.php
2026-06-08 18:01:39 +00:00

148 lines
3.7 KiB
PHP

<?php
/**
* Network admin bootstrap for central mode.
*
* @package MediaRightsAudit\Network
*/
namespace MediaRightsAudit\Network;
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Registers network admin menu pages and hooks when the plugin operates in central mode.
*
* In per_site mode, only a lightweight network status page is registered so
* network admins can monitor per-site plugin health without managing data centrally.
*/
class Plugin {
/**
* Network Settings page handler.
*
* @var Settings
*/
private Settings $settings;
/**
* Network Audit page handler.
*
* @var AuditPage
*/
private AuditPage $audit_page;
/**
* Network Alerts page handler.
*
* @var AlertsPage
*/
private AlertsPage $alerts_page;
/**
* Network Tools page handler.
*
* @var ToolsPage
*/
private ToolsPage $tools_page;
/**
* Initialises network admin subsystem dependencies.
*/
public function __construct() {
$this->settings = new Settings();
$this->audit_page = new AuditPage();
$this->alerts_page = new AlertsPage();
$this->tools_page = new ToolsPage();
}
/**
* Registers all network admin hooks.
*
* @return void
*/
public function run(): void {
add_action( 'network_admin_menu', array( $this, 'register_network_pages' ) );
add_action( 'network_admin_edit_mra_network_settings', array( $this->settings, 'save' ) );
}
/**
* Registers network admin menu pages.
*
* In central mode: full aggregated UI (Audit, Alerts, Tools, Settings).
* In per_site mode: only a status overview page is registered.
*
* @return void
*/
public function register_network_pages(): void {
$mode = get_site_option( 'robotstxt_mediaaudit_network_mode', 'per_site' );
if ( 'central' === $mode ) {
add_menu_page(
__( 'Network Media Audit', 'robotstxt-mediaaudit' ),
__( 'Media Audit', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network',
array( $this->audit_page, 'render' ),
'dashicons-camera',
11
);
add_submenu_page(
'robotstxt-mediaaudit-network',
__( 'Network Media Audit', 'robotstxt-mediaaudit' ),
__( 'Network Audit', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network',
array( $this->audit_page, 'render' )
);
add_submenu_page(
'robotstxt-mediaaudit-network',
__( 'Network Alerts', 'robotstxt-mediaaudit' ),
__( 'Alerts', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network-alerts',
array( $this->alerts_page, 'render' )
);
$tools_suffix = add_submenu_page(
'robotstxt-mediaaudit-network',
__( 'Network Tools', 'robotstxt-mediaaudit' ),
__( 'Tools', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network-tools',
array( $this->tools_page, 'render' )
);
if ( is_string( $tools_suffix ) ) {
$this->tools_page->set_hook_suffix( $tools_suffix );
}
} else {
$status_suffix = add_menu_page(
__( 'Media Audit — Network', 'robotstxt-mediaaudit' ),
__( 'Media Audit', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network',
array( $this->tools_page, 'render_status_only' ),
'dashicons-camera',
11
);
if ( is_string( $status_suffix ) ) {
$this->tools_page->set_hook_suffix( $status_suffix );
}
}
// Settings always shown in network admin, regardless of mode.
add_submenu_page(
'robotstxt-mediaaudit-network',
__( 'Network Settings', 'robotstxt-mediaaudit' ),
__( 'Settings', 'robotstxt-mediaaudit' ),
'manage_network_options',
'robotstxt-mediaaudit-network-settings',
array( $this->settings, 'render' )
);
}
}