init_secure_download();
HVAC_Logger::info('Certificate security initialized during activation', 'Activation');
}
// Define hierarchical page structure
$parent_pages = [
'trainer' => [
'title' => 'Trainer',
'content' => '',
'children' => [
'dashboard' => [
'title' => 'Trainer Dashboard',
'content' => '[hvac_dashboard]',
],
'registration' => [
'title' => 'Trainer Registration',
'content' => '[hvac_trainer_registration]',
],
'my-profile' => [
'title' => 'Trainer Profile',
'content' => '[hvac_trainer_profile]',
],
'email-attendees' => [
'title' => 'Email Attendees',
'content' => '[hvac_email_attendees]',
],
'certificate-reports' => [
'title' => 'Certificate Reports',
'content' => '[hvac_certificate_reports]',
],
'generate-certificates' => [
'title' => 'Generate Certificates',
'content' => '[hvac_generate_certificates]',
],
'documentation' => [
'title' => 'Trainer Documentation',
'content' => '[hvac_documentation]',
],
'attendee-profile' => [
'title' => 'Attendee Profile',
'content' => '[hvac_attendee_profile]',
],
'communication-templates' => [
'title' => 'Communication Templates',
'content' => '[hvac_communication_templates]',
],
'communication-schedules' => [
'title' => 'Communication Schedules',
'content' => '[hvac_communication_schedules]',
],
'event' => [
'title' => 'Event',
'content' => '',
'children' => [
'manage' => [
'title' => 'Manage Event',
'content' => '[hvac_event_navigation page_title="Create Event" show_instructions="yes"][tribe_community_events view="submission_form"]',
],
'summary' => [
'title' => 'Event Summary',
'content' => '[hvac_event_summary]',
],
]
]
]
],
'master-trainer' => [
'title' => 'Master Trainer',
'content' => '',
'children' => [
'dashboard' => [
'title' => 'Master Dashboard',
'content' => '[hvac_master_dashboard]',
],
'certificate-fix' => [
'title' => 'Certificate System Diagnostics',
'content' => '[hvac_certificate_fix]',
],
'google-sheets' => [
'title' => 'Google Sheets Integration',
'content' => '[hvac_google_sheets]',
],
]
]
];
// Define root pages (flat structure)
$root_pages = [
'training-login' => [
'title' => 'Trainer Login',
'content' => '[hvac_community_login]',
'template' => 'page-community-login.php',
],
'registration-pending' => [
'title' => 'Registration Pending',
'content' => '
Registration Submitted Successfully
Thank you for registering as an HVAC trainer. Your registration has been submitted and is currently being reviewed.
You will receive an email notification once your account has been approved and activated.
If you have any questions, please contact our support team.
Return to Login
',
],
];
$created_pages = [];
// Create root pages first
HVAC_Logger::info('Creating root pages...', 'Activation');
foreach ($root_pages as $slug => $page_data) {
$existing = get_page_by_path($slug);
if (!$existing) {
$page_args = [
'post_title' => $page_data['title'],
'post_name' => $slug,
'post_content' => $page_data['content'],
'post_status' => 'publish',
'post_type' => 'page',
'comment_status' => 'closed',
'ping_status' => 'closed',
];
if (!empty($page_data['template'])) {
$page_args['page_template'] = $page_data['template'];
}
$page_id = wp_insert_post($page_args);
if (!is_wp_error($page_id)) {
$created_pages[$slug] = $page_id;
HVAC_Logger::info("Created root page: {$page_data['title']} (/{$slug}/)", 'Activation');
} else {
HVAC_Logger::error("Failed to create root page: {$slug} - " . $page_id->get_error_message(), 'Activation');
}
} else {
HVAC_Logger::info("Root page exists: {$page_data['title']} (/{$slug}/)", 'Activation');
}
}
// Create hierarchical pages
HVAC_Logger::info('Creating hierarchical pages...', 'Activation');
foreach ($parent_pages as $parent_slug => $parent_data) {
// Create parent page
$existing_parent = get_page_by_path($parent_slug);
$parent_id = null;
if (!$existing_parent) {
$parent_args = [
'post_title' => $parent_data['title'],
'post_name' => $parent_slug,
'post_content' => $parent_data['content'],
'post_status' => 'publish',
'post_type' => 'page',
'comment_status' => 'closed',
'ping_status' => 'closed',
];
$parent_id = wp_insert_post($parent_args);
if (!is_wp_error($parent_id)) {
$created_pages[$parent_slug] = $parent_id;
HVAC_Logger::info("Created parent page: {$parent_data['title']} (/{$parent_slug}/)", 'Activation');
} else {
HVAC_Logger::error("Failed to create parent page: {$parent_slug} - " . $parent_id->get_error_message(), 'Activation');
continue;
}
} else {
$parent_id = $existing_parent->ID;
HVAC_Logger::info("Parent page exists: {$parent_data['title']} (/{$parent_slug}/)", 'Activation');
}
// Create child pages
if ($parent_id && isset($parent_data['children'])) {
foreach ($parent_data['children'] as $child_slug => $child_data) {
$full_path = $parent_slug . '/' . $child_slug;
$existing_child = get_page_by_path($full_path);
if (!$existing_child) {
$child_args = [
'post_title' => $child_data['title'],
'post_name' => $child_slug,
'post_content' => $child_data['content'],
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $parent_id,
'comment_status' => 'closed',
'ping_status' => 'closed',
];
$child_id = wp_insert_post($child_args);
if (!is_wp_error($child_id)) {
$created_pages[$full_path] = $child_id;
HVAC_Logger::info("Created child page: {$child_data['title']} (/{$full_path}/)", 'Activation');
// Handle grandchildren (like event/manage, event/summary)
if (isset($child_data['children'])) {
foreach ($child_data['children'] as $grandchild_slug => $grandchild_data) {
$grandchild_path = $parent_slug . '/' . $child_slug . '/' . $grandchild_slug;
$existing_grandchild = get_page_by_path($grandchild_path);
if (!$existing_grandchild) {
$grandchild_args = [
'post_title' => $grandchild_data['title'],
'post_name' => $grandchild_slug,
'post_content' => $grandchild_data['content'],
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $child_id,
'comment_status' => 'closed',
'ping_status' => 'closed',
];
$grandchild_id = wp_insert_post($grandchild_args);
if (!is_wp_error($grandchild_id)) {
$created_pages[$grandchild_path] = $grandchild_id;
HVAC_Logger::info("Created grandchild page: {$grandchild_data['title']} (/{$grandchild_path}/)", 'Activation');
} else {
HVAC_Logger::error("Failed to create grandchild page: {$grandchild_path} - " . $grandchild_id->get_error_message(), 'Activation');
}
} else {
HVAC_Logger::info("Grandchild page exists: {$grandchild_data['title']} (/{$grandchild_path}/)", 'Activation');
}
}
}
} else {
HVAC_Logger::error("Failed to create child page: {$full_path} - " . $child_id->get_error_message(), 'Activation');
}
} else {
HVAC_Logger::info("Child page exists: {$child_data['title']} (/{$full_path}/)", 'Activation');
}
}
}
}
// Store created pages in WordPress option
update_option('hvac_ce_created_pages', $created_pages);
HVAC_Logger::info('Page creation completed. Created ' . count($created_pages) . ' pages', 'Activation');
// Create the custom roles
$roles_manager = new HVAC_Roles();
// Create trainer role
$result = $roles_manager->create_trainer_role();
if ($result) {
HVAC_Logger::info('Successfully created hvac_trainer role.', 'Activation');
} else {
HVAC_Logger::error('Failed to create hvac_trainer role.', 'Activation');
}
// Create master trainer role
$master_result = $roles_manager->create_master_trainer_role();
if ($master_result) {
HVAC_Logger::info('Successfully created hvac_master_trainer role.', 'Activation');
} else {
HVAC_Logger::error('Failed to create hvac_master_trainer role.', 'Activation');
}
// Grant administrators access to dashboard to prevent redirect loops
$admin_access = $roles_manager->grant_admin_dashboard_access();
if ($admin_access) {
HVAC_Logger::info('Successfully granted admin dashboard access.', 'Activation');
} else {
HVAC_Logger::error('Failed to grant admin dashboard access.', 'Activation');
}
// Flush rewrite rules to ensure new URLs work
flush_rewrite_rules();
HVAC_Logger::info('Rewrite rules flushed', 'Activation');
HVAC_Logger::info('Completed hierarchical page creation and role setup process', 'Activation');
} // End hvac_ce_create_required_pages
register_activation_hook(__FILE__, 'hvac_ce_create_required_pages');
/**
* Handle backward compatibility redirects for old URLs.
*
* This function redirects old page URLs to their new hierarchical structure
* to maintain compatibility for existing bookmarks and external links.
*/
function hvac_ce_handle_legacy_redirects() {
// Legacy URL to new URL mapping
$legacy_redirects = [
'community-login' => 'training-login',
'hvac-dashboard' => 'trainer/dashboard',
'master-dashboard' => 'master-trainer/dashboard',
'manage-event' => 'trainer/event/manage',
'trainer-profile' => 'trainer/my-profile',
'event-summary' => 'trainer/event/summary',
'email-attendees' => 'trainer/email-attendees',
'certificate-reports' => 'trainer/certificate-reports',
'generate-certificates' => 'trainer/generate-certificates',
'certificate-fix' => 'master-trainer/certificate-fix',
'hvac-documentation' => 'trainer/documentation',
'attendee-profile' => 'trainer/attendee-profile',
'google-sheets' => 'master-trainer/google-sheets',
'communication-templates' => 'trainer/communication-templates',
'communication-schedules' => 'trainer/communication-schedules',
'trainer-registration' => 'trainer/registration',
];
// Get current page slug
global $post;
if (!is_page() || !$post) {
return;
}
$current_slug = $post->post_name;
// Check if current page is a legacy URL that needs redirecting
if (isset($legacy_redirects[$current_slug])) {
// Get current URL path to prevent redirect loops
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$target_path = $legacy_redirects[$current_slug];
// Skip redirect if we are already on the target path
if ($current_path === $target_path) {
return;
}
$new_url = home_url('/' . $legacy_redirects[$current_slug] . '/');
// Preserve query parameters
if (!empty($_SERVER['QUERY_STRING'])) {
$new_url .= '?' . $_SERVER['QUERY_STRING'];
}
// Perform 301 redirect
wp_redirect($new_url, 301);
exit;
}
}
add_action('template_redirect', 'hvac_ce_handle_legacy_redirects');
/**
* Remove custom roles upon plugin deactivation.
*/
function hvac_ce_remove_roles() {
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php';
$roles_manager = new HVAC_Roles();
$roles_manager->remove_trainer_role();
$roles_manager->remove_master_trainer_role();
$roles_manager->revoke_admin_dashboard_access();
// Flush rewrite rules to clean up certificate download URLs
flush_rewrite_rules();
HVAC_Logger::info('Deactivation hook fired, removed hvac_trainer role and admin dashboard access, flushed rewrite rules.', 'Deactivation');
}
register_deactivation_hook(__FILE__, 'hvac_ce_remove_roles');
/**
* Enqueue common styles and scripts for HVAC Community Events pages
*/
function hvac_ce_enqueue_common_assets() {
// Add debug logging to see if function is being called
error_log('[HVAC CSS Debug] hvac_ce_enqueue_common_assets called');
// Early return if not on HVAC pages to prevent loading on home page
if (is_front_page() || is_home()) {
error_log('[HVAC CSS Debug] Returning early - is front page or home');
return;
}
// Check if we're on an HVAC plugin page - include both hierarchical and flat page names
$hvac_pages = [
// Hierarchical page paths
'trainer/dashboard', 'trainer/registration', 'trainer/my-profile',
'trainer/event/manage', 'trainer/event/summary', 'trainer/email-attendees', 'trainer/certificate-reports',
'trainer/generate-certificates', 'master-trainer/certificate-fix', 'trainer/documentation', 'trainer/attendee-profile',
'master-trainer/dashboard', 'master-trainer/google-sheets', 'trainer/communication-templates', 'trainer/communication-schedules',
// Flat page names (legacy and backup)
'training-login', 'trainer-dashboard', 'trainer-registration', 'trainer-my-profile',
'trainer-event-manage', 'trainer-event-summary', 'trainer-email-attendees', 'trainer-certificate-reports',
'trainer-generate-certificates', 'master-trainer-certificate-fix', 'trainer-documentation', 'trainer-attendee-profile',
'master-trainer-dashboard', 'master-trainer-google-sheets', 'trainer-communication-templates', 'trainer-communication-schedules',
// Child page names only
'dashboard', 'registration', 'my-profile', 'manage', 'summary', 'email-attendees', 'certificate-reports',
'generate-certificates', 'certificate-fix', 'documentation', 'attendee-profile', 'google-sheets', 'communication-templates', 'communication-schedules'
];
// Check if we're on an HVAC page using multiple methods
$is_hvac_page = false;
// Method 1: Check by page slug/path
if (is_page($hvac_pages)) {
$is_hvac_page = true;
}
// Method 2: Check by post content containing HVAC shortcodes
global $post;
if ($post && !$is_hvac_page) {
$content = $post->post_content;
$hvac_shortcodes = ['hvac_dashboard', 'hvac_master_dashboard', 'hvac_community_login', 'hvac_google_sheets', 'hvac_certificate_reports', 'hvac_generate_certificates'];
foreach ($hvac_shortcodes as $shortcode) {
if (strpos($content, $shortcode) !== false) {
$is_hvac_page = true;
break;
}
}
}
// Method 3: Force enable for testing - check if URL contains known HVAC paths
if (!$is_hvac_page && isset($_SERVER['REQUEST_URI'])) {
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri, '/trainer/') !== false || strpos($uri, '/master-trainer/') !== false || strpos($uri, '/training-login/') !== false) {
$is_hvac_page = true;
}
}
// Method 4: For debugging - force enable if admin is logged in and URL suggests HVAC content
if (!$is_hvac_page && current_user_can('administrator')) {
if (isset($_SERVER['REQUEST_URI'])) {
$uri = $_SERVER['REQUEST_URI'];
if (strpos($uri, 'hvac') !== false ||
strpos($uri, 'certificate') !== false ||
strpos($uri, 'dashboard') !== false ||
strpos($uri, 'google-sheets') !== false) {
$is_hvac_page = true;
}
}
}
// Method 5: Temporary fix - always load on pages with specific names
if ($post && !$is_hvac_page) {
$post_name = $post->post_name;
$debug_keywords = ['dashboard', 'google-sheets', 'certificate', 'trainer'];
foreach ($debug_keywords as $keyword) {
if (strpos($post_name, $keyword) !== false) {
$is_hvac_page = true;
break;
}
}
}
// For now, let's be more permissive to debug the issue
if (!$is_hvac_page) {
// Temporary: Always load CSS if we're on any non-home page for debugging
if (!is_front_page() && !is_home()) {
$is_hvac_page = true;
}
}
// Only proceed if we're on an HVAC page
if (!$is_hvac_page) {
error_log('[HVAC CSS Debug] Not an HVAC page, returning');
return;
}
error_log('[HVAC CSS Debug] Proceeding with CSS enqueue for HVAC page');
// Enqueue admin bar hiding script for trainers
if (is_user_logged_in()) {
$user = wp_get_current_user();
$has_trainer_role = in_array('hvac_trainer', $user->roles) || in_array('hvac_master_trainer', $user->roles);
$has_admin_role = in_array('administrator', $user->roles);
if ($has_trainer_role && !$has_admin_role) {
wp_enqueue_script(
'hvac-admin-bar-hide',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-admin-bar-hide.js',
array(),
HVAC_CE_VERSION,
false // Load in header for immediate effect
);
}
}
// Enqueue the harmonized framework first - this provides the base styling
error_log('[HVAC CSS Debug] Enqueuing harmonized framework');
wp_enqueue_style(
'hvac-harmonized-framework',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-harmonized.css',
[], // No dependencies - this is the foundation
HVAC_CE_VERSION . '-v3.0.0'
);
// Enqueue the legacy common CSS file for backward compatibility
wp_enqueue_style(
'hvac-common-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-common.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION
);
// Enqueue animations CSS file (ONLY on HVAC pages)
wp_enqueue_style(
'hvac-animations',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-animations.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION
);
// Enqueue mobile navigation CSS file (ONLY on HVAC pages)
wp_enqueue_style(
'hvac-mobile-nav',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-mobile-nav.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION
);
// Enqueue print stylesheet
wp_enqueue_style(
'hvac-print-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-print.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION,
'print' // Print media only
);
// Enqueue the accessibility helper JS (ONLY on HVAC pages)
wp_enqueue_script(
'hvac-accessibility-js',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-accessibility.js',
[], // No dependencies
HVAC_CE_VERSION,
true // Load in footer
);
// Enqueue animations JS (ONLY on HVAC pages)
wp_enqueue_script(
'hvac-animations-js',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-animations.js',
[], // No dependencies
HVAC_CE_VERSION,
true // Load in footer
);
// Enqueue mobile navigation JS (ONLY on HVAC pages)
wp_enqueue_script(
'hvac-mobile-nav-js',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-mobile-nav.js',
[], // No dependencies
HVAC_CE_VERSION,
true // Load in footer
);
// Enqueue page-specific enhanced styles based on current page
if (is_page('trainer/dashboard')) {
wp_enqueue_style(
'hvac-dashboard-enhanced',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard-enhanced.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION . '-v3.0.0'
);
// Keep legacy for compatibility
wp_enqueue_style(
'hvac-dashboard-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
['hvac-dashboard-enhanced'], // Load after enhanced
HVAC_CE_VERSION
);
}
if (is_page('master-trainer/dashboard')) {
// Master dashboard uses same styling as regular dashboard
wp_enqueue_style(
'hvac-dashboard-enhanced',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard-enhanced.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION . '-v3.0.0'
);
wp_enqueue_style(
'hvac-dashboard-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
['hvac-dashboard-enhanced'], // Load after enhanced
HVAC_CE_VERSION
);
}
if (is_page('training-login')) {
wp_enqueue_style(
'hvac-community-login-enhanced',
HVAC_CE_PLUGIN_URL . 'assets/css/community-login-enhanced.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION . '-v3.0.0'
);
// Keep legacy for compatibility
wp_enqueue_style(
'hvac-community-login-style',
HVAC_CE_PLUGIN_URL . 'assets/css/community-login.css',
['hvac-community-login-enhanced'], // Load after enhanced
HVAC_CE_VERSION
);
}
// Check multiple ways for registration page
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
$is_registration_page = is_page('trainer/registration') ||
is_page('trainer-registration') ||
$current_path === 'trainer/registration' ||
strpos($current_path, 'trainer/registration') !== false;
if ($is_registration_page) {
error_log('[HVAC CSS Debug] Registration page detected, enqueuing CSS');
wp_enqueue_style(
'hvac-registration-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-registration.css',
['hvac-common-style'], // Depends on common styles
HVAC_CE_VERSION
);
} else {
error_log('[HVAC CSS Debug] Not registration page. Current path: ' . $current_path);
}
if (is_page('trainer/email-attendees')) {
wp_enqueue_style(
'hvac-email-attendees-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-email-attendees.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION
);
}
if (is_singular(Tribe__Events__Main::POSTTYPE) || is_page('trainer/event/summary')) {
wp_enqueue_style(
'hvac-event-summary-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-event-summary.css',
['hvac-common-style'], // Depends on common styles
HVAC_CE_VERSION
);
// Enqueue event summary JS for certificate actions
wp_enqueue_script(
'hvac-event-summary-js',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-event-summary.js',
['jquery'], // jQuery dependency
HVAC_CE_VERSION,
true // Load in footer
);
// Localize script with AJAX data
wp_localize_script('hvac-event-summary-js', 'hvacEventSummary', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'certificateNonce' => wp_create_nonce('hvac_certificate_actions')
]);
}
// Enqueue styles for event management page
// Force load CSS on event manage page regardless of user status
$current_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
$is_event_manage_url = strpos($current_url, '/trainer/event/manage') !== false ||
strpos($current_url, 'event/manage') !== false ||
strpos($current_url, 'event%2Fmanage') !== false;
// Check by multiple methods to ensure we catch the page
$is_event_manage = $is_event_manage_url ||
is_page('trainer/event/manage') ||
is_page('manage') ||
is_page(5344) || // Direct page ID from staging
is_page('trainer-event-manage'); // Legacy slug
// Also check if this is ANY page with Community Events content
$has_community_events = false;
if (!$is_event_manage && function_exists('tribe_is_community_edit_event_page')) {
$has_community_events = tribe_is_community_edit_event_page() || tribe_is_community_my_events_page();
}
// Force CSS for event manage page - this ensures it loads for ALL users
if ($is_event_manage || $has_community_events || $is_event_manage_url) {
// Enqueue dedicated event management CSS
wp_enqueue_style(
'hvac-event-manage-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-event-manage.css',
['hvac-common-style'],
HVAC_CE_VERSION
);
// Also enqueue dashboard styles for consistency
wp_enqueue_style(
'hvac-dashboard-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
['hvac-common-style'],
HVAC_CE_VERSION
);
// CSS is now enqueued for event management pages
}
// Enqueue certificate-related styles
if (is_page('trainer/certificate-reports') || is_page('trainer/generate-certificates') || is_page('master-trainer/certificate-fix')) {
wp_enqueue_style(
'hvac-certificates-enhanced',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-certificates-enhanced.css',
['hvac-harmonized-framework'], // Depends on harmonized framework
HVAC_CE_VERSION . '-v3.0.0'
);
// Keep legacy for compatibility
wp_enqueue_style(
'hvac-certificates-admin-style',
HVAC_CE_PLUGIN_URL . 'assets/css/hvac-certificates-admin.css',
['hvac-certificates-enhanced'], // Load after enhanced
HVAC_CE_VERSION
);
// Enqueue certificate JS
wp_enqueue_script(
'hvac-certificate-admin-js',
HVAC_CE_PLUGIN_URL . 'assets/js/hvac-certificate-admin.js',
['jquery', 'wp-color-picker'], // jQuery dependency
HVAC_CE_VERSION,
true // Load in footer
);
// Add WordPress color picker if needed
wp_enqueue_style('wp-color-picker');
wp_enqueue_script('wp-color-picker');
// Localize script with AJAX data
wp_localize_script('hvac-certificate-admin-js', 'hvacCertificateData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'previewNonce' => wp_create_nonce('hvac_certificate_preview')
]);
}
}
add_action('wp_enqueue_scripts', 'hvac_ce_enqueue_common_assets');
/**
* Enqueue styles and scripts for admin dashboard
*/
function hvac_ce_enqueue_admin_assets($hook) {
// Only load on our dashboard page
if ($hook !== 'hvac-community-events_page_hvac-ce-dashboard') {
return;
}
// Enqueue dashboard CSS
wp_enqueue_style(
'hvac-admin-dashboard-style',
HVAC_CE_PLUGIN_URL . 'assets/css/admin-dashboard.css',
array('wp-admin'),
HVAC_CE_VERSION
);
// Enqueue dashboard JS
wp_enqueue_script(
'hvac-admin-dashboard-script',
HVAC_CE_PLUGIN_URL . 'assets/js/admin-dashboard.js',
array('jquery', 'wp-util'),
HVAC_CE_VERSION,
true
);
// Localize script with AJAX data
wp_localize_script('hvac-admin-dashboard-script', 'hvac_admin_dashboard', array(
'ajax_url' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('hvac_admin_nonce')
));
}
// Include the main plugin class
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-community-events.php';
// Include the help system
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-help-system.php';
// Initialize the plugin
function hvac_community_events_init() {
HVAC_Logger::info('Initializing HVAC Community Events plugin', 'Core');
return HVAC_Community_Events::instance();
}
add_action('plugins_loaded', 'hvac_community_events_init');
// Redirect /trainer/ to /trainer/dashboard/
add_action('template_redirect', 'hvac_ce_redirect_trainer_parent_page');
function hvac_ce_redirect_trainer_parent_page() {
// Get the current URL path
$current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
// Check if we're on the trainer parent page (not a child page)
if ($current_path === 'trainer' || $current_path === 'trainer/') {
// Redirect to the dashboard
wp_redirect(home_url('/trainer/dashboard/'), 301);
exit;
}
// Also redirect master-trainer to master-trainer/dashboard
if ($current_path === 'master-trainer' || $current_path === 'master-trainer/') {
wp_redirect(home_url('/master-trainer/dashboard/'), 301);
exit;
}
}
// Initialize certificate URL handler very early to catch URLs before 404
function hvac_init_certificate_url_handler() {
// Load the certificate URL handler class if not already loaded
if (!class_exists('HVAC_Certificate_URL_Handler')) {
$handler_file = HVAC_CE_PLUGIN_DIR . 'includes/certificates/class-certificate-url-handler.php';
if (file_exists($handler_file)) {
require_once $handler_file;
}
}
// Initialize the handler if class exists
if (class_exists('HVAC_Certificate_URL_Handler')) {
HVAC_Certificate_URL_Handler::instance();
}
}
// Hook very early - before WordPress decides it's a 404
add_action('muplugins_loaded', 'hvac_init_certificate_url_handler', 1);
add_action('plugins_loaded', 'hvac_init_certificate_url_handler', 1);
/**
* Include custom template for single event summary page.
*
* @param string $template The path of the template to include.
* @return string The path of the template file.
*/
function hvac_ce_include_event_summary_template( $template ) {
// Check if it's a single event post type view
if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
// Check if the custom template exists in the plugin's template directory
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-hvac-event-summary.php';
if ( file_exists( $custom_template ) ) {
// Return the path to the custom template
return $custom_template;
}
}
// Return the original template if not a single event or custom template doesn't exist
return $template;
}
/**
* Template routing for Order Summary Page.
*/
function hvac_ce_include_order_summary_template( $template ) {
if ( is_page( 'order-summary' ) && isset( $_GET['order_id'] ) && absint( $_GET['order_id'] ) > 0 ) {
$custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-hvac-order-summary.php';
if ( file_exists( $custom_template ) ) {
return $custom_template;
}
}
return $template;
}
// Removed - template handling is now in the main class
// add_filter( 'template_include', 'hvac_ce_include_event_summary_template', 99 );
/**
* Initialize attendee profile handler
*/
function hvac_init_attendee_profile() {
// Load the attendee profile class if not already loaded
if (!class_exists('HVAC_Attendee_Profile')) {
$profile_file = HVAC_CE_PLUGIN_DIR . 'includes/class-attendee-profile.php';
if (file_exists($profile_file)) {
require_once $profile_file;
}
}
// Initialize the handler if class exists
if (class_exists('HVAC_Attendee_Profile')) {
HVAC_Attendee_Profile::instance();
}
}
// Initialize on plugins_loaded
add_action('plugins_loaded', 'hvac_init_attendee_profile', 10);
// Include attendee profile helper functions
require_once HVAC_CE_PLUGIN_DIR . 'includes/helpers/attendee-profile-link.php';
/**
* Handle AJAX request for master dashboard events table
*/
function hvac_ajax_master_dashboard_events() {
// Verify nonce
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'hvac_master_dashboard_nonce')) {
wp_die('Security check failed');
}
// Check permissions
if (!current_user_can('view_master_dashboard') && !current_user_can('view_all_trainer_data') && !current_user_can('manage_options')) {
wp_send_json_error('Insufficient permissions');
}
// Load master dashboard data class if needed
if (!class_exists('HVAC_Master_Dashboard_Data')) {
require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-master-dashboard-data.php';
}
// Initialize data handler
$master_data = new HVAC_Master_Dashboard_Data();
// Get table data with filters
$args = array(
'status' => sanitize_text_field($_POST['status'] ?? 'all'),
'search' => sanitize_text_field($_POST['search'] ?? ''),
'orderby' => sanitize_text_field($_POST['orderby'] ?? 'date'),
'order' => sanitize_text_field($_POST['order'] ?? 'DESC'),
'page' => absint($_POST['page'] ?? 1),
'per_page' => absint($_POST['per_page'] ?? 10),
'date_from' => sanitize_text_field($_POST['date_from'] ?? ''),
'date_to' => sanitize_text_field($_POST['date_to'] ?? ''),
'trainer_id' => absint($_POST['trainer_id'] ?? 0),
);
$table_data = $master_data->get_events_table_data($args);
wp_send_json_success($table_data);
}
add_action('wp_ajax_hvac_master_dashboard_events', 'hvac_ajax_master_dashboard_events');
add_action('wp_ajax_nopriv_hvac_master_dashboard_events', 'hvac_ajax_master_dashboard_events');
/**
* Ensure trainer registration page is publicly accessible
* This prevents any authentication checks from blocking the registration page
*/
add_action('template_redirect', 'hvac_ensure_registration_page_access', 5);
function hvac_ensure_registration_page_access() {
// If we're on the trainer registration page, don't apply any authentication checks
if (is_page('trainer/registration')) {
// Remove any potential authentication hooks that might be added by other code
remove_all_actions('template_redirect', 10);
// Ensure the page loads without authentication
return;
}
}