'accessmate', 'accessmate-pro-report' => 'accessmate-report', 'accessmate-pro-widget' => 'accessmate-widget', 'accessmate-pro-statement' => 'accessmate-statement', 'accessmate-pro-settings' => 'accessmate-settings', ]; if ( ! isset( $map[ $page ] ) ) { return; } wp_safe_redirect( admin_url( 'admin.php?page=' . $map[ $page ] ) ); exit; } } if ( ! function_exists( 'accessmate_register_admin_page' ) ) { function accessmate_register_admin_page(): void { add_menu_page( __( 'AccessMate', 'accessmate' ), __( 'AccessMate', 'accessmate' ), 'manage_options', 'accessmate', 'accessmate_render_admin_page', 'data:image/svg+xml;base64,' . base64_encode( file_get_contents( ACCESSMATE_PATH . 'assets/accessmate-logomark-white.svg' ) ), 80 ); add_submenu_page( 'accessmate', __( 'Dashboard', 'accessmate' ), __( 'Dashboard', 'accessmate' ), 'manage_options', 'accessmate', 'accessmate_render_admin_page' ); add_submenu_page( 'accessmate', __( 'Scans', 'accessmate' ), __( 'Scans', 'accessmate' ), 'manage_options', 'accessmate-report', 'accessmate_render_admin_page' ); if ( AccessMate_Licensing::is_premium() ) { add_submenu_page( 'accessmate', __( 'Media Accessibility', 'accessmate' ), __( 'Media Accessibility', 'accessmate' ), 'manage_options', 'accessmate-media', 'accessmate_render_admin_page' ); } add_submenu_page( 'accessmate', __( 'Accessibility Widget', 'accessmate' ), __( 'Accessibility Widget', 'accessmate' ), 'manage_options', 'accessmate-widget', 'accessmate_render_admin_page' ); add_submenu_page( 'accessmate', __( 'Accessibility Statement', 'accessmate' ), __( 'Accessibility Statement', 'accessmate' ), 'manage_options', 'accessmate-statement', 'accessmate_render_admin_page' ); add_submenu_page( 'accessmate', __( 'Settings', 'accessmate' ), __( 'Settings', 'accessmate' ), 'manage_options', 'accessmate-settings', 'accessmate_render_admin_page' ); } } if ( ! function_exists( 'accessmate_render_admin_page' ) ) { function accessmate_render_admin_page(): void { echo '
'; } } if ( ! function_exists( 'accessmate_enqueue_assets' ) ) : function accessmate_enqueue_assets( string $hook ): void { $accessmate_hooks = [ 'toplevel_page_accessmate', 'accessmate_page_accessmate-report', 'accessmate_page_accessmate-media', 'accessmate_page_accessmate-widget', 'accessmate_page_accessmate-statement', 'accessmate_page_accessmate-settings', ]; if ( ! in_array( $hook, $accessmate_hooks, true ) ) return; if ( ! file_exists( ACCESSMATE_PATH . 'assets/main.js' ) ) return; wp_enqueue_script( 'accessmate-app', ACCESSMATE_URL . 'assets/main.js', [ 'react', 'react-dom' ], ACCESSMATE_VERSION, true ); // No separate wp_enqueue_style() — the build never produces assets/main.css; // Vite inlines all CSS into main.js, matching how the overlay/widget bundles work. $view_map = [ 'accessmate' => '', 'accessmate-report' => 'report', 'accessmate-media' => 'media', 'accessmate-widget' => 'widget', 'accessmate-statement' => 'statement', 'accessmate-settings' => 'settings', ]; // phpcs:ignore WordPress.Security.NonceVerification.Recommended $page = isset( $_GET['page'] ) ? sanitize_key( $_GET['page'] ) : 'accessmate'; $initial_view = $view_map[ $page ] ?? ''; $is_premium = AccessMate_Licensing::is_premium(); $upgrade_url = AccessMate_Licensing::upgrade_url(); wp_localize_script( 'accessmate-app', 'accessmateConfig', [ 'nonce' => wp_create_nonce( 'wp_rest' ), 'restBase' => rest_url( 'accessmate/v1' ), 'siteUrl' => get_site_url(), 'adminUrl' => admin_url(), 'version' => ACCESSMATE_VERSION, 'assetsUrl' => ACCESSMATE_URL . 'assets/', 'isAdmin' => current_user_can( 'manage_options' ), 'providers' => AccessMate_Providers::all(), 'isPremium' => $is_premium, 'upgradeUrl' => $upgrade_url, 'initialView' => $initial_view, ]); } endif;