init_hooks(); } /** * Initialize hooks */ private function init_hooks() { add_action('wp_enqueue_scripts', array($this, 'enqueue_admin_assets')); } /** * Enqueue admin assets on master trainer pages */ public function enqueue_admin_assets() { // Only enqueue on master trainer announcement pages if ($this->is_master_trainer_announcement_page()) { // Ensure jQuery and editor dependencies are loaded in head // CRITICAL: Load in head (false) because wp_editor() outputs inline scripts in body wp_enqueue_script('jquery'); wp_enqueue_script('editor'); wp_enqueue_editor(); // Enqueue admin JavaScript - MUST load in head to be available for wp_editor inline scripts wp_enqueue_script( 'hvac-announcements-admin', plugin_dir_url(dirname(__FILE__)) . 'assets/js/hvac-announcements-admin.js', array('jquery', 'editor'), defined('HVAC_VERSION') ? HVAC_VERSION : '1.0.0', false // Load in head, not footer, for wp_editor compatibility ); // Localize script with AJAX data wp_localize_script('hvac-announcements-admin', 'hvac_announcements', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('hvac_announcements_admin_nonce'), 'strings' => array( 'confirm_delete' => __('Are you sure you want to delete this announcement?', 'hvac'), 'error_loading' => __('Error loading announcements.', 'hvac'), 'error_saving' => __('Error saving announcement.', 'hvac'), 'success_deleted' => __('Announcement deleted successfully.', 'hvac'), ) )); // Enqueue WordPress media uploader wp_enqueue_media(); // Enqueue admin CSS wp_enqueue_style( 'hvac-announcements-admin', plugin_dir_url(dirname(__FILE__)) . 'assets/css/hvac-announcements-admin.css', array(), defined('HVAC_VERSION') ? HVAC_VERSION : '1.0.0' ); } } /** * Check if current page is master trainer announcement page * * @return bool */ private function is_master_trainer_announcement_page() { global $post; if (!is_a($post, 'WP_Post')) { return false; } // Check if user is master trainer if (!HVAC_Announcements_Permissions::is_master_trainer()) { return false; } // Check for announcement pages $announcement_slugs = array( 'announcements', // Primary announcement page 'master-announcements', 'master-manage-announcements', 'manage-announcements' ); return in_array($post->post_name, $announcement_slugs); } /** * Render admin interface modal HTML * * @return string Modal HTML */ public function render_admin_interface() { // Check permissions if (!HVAC_Announcements_Permissions::is_master_trainer()) { return ''; } ob_start(); ?>
1 of 1