page_renderer = $page_renderer ?? new Admin_Page_Renderer(); $this->settings_handler = $settings_handler ?? new Admin_Settings_Handler(); $this->stats_calculator = $stats_calculator ?? new Admin_Statistics_Calculator(); } /** * Add admin menu to WordPress. * * @return void */ public function add_admin_menu() { // Legacy menu manager is disabled in favor of Admin_Page_Controller. // Avoid duplicate menu registration and duplicated page rendering. } /** * Render main admin page. * * @return void */ public function render_admin_page() { // Legacy renderer disabled to prevent duplicate UI. New controller handles full rendering. } /** * Display admin message based on URL parameter. * * @param string $message Message type. */ private function display_admin_message( $message ) { $messages = array( 'settings_saved' => array( 'success', __( 'Settings saved successfully.', 'accessibility-audio-tts-text-to-speech-for-articles' ) ), // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Display message only, no data processing. /* translators: %d: number of posts to process in bulk */ 'bulk_started' => array( 'info', sprintf( /* translators: %d: number of posts to process in bulk */ __( 'Bulk processing started for %1$d posts.', 'accessibility-audio-tts-text-to-speech-for-articles' ), intval( filter_input( INPUT_GET, 'posts_count', FILTER_SANITIZE_NUMBER_INT ) ) ), ), 'no_posts_to_process' => array( 'warning', __( 'All posts already have generated audio.', 'accessibility-audio-tts-text-to-speech-for-articles' ) ), ); if ( isset( $messages[ $message ] ) ) { $type = $messages[ $message ][0]; $text = $messages[ $message ][1]; echo '
' . esc_html( $text ) . '