148 lines
3.7 KiB
PHP
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' )
|
|
);
|
|
}
|
|
}
|