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' ) ); } }