upskill-event-manager/includes/class-hvac-scripts-styles.php
Ben 8be49ad5a9 fix: comprehensive dashboard fixes and improvements
- Fixed critical security vulnerability with incorrect capability checks
- Fixed hardcoded redirect path from /community-login/ to /training-login/
- Moved dashboard shortcode registration to centralized location
- Fixed duplicate class loading with proper singleton checks
- Fixed incorrect edit URLs in dashboard
- Removed debug HTML comments from production templates
- Moved inline CSS to external stylesheets for better maintainability
- Added caching mechanism for dashboard statistics queries (1 hour cache)
- Implemented pagination JavaScript handlers for AJAX navigation
- Added comprehensive error handling and logging throughout
- Fixed role-based access control (checking roles not capabilities)
- Improved performance with cached database queries
2025-08-21 20:41:59 -03:00

1197 lines
No EOL
39 KiB
PHP

<?php
/**
* HVAC Scripts and Styles Manager
*
* Centralized management of all plugin scripts and styles
*
* @package HVAC_Community_Events
* @since 2.0.0
*/
if (!defined('ABSPATH')) {
exit;
}
/**
* HVAC_Scripts_Styles class
*/
class HVAC_Scripts_Styles {
/**
* Instance
*
* @var HVAC_Scripts_Styles
*/
private static $instance = null;
/**
* Script version for cache busting
*
* @var string
*/
private $version;
/**
* Get instance
*
* @return HVAC_Scripts_Styles
*/
public static function instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
$this->version = HVAC_PLUGIN_VERSION;
$this->init_hooks();
}
/**
* Detect if user is using Safari browser
* Uses centralized browser detection service
*
* @return bool
*/
public function is_safari_browser() {
return HVAC_Browser_Detection::instance()->is_safari_browser();
}
/**
* Get script path based on browser compatibility
* Uses centralized browser detection service
*
* @param string $script_name
* @return string
*/
public function get_compatible_script_path($script_name) {
$browser_detection = HVAC_Browser_Detection::instance();
// If Safari and doesn't support ES6, load Safari-compatible version
if ($browser_detection->is_safari_browser() && !$browser_detection->safari_supports_es6()) {
$safari_script = HVAC_PLUGIN_DIR . 'assets/js/' . $script_name . '-safari-compatible.js';
if (file_exists($safari_script)) {
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[HVAC Scripts Styles] Loading Safari-compatible script: ' . $script_name . '-safari-compatible.js');
}
return HVAC_PLUGIN_URL . 'assets/js/' . $script_name . '-safari-compatible.js';
}
}
// Default to standard version
if (defined('WP_DEBUG') && WP_DEBUG) {
$browser_info = $browser_detection->get_browser_info();
error_log('[HVAC Scripts Styles] Loading standard script: ' . $script_name . '.js | Browser: ' . json_encode($browser_info));
}
return HVAC_PLUGIN_URL . 'assets/js/' . $script_name . '.js';
}
/**
* Initialize hooks
*
* @return void
*/
private function init_hooks() {
// Use consolidated CSS for all browsers now that foreign files are removed
add_action('wp_enqueue_scripts', array($this, 'enqueue_frontend_assets'));
// No longer need Safari-specific bypass since we're using consolidated CSS
// 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 minimal assets for Safari browsers to prevent resource cascade hanging
*
* @return void
*/
public function enqueue_safari_minimal_assets() {
// Only enqueue on plugin pages
if (!$this->is_plugin_page()) {
return;
}
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[HVAC Scripts Styles] Loading Safari optimized consolidated assets');
}
// Load consolidated core CSS - single file instead of 15+
wp_enqueue_style(
'hvac-consolidated-core',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-core.css',
array(),
$this->version
);
// Load page-specific consolidated bundle based on context
if ($this->is_dashboard_page() || $this->is_event_manage_page()) {
wp_enqueue_style(
'hvac-consolidated-dashboard',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-dashboard.css',
array('hvac-consolidated-core'),
$this->version
);
}
// Load minimal JavaScript
wp_enqueue_script(
'hvac-safari-minimal-js',
HVAC_PLUGIN_URL . 'assets/js/hvac-community-events.js',
array('jquery'),
$this->version,
true
);
// Essential localization only
wp_localize_script('hvac-safari-minimal-js', '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,
));
// DISABLED - Using TEC Community Events 5.x instead
// if ($this->is_event_manage_page() || $this->is_create_event_page() || $this->is_edit_event_page()) {
// wp_enqueue_script(
// 'hvac-rest-api-event-submission',
// HVAC_PLUGIN_URL . 'assets/js/hvac-rest-api-event-submission.js',
// array('jquery'),
// $this->version,
// true
// );
//
// wp_localize_script('hvac-rest-api-event-submission', 'hvac_ajax', array(
// 'ajaxurl' => admin_url('admin-ajax.php'),
// 'nonce' => wp_create_nonce('hvac_ajax_nonce')
// ));
// }
}
/**
* Disable non-critical assets for Safari browsers to prevent resource overload
*
* @return void
*/
public function disable_non_critical_assets() {
// Only run on plugin pages
if (!$this->is_plugin_page()) {
return;
}
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('[HVAC Scripts Styles] Disabling non-critical assets for Safari');
}
// Dequeue all additional CSS files that may have been enqueued by other components
$css_handles_to_remove = [
'hvac-page-templates',
'hvac-layout',
'hvac-common',
'hvac-accessibility-fixes',
'hvac-mobile-responsive',
'hvac-dashboard',
'hvac-dashboard-enhanced',
'hvac-registration',
'communication-templates',
'hvac-certificates',
'hvac-certificates-enhanced',
'hvac-certificate-reports',
'hvac-generate-certificates',
'hvac-organizers',
'hvac-venues',
'hvac-trainer-profile',
'hvac-profile-sharing',
'hvac-event-manage'
];
foreach ($css_handles_to_remove as $handle) {
wp_dequeue_style($handle);
wp_deregister_style($handle);
}
// Dequeue non-essential JavaScript to reduce resource load
$js_handles_to_remove = [
'hvac-dashboard',
'hvac-dashboard-enhanced',
'hvac-registration',
'hvac-profile-sharing',
'hvac-help-system'
];
foreach ($js_handles_to_remove as $handle) {
wp_dequeue_script($handle);
wp_deregister_script($handle);
}
}
/**
* Enqueue frontend assets
*
* @return void
*/
public function enqueue_frontend_assets() {
// Only enqueue on plugin pages
if (!$this->is_plugin_page()) {
return;
}
// Always include mobile navigation fix
wp_enqueue_style(
'hvac-mobile-nav-fix',
HVAC_PLUGIN_URL . 'assets/css/hvac-mobile-navigation-fix.css',
array(),
$this->version
);
// Check if CSS optimization is enabled and consolidated file exists
if ($this->should_use_consolidated_css()) {
$this->enqueue_consolidated_css();
return;
}
// Fallback to individual CSS files (original system)
$this->enqueue_individual_css_files();
}
/**
* Check if consolidated CSS should be used
*
* @return bool
*/
private function should_use_consolidated_css() {
// Check if consolidated CSS file exists
$consolidated_file = HVAC_PLUGIN_DIR . 'assets/css/hvac-consolidated.css';
return file_exists($consolidated_file) && !defined('HVAC_CSS_DEBUG');
}
/**
* Enqueue consolidated CSS file
*
* @return void
*/
private function enqueue_consolidated_css() {
// Load design system first
wp_enqueue_style(
'hvac-design-system',
HVAC_PLUGIN_URL . 'assets/css/hvac-design-system.css',
array(),
$this->version
);
// Load component library
wp_enqueue_style(
'hvac-components',
HVAC_PLUGIN_URL . 'assets/css/hvac-components.css',
array('hvac-design-system'),
$this->version
);
// Navigation styles now handled by consolidated core CSS
// Removed hvac-navigation-simple.css to prevent CSS conflicts
// The consolidated core CSS has proper flex-direction: row declarations
// Always load full core bundle (contains navigation CSS)
wp_enqueue_style(
'hvac-consolidated-core',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-core.css',
array('hvac-design-system', 'hvac-components'),
$this->version
);
// Load fixed dashboard bundle for dashboard/management pages
if ($this->is_dashboard_page() || $this->is_event_manage_page()) {
wp_enqueue_style(
'hvac-consolidated-dashboard',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-dashboard-fixed.css',
array('hvac-consolidated-core'),
$this->version
);
}
// Load fixed forms bundle for registration/profile pages
if ($this->is_registration_page() || $this->is_trainer_profile_page() ||
$this->is_organizers_page() || $this->is_venues_page()) {
wp_enqueue_style(
'hvac-consolidated-forms',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-forms-fixed.css',
array('hvac-consolidated-core'),
$this->version
);
}
// Load certificates bundle for certificate pages
if ($this->is_certificate_page()) {
wp_enqueue_style(
'hvac-consolidated-certificates',
HVAC_PLUGIN_URL . 'assets/css/hvac-consolidated-certificates.css',
array('hvac-consolidated-core'),
$this->version
);
}
// Note: page-specific JavaScript is still enqueued separately
$this->enqueue_page_specific_scripts();
}
/**
* Enqueue page-specific JavaScript
*
* @return void
*/
private function enqueue_page_specific_scripts() {
// Main plugin scripts
wp_enqueue_script(
'hvac-community-events',
HVAC_PLUGIN_URL . 'assets/js/hvac-community-events.js',
array('jquery'),
$this->version,
true
);
// Robust navigation functionality
wp_enqueue_script(
'hvac-navigation-robust',
HVAC_PLUGIN_URL . 'assets/js/hvac-navigation-robust.js',
array('jquery'),
$this->version,
true
);
// Mobile responsive functionality
wp_enqueue_script(
'hvac-mobile-responsive',
HVAC_PLUGIN_URL . 'assets/js/hvac-mobile-responsive.js',
array('jquery', 'hvac-community-events'),
$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',
$this->get_compatible_script_path('hvac-registration'),
array('jquery', 'hvac-community-events'),
$this->version,
true
);
}
// Trainer profile scripts
if ($this->is_trainer_profile_page()) {
wp_enqueue_script(
'hvac-profile-sharing',
HVAC_PLUGIN_URL . 'assets/js/hvac-profile-sharing.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 scripts
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'),
),
));
}
// Localize profile sharing script
if ($this->is_trainer_profile_page()) {
wp_localize_script('hvac-profile-sharing', 'hvac_sharing', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_profile_sharing'),
'strings' => array(
'loading' => __('Loading...', 'hvac-community-events'),
'error' => __('An error occurred. Please try again.', 'hvac-community-events'),
'copied' => __('Copied to clipboard!', 'hvac-community-events'),
'copy_error' => __('Unable to copy. Please select and copy manually.', 'hvac-community-events'),
'loading_error' => __('Unable to load profile card. Please try again.', 'hvac-community-events')
),
));
}
}
/**
* Enqueue individual CSS files (original system)
*
* @return void
*/
private function enqueue_individual_css_files() {
// 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
);
// Accessibility fixes
wp_enqueue_style(
'hvac-accessibility-fixes',
HVAC_PLUGIN_URL . 'assets/css/hvac-accessibility-fixes.css',
array('hvac-common'),
$this->version
);
// Mobile responsive optimizations - Load after base styles
wp_enqueue_style(
'hvac-mobile-responsive',
HVAC_PLUGIN_URL . 'assets/css/hvac-mobile-responsive.css',
array('hvac-common', 'hvac-accessibility-fixes'),
$this->version
);
// Load the rest of the page-specific CSS
$this->enqueue_page_specific_css();
}
/**
* Enqueue page-specific CSS (used by both consolidated and individual systems)
*
* @return void
*/
private function enqueue_page_specific_css() {
// 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
);
// Load specific certificate page styles
if (strpos($_SERVER['REQUEST_URI'], 'certificate-reports') !== false) {
wp_enqueue_style(
'hvac-certificate-reports',
HVAC_PLUGIN_URL . 'assets/css/hvac-certificate-reports.css',
array('hvac-certificates'),
$this->version
);
}
if (strpos($_SERVER['REQUEST_URI'], 'generate-certificates') !== false) {
wp_enqueue_style(
'hvac-generate-certificates',
HVAC_PLUGIN_URL . 'assets/css/hvac-generate-certificates.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
);
}
// Trainer profile pages styles
if ($this->is_trainer_profile_page()) {
wp_enqueue_style(
'hvac-trainer-profile',
HVAC_PLUGIN_URL . 'assets/css/hvac-trainer-profile.css',
array('hvac-community-events'),
$this->version
);
// Profile sharing styles - includes modal and QR code display
wp_enqueue_style(
'hvac-profile-sharing',
HVAC_PLUGIN_URL . 'assets/css/hvac-profile-sharing.css',
array('hvac-trainer-profile'),
$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
);
// Mobile responsive functionality - Load on all plugin pages
wp_enqueue_script(
'hvac-mobile-responsive',
HVAC_PLUGIN_URL . 'assets/js/hvac-mobile-responsive.js',
array('jquery', 'hvac-community-events'),
$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
);
}
// DISABLED - Using TEC Community Events 5.x instead
// if ($this->is_event_manage_page() || $this->is_create_event_page() || $this->is_edit_event_page()) {
// wp_enqueue_script(
// 'hvac-rest-api-event-submission',
// HVAC_PLUGIN_URL . 'assets/js/hvac-rest-api-event-submission.js',
// array('jquery'),
// $this->version,
// true
// );
//
// // Localize script with necessary data
// wp_localize_script('hvac-rest-api-event-submission', 'hvac_ajax', array(
// 'ajaxurl' => admin_url('admin-ajax.php'),
// 'nonce' => wp_create_nonce('hvac_ajax_nonce')
// ));
// }
// Registration scripts
if ($this->is_registration_page()) {
wp_enqueue_script(
'hvac-registration',
$this->get_compatible_script_path('hvac-registration'),
array('jquery', 'hvac-community-events'),
$this->version,
true
);
}
// Trainer profile scripts
if ($this->is_trainer_profile_page()) {
wp_enqueue_script(
'hvac-profile-sharing',
HVAC_PLUGIN_URL . 'assets/js/hvac-profile-sharing.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
);
// Safari debugging script - temporarily disabled to isolate other script issues
/*
if ($this->is_find_trainer_page()) {
wp_enqueue_script(
'hvac-safari-debug',
HVAC_PLUGIN_URL . 'assets/js/hvac-safari-debug.js',
array(), // No dependencies - load early
$this->version,
false // Load in head for early debugging
);
}
*/
// 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'),
),
));
}
// Localize profile sharing script
if ($this->is_trainer_profile_page()) {
wp_localize_script('hvac-profile-sharing', 'hvac_sharing', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_profile_sharing'),
'strings' => array(
'loading' => __('Loading...', 'hvac-community-events'),
'error' => __('An error occurred. Please try again.', 'hvac-community-events'),
'copied' => __('Copied to clipboard!', 'hvac-community-events'),
'copy_error' => __('Unable to copy. Please select and copy manually.', 'hvac-community-events'),
'loading_error' => __('Unable to load profile card. 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 create event page
*
* @return bool
*/
private function is_create_event_page() {
// Check by page slug
if (is_page('create-event') || is_page('trainer/create-event')) {
return true;
}
// Check by page template
if (is_page_template('page-create-event.php') || is_page_template('templates/page-create-event.php')) {
return true;
}
// Check URL path
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if ($current_path === 'trainer/create-event' || $current_path === 'trainer/create-event/') {
return true;
}
return false;
}
/**
* Check if current page is edit event page
*
* @return bool
*/
private function is_edit_event_page() {
// Check by page slug
if (is_page('edit-event') || is_page('trainer/edit-event')) {
return true;
}
// Check by page template
if (is_page_template('page-edit-event.php') || is_page_template('templates/page-edit-event.php')) {
return true;
}
// Check URL path
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
if ($current_path === 'trainer/edit-event' || $current_path === 'trainer/edit-event/') {
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;
}
/**
* Check if current page is a trainer profile page
*
* @return bool
*/
private function is_trainer_profile_page() {
return is_page('trainer/profile') ||
is_page('trainer/profile/edit') ||
is_page('trainer/my-profile') ||
strpos($_SERVER['REQUEST_URI'], '/trainer/profile') !== false;
}
/**
* Check if current page is the find-a-trainer page
*
* @return bool
*/
private function is_find_trainer_page() {
return is_page('find-a-trainer') ||
strpos($_SERVER['REQUEST_URI'], 'find-a-trainer') !== 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;
}
/**
* Localize sharing data for profile pages
*
* @param array $data Sharing data to localize
* @return void
*/
public function localize_sharing_data($data) {
if ($this->is_trainer_profile_page() && wp_script_is('hvac-profile-sharing', 'enqueued')) {
wp_localize_script('hvac-profile-sharing', 'hvac_sharing_data', $data);
}
}
}