version = HVAC_PLUGIN_VERSION; $this->init_hooks(); } /** * Initialize hooks * * @return void */ private function init_hooks() { // Frontend scripts and styles add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets')); // Admin scripts and styles add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_assets')); // Login page scripts and styles add_action('login_enqueue_scripts', array($this, 'enqueue_login_assets')); } /** * Enqueue frontend assets * * @return void */ public function enqueue_frontend_assets() { // Only enqueue on plugin pages if (!$this->is_plugin_page()) { return; } // Main plugin styles - load on ALL plugin pages wp_enqueue_style( 'hvac-community-events', HVAC_PLUGIN_URL . 'assets/css/hvac-community-events.css', array(), $this->version ); // Page templates styles - ensures proper layout for all HVAC pages wp_enqueue_style( 'hvac-page-templates', HVAC_PLUGIN_URL . 'assets/css/hvac-page-templates.css', array(), $this->version ); // Layout styles - ensure proper container width and padding wp_enqueue_style( 'hvac-layout', HVAC_PLUGIN_URL . 'assets/css/hvac-layout.css', array('hvac-community-events'), $this->version ); // Common styles for all trainer pages - ensures consistent styling wp_enqueue_style( 'hvac-common', HVAC_PLUGIN_URL . 'assets/css/hvac-common.css', array(), $this->version ); // Dashboard styles if ($this->is_dashboard_page()) { wp_enqueue_style( 'hvac-dashboard', HVAC_PLUGIN_URL . 'assets/css/hvac-dashboard.css', array('hvac-community-events'), $this->version ); wp_enqueue_style( 'hvac-dashboard-enhanced', HVAC_PLUGIN_URL . 'assets/css/hvac-dashboard-enhanced.css', array('hvac-dashboard'), $this->version ); } // Registration styles if ($this->is_registration_page()) { wp_enqueue_style( 'hvac-registration', HVAC_PLUGIN_URL . 'assets/css/hvac-registration.css', array('hvac-community-events'), $this->version ); } // Communication templates styles if ($this->is_communication_page()) { wp_enqueue_style( 'communication-templates', HVAC_PLUGIN_URL . 'assets/css/communication-templates.css', array('hvac-community-events'), $this->version ); } // Certificate pages styles if ($this->is_certificate_page()) { wp_enqueue_style( 'hvac-certificates', HVAC_PLUGIN_URL . 'assets/css/hvac-certificates.css', array('hvac-community-events'), $this->version ); wp_enqueue_style( 'hvac-certificates-enhanced', HVAC_PLUGIN_URL . 'assets/css/hvac-certificates-enhanced.css', array('hvac-certificates'), $this->version ); } // Organizers pages styles if ($this->is_organizers_page()) { wp_enqueue_style( 'hvac-organizers', HVAC_PLUGIN_URL . 'assets/css/hvac-organizers.css', array('hvac-community-events'), $this->version ); } // Venues pages styles if ($this->is_venues_page()) { wp_enqueue_style( 'hvac-venues', HVAC_PLUGIN_URL . 'assets/css/hvac-venues.css', array('hvac-community-events'), $this->version ); } // Event manage page styles if ($this->is_event_manage_page()) { // First ensure common CSS is loaded wp_enqueue_style( 'hvac-common', HVAC_PLUGIN_URL . 'assets/css/hvac-common.css', array(), $this->version ); // Then dashboard CSS wp_enqueue_style( 'hvac-dashboard', HVAC_PLUGIN_URL . 'assets/css/hvac-dashboard.css', array('hvac-community-events', 'hvac-common'), $this->version ); // Layout CSS for proper container styling wp_enqueue_style( 'hvac-layout', HVAC_PLUGIN_URL . 'assets/css/hvac-layout.css', array('hvac-community-events'), $this->version ); // Finally event manage CSS wp_enqueue_style( 'hvac-event-manage', HVAC_PLUGIN_URL . 'assets/css/hvac-event-manage.css', array('hvac-community-events', 'hvac-common', 'hvac-dashboard', 'hvac-layout'), $this->version ); } // Main plugin scripts wp_enqueue_script( 'hvac-community-events', HVAC_PLUGIN_URL . 'assets/js/hvac-community-events.js', array('jquery'), $this->version, true ); // Dashboard scripts if ($this->is_dashboard_page()) { wp_enqueue_script( 'hvac-dashboard', HVAC_PLUGIN_URL . 'assets/js/hvac-dashboard.js', array('jquery', 'hvac-community-events'), $this->version, true ); wp_enqueue_script( 'hvac-dashboard-enhanced', HVAC_PLUGIN_URL . 'assets/js/hvac-dashboard-enhanced.js', array('hvac-dashboard'), $this->version, true ); } // Registration scripts if ($this->is_registration_page()) { wp_enqueue_script( 'hvac-registration', HVAC_PLUGIN_URL . 'assets/js/hvac-registration.js', array('jquery', 'hvac-community-events'), $this->version, true ); } // Help system scripts wp_enqueue_script( 'hvac-help-system', HVAC_PLUGIN_URL . 'assets/js/hvac-help-system.js', array('jquery'), $this->version, true ); // Localize main script wp_localize_script('hvac-community-events', 'hvac_ajax', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('hvac_ajax_nonce'), 'is_logged_in' => is_user_logged_in(), 'plugin_url' => HVAC_PLUGIN_URL, )); // Localize dashboard script if ($this->is_dashboard_page()) { wp_localize_script('hvac-dashboard', 'hvac_dashboard', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('hvac_dashboard_nonce'), 'strings' => array( 'loading' => __('Loading...', 'hvac-community-events'), 'error' => __('An error occurred. Please try again.', 'hvac-community-events'), ), )); } } /** * Enqueue admin assets * * @param string $hook Current admin page hook * @return void */ public function enqueue_admin_assets($hook) { // Global admin styles wp_enqueue_style( 'hvac-admin', HVAC_PLUGIN_URL . 'assets/css/hvac-admin.css', array(), $this->version ); // Global admin scripts wp_enqueue_script( 'hvac-admin', HVAC_PLUGIN_URL . 'assets/js/hvac-admin.js', array('jquery'), $this->version . '.2', // Force cache refresh for jQuery fix true ); // Localize admin script wp_localize_script('hvac-admin', 'hvac_admin', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('hvac_admin_nonce'), )); // Plugin-specific admin pages if (strpos($hook, 'hvac-community-events') !== false) { // Add any additional plugin-specific admin assets here } // Certificate admin scripts if (strpos($hook, 'certificate') !== false) { wp_enqueue_script( 'hvac-certificate-admin', HVAC_PLUGIN_URL . 'assets/js/hvac-certificate-admin.js', array('jquery'), $this->version, true ); } } /** * Enqueue login page assets * * @return void */ public function enqueue_login_assets() { // Check if we're on the custom login page if (!$this->is_custom_login_page()) { return; } wp_enqueue_style( 'hvac-login', HVAC_PLUGIN_URL . 'assets/css/hvac-login.css', array(), $this->version ); wp_enqueue_script( 'hvac-login', HVAC_PLUGIN_URL . 'assets/js/hvac-login.js', array('jquery'), $this->version, true ); } /** * Check if current page is a plugin page * * @return bool */ private function is_plugin_page() { // Check if we're in a page template context if (defined('HVAC_IN_PAGE_TEMPLATE') && HVAC_IN_PAGE_TEMPLATE) { return true; } // Check using template loader if available if (class_exists('HVAC_Template_Loader')) { return HVAC_Template_Loader::is_plugin_template(); } // Check by page template if (is_page_template()) { $template = get_page_template_slug(); if (strpos($template, 'page-trainer') !== false || strpos($template, 'page-master') !== false || strpos($template, 'page-certificate') !== false || strpos($template, 'page-generate') !== false || strpos($template, 'page-manage-event') !== false) { return true; } } // Fallback: check URL path (more comprehensive) $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); $plugin_paths = array( 'trainer', 'master-trainer', 'training-login', 'hvac-dashboard', 'manage-event', 'event-summary', 'certificate-reports', 'generate-certificates', ); foreach ($plugin_paths as $path) { if (strpos($current_path, $path) !== false) { return true; } } return false; } /** * Check if current page is a dashboard page * * @return bool */ private function is_dashboard_page() { // Check by page slug $dashboard_pages = array( 'trainer-dashboard', 'master-dashboard', 'hvac-dashboard', 'trainer/dashboard', 'master-trainer/dashboard', 'master-trainer/master-dashboard', 'trainer/event/manage', 'manage-event', 'trainer/certificate-reports', 'trainer/generate-certificates' ); foreach ($dashboard_pages as $page_slug) { if (is_page($page_slug)) { return true; } } // Also check URL path as fallback $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); $dashboard_paths = array( 'trainer/dashboard', 'master-trainer/dashboard', 'master-trainer/master-dashboard', 'trainer/event/manage', 'manage-event', 'trainer/certificate-reports', 'trainer/generate-certificates' ); foreach ($dashboard_paths as $path) { if (strpos($current_path, $path) !== false) { return true; } } // Check if this is a community events submission page if (function_exists('tribe_is_community_edit_event_page') && tribe_is_community_edit_event_page()) { return true; } if (function_exists('tribe_is_community_my_events_page') && tribe_is_community_my_events_page()) { return true; } return false; } /** * Check if current page is registration page * * @return bool */ private function is_registration_page() { return is_page('trainer-registration') || is_page('trainer/registration'); } /** * Check if current page is communication page * * @return bool */ private function is_communication_page() { return is_page('communication-templates') || is_page('trainer/communication-templates') || is_page('communication-schedules') || is_page('trainer/communication-schedules'); } /** * Check if current page is event manage page * * @return bool */ private function is_event_manage_page() { // Check by page ID (most reliable) global $post; if ($post && $post->ID == 5344) { // Event manage page ID return true; } // Check by page slug if (is_page('manage') || is_page('trainer/event/manage') || is_page('manage-event') || is_page('trainer-event-manage')) { return true; } // Check by page template if (is_page_template('page-manage-event.php')) { return true; } // Check URL path $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'); if ($current_path === 'trainer/event/manage' || $current_path === 'trainer/event/manage/') { return true; } // Check if this is a community events submission page if (function_exists('tribe_is_community_edit_event_page') && tribe_is_community_edit_event_page()) { return true; } return false; } /** * Check if current page is custom login page * * @return bool */ private function is_custom_login_page() { return is_page('training-login') || is_page('community-login') || is_page('trainer/login'); } /** * Check if current page is certificate page * * @return bool */ private function is_certificate_page() { return is_page('certificate-reports') || is_page('trainer/certificate-reports') || is_page('generate-certificates') || is_page('trainer/generate-certificates') || strpos($_SERVER['REQUEST_URI'], 'certificate-reports') !== false || strpos($_SERVER['REQUEST_URI'], 'generate-certificates') !== false; } /** * Check if current page is organizers page * * @return bool */ private function is_organizers_page() { return is_page('trainer-organizers-list') || is_page('trainer/organizer/list') || is_page('trainer-organizer-manage') || is_page('trainer/organizer/manage') || strpos($_SERVER['REQUEST_URI'], 'organizer') !== false; } /** * Check if current page is venues page * * @return bool */ private function is_venues_page() { return is_page('trainer-venues-list') || is_page('trainer/venue/list') || is_page('trainer-venue-manage') || is_page('trainer/venue/manage') || strpos($_SERVER['REQUEST_URI'], 'venue') !== false; } /** * Get script version with cache busting * * @param string $file File path * @return string */ public function get_asset_version($file = '') { // In development, use file modification time if (defined('WP_DEBUG') && WP_DEBUG && $file) { $file_path = HVAC_PLUGIN_DIR . $file; if (file_exists($file_path)) { return filemtime($file_path); } } return $this->version; } }