admin_instance = $admin_instance; } /** * Initialize all admin hooks */ public function init_hooks() { $this->init_admin_hooks(); $this->init_ajax_hooks(); $this->init_cron_hooks(); $this->init_filter_hooks(); } /** * Initialize basic admin hooks */ private function init_admin_hooks() { add_action( 'admin_menu', array( $this->admin_instance, 'add_admin_menu' ) ); add_action( 'admin_enqueue_scripts', array( $this->admin_instance, 'enqueue_admin_assets' ) ); add_action( 'admin_init', array( $this->admin_instance, 'handle_admin_post_requests' ) ); } /** * Initialize AJAX endpoint hooks */ private function init_ajax_hooks() { $ajax_endpoints = array( 'accessibility_audio_tts_delete_audio', 'save_accessibility_audio_tts_settings', 'get_posts_for_conversion', 'convert_single_post', 'process_bulk_conversion', 'get_generated_posts', 'schedule_background_processing', 'get_cron_status', 'trigger_cron_manually', 'get_auto_queue_status', 'get_voices', 'get_character_data', ); foreach ( $ajax_endpoints as $endpoint ) { add_action( "wp_ajax_{$endpoint}", array( $this->admin_instance, $endpoint ) ); } } /** * Initialize WP-Cron hooks */ private function init_cron_hooks() { add_action( 'accessibility_audio_tts_process_background_posts', array( $this->admin_instance, 'process_background_posts' ), 10, 1 ); add_action( 'accessibility_audio_tts_auto_trigger_cron', array( $this->admin_instance, 'execute_auto_trigger' ) ); add_action( 'publish_post', array( $this->admin_instance, 'auto_schedule_post_conversion' ), 10, 2 ); add_action( 'publish_to_publish', array( $this->admin_instance, 'auto_schedule_post_conversion' ), 10, 2 ); add_action( 'accessibility_audio_tts_process_queue', array( $this->admin_instance, 'process_auto_queue' ) ); } /** * Initialize filter hooks */ private function init_filter_hooks() { add_filter( 'cron_schedules', array( $this->admin_instance, 'add_cron_intervals' ) ); // phpcs:ignore WordPress.WP.CronInterval.ChangeDetected -- Custom intervals managed by admin instance. } /** * Get list of registered AJAX endpoints * * @return array List of AJAX endpoint names */ public function get_ajax_endpoints() { return array( 'accessibility_audio_tts_delete_audio', 'save_accessibility_audio_tts_settings', 'get_posts_for_conversion', 'convert_single_post', 'process_bulk_conversion', 'get_generated_posts', 'schedule_background_processing', 'get_cron_status', 'trigger_cron_manually', 'get_auto_queue_status', 'get_voices', 'get_character_data', ); } /** * Check if specific AJAX endpoint is registered * * @param string $endpoint Endpoint name. * @return bool True if endpoint is registered. */ public function is_ajax_endpoint_registered( $endpoint ) { return in_array( $endpoint, $this->get_ajax_endpoints(), true ); } }