define_constants(); HVAC_Logger::info('Constants defined', 'Core'); $this->includes(); HVAC_Logger::info('Includes completed', 'Core'); $this->init_hooks(); HVAC_Logger::info('Hooks initialized', 'Core'); } /** * Define constants */ private function define_constants() { // Additional constants can be defined here } /** * Include required files */ private function includes() { HVAC_Logger::info('Loading required files', 'Core'); $files_to_include = [ 'class-hvac-roles.php', 'class-hvac-registration.php', 'class-hvac-settings.php', 'community/class-login-handler.php', 'community/class-event-handler.php', 'class-hvac-dashboard-data.php', 'class-event-form-handler.php', // Add our form handler 'class-event-author-fixer.php', // Fix event author assignment 'class-hvac-dashboard.php', // New dashboard handler 'certificates/class-certificate-installer.php', // Certificate database installer 'certificates/class-certificate-manager.php', // Certificate management 'certificates/class-certificate-generator.php', // Certificate generation 'certificates/class-certificate-settings.php', // Certificate settings 'certificates/class-certificate-template.php', // Certificate template 'certificates/class-certificate-security.php', // Certificate security 'certificates/class-certificate-ajax-handler.php', // Certificate AJAX handling 'certificates/class-certificate-fix.php', // Certificate diagnostic/fix tool 'community/class-email-debug.php' // Email debugging tools ]; // Make sure Login_Handler is loaded first for shortcode registration $login_handler_path = HVAC_CE_PLUGIN_DIR . 'includes/community/class-login-handler.php'; if (file_exists($login_handler_path)) { require_once $login_handler_path; HVAC_Logger::info("Included file: community/class-login-handler.php", 'Core'); } foreach ($files_to_include as $file) { // Skip Login_Handler as we've already loaded it if ($file === 'community/class-login-handler.php') { continue; } $path = HVAC_CE_PLUGIN_DIR . 'includes/' . $file; if (file_exists($path)) { require_once $path; HVAC_Logger::info("Included file: {$file}", 'Core'); } else { HVAC_Logger::error("Failed to include file: {$file} - File not found", 'Core'); } } // Note: Zoho admin interface will be loaded in init_zoho_admin() method during hooks initialization HVAC_Logger::info('All required files loaded', 'Core'); } /** * Initialize hooks */ private function init_hooks() { // Register activation/deactivation hooks // Note: These hooks are typically registered outside the class instance context // register_activation_hook(__FILE__, array($this, 'activate')); // This won't work correctly here // register_deactivation_hook(__FILE__, array($this, 'deactivate')); // This won't work correctly here // Initialize other hooks add_action('init', array($this, 'init')); // Template loading for custom pages add_filter('template_include', array($this, 'load_custom_templates')); // Add authentication check for event summary page add_action('template_redirect', array($this, 'check_event_summary_auth')); // Add authentication check for email attendees page add_action('template_redirect', array($this, 'check_email_attendees_auth')); // Add authentication check for certificate pages add_action('template_redirect', array($this, 'check_certificate_pages_auth')); } // End init_hooks /** * Check authentication for event summary page */ public function check_event_summary_auth() { // Check if we're on the event-summary page if (is_page('event-summary') && !is_user_logged_in()) { // Redirect to login page wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI']))); exit; } } /** * Check authentication for email attendees page */ public function check_email_attendees_auth() { // Check if we're on the email-attendees page if (is_page('email-attendees') && !is_user_logged_in()) { // Redirect to login page wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI']))); exit; } } /** * Check authentication for certificate pages */ public function check_certificate_pages_auth() { // Check if we're on certificate-related pages if ((is_page('certificate-reports') || is_page('generate-certificates')) && !is_user_logged_in()) { // Redirect to login page wp_redirect(home_url('/community-login/?redirect_to=' . urlencode($_SERVER['REQUEST_URI']))); exit; } } /** * Plugin activation (Should be called statically or from the main plugin file context) */ public static function activate() { // Activation code here (e.g., page creation, role creation) // Note: This method might need to be moved or called differently } /** * Plugin deactivation (Should be called statically or from the main plugin file context) */ public static function deactivate() { // Remove the hvac_trainer role require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php'; // Ensure class is available HVAC_Roles::remove_hvac_trainer_role(); HVAC_Logger::info('Deactivation completed: HVAC trainer role removed.', 'Core'); } /** * Initialize function (hooked on 'init') */ public function init() { // Initialize roles $this->init_roles(); // Initialize settings (admin menu) $this->init_settings(); // Initialize Zoho admin always (needed for AJAX) $this->init_zoho_admin(); // Initialize admin dashboard if in admin or handling AJAX if (is_admin() || (defined('DOING_AJAX') && DOING_AJAX)) { $this->init_admin_dashboard(); } // Initialize forms $this->init_forms(); // Initialize shortcodes $this->init_shortcodes(); // Initialize certificate AJAX handler if (class_exists('HVAC_Certificate_AJAX_Handler')) { HVAC_Certificate_AJAX_Handler::instance(); } // Initialize certificate security if (class_exists('HVAC_Certificate_Security')) { HVAC_Certificate_Security::instance(); } // Initialize event form handler if (class_exists('HVAC_Community_Events\Event_Form_Handler')) { new \HVAC_Community_Events\Event_Form_Handler(); } } /** * Initialize roles */ private function init_roles() { $roles = new HVAC_Roles(); // Note: Role creation is handled in the activate method or the class constructor } /** * Initialize settings */ private function init_settings() { new HVAC_Settings(); } /** * Initialize Zoho admin */ private function init_zoho_admin() { if (file_exists(HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php')) { require_once HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php'; new HVAC_Zoho_Admin(); } } /** * Initialize admin dashboard */ private function init_admin_dashboard() { if (file_exists(HVAC_CE_PLUGIN_DIR . 'includes/admin/class-admin-dashboard.php')) { require_once HVAC_CE_PLUGIN_DIR . 'includes/admin/class-admin-dashboard.php'; new HVAC_Admin_Dashboard(); } } /** * Initialize forms */ private function init_forms() { $registration = new HVAC_Registration(); // Note: Form registration is handled in the class constructor } /** * Initialize shortcodes */ private function init_shortcodes() { // Registration form shortcode add_shortcode('hvac_trainer_registration', array('HVAC_Registration', 'render_registration_form')); // Community login shortcode - initialize Login_Handler to register the shortcode new \HVAC_Community_Events\Community\Login_Handler(); // Dashboard shortcode add_shortcode('hvac_dashboard', array($this, 'render_dashboard')); // Add the event summary shortcode add_shortcode('hvac_event_summary', array($this, 'render_event_summary')); // Add trainer profile shortcode add_shortcode('hvac_trainer_profile', array($this, 'render_trainer_profile')); // Add edit profile shortcode add_shortcode('hvac_edit_profile', array('HVAC_Registration', 'render_edit_profile_form')); // Add email attendees shortcode add_shortcode('hvac_email_attendees', array($this, 'render_email_attendees')); // Add certificate reports shortcode add_shortcode('hvac_certificate_reports', array($this, 'render_certificate_reports')); // Add generate certificates shortcode add_shortcode('hvac_generate_certificates', array($this, 'render_generate_certificates')); // Add certificate fix shortcode (admin only) add_shortcode('hvac_certificate_fix', array($this, 'render_certificate_fix')); // Add community events shortcode as fallback if TEC CE is not available add_shortcode('tribe_community_events', array($this, 'render_tribe_community_events')); // Add future shortcodes here } /** * Render dashboard content */ public function render_dashboard() { if (!is_user_logged_in()) { return '
Please log in to view the dashboard.
'; } // Include the dashboard template ob_start(); include HVAC_CE_PLUGIN_DIR . 'templates/template-hvac-dashboard.php'; return ob_get_clean(); } /** * Render event summary content */ public function render_event_summary() { // Check if user is logged in if (!is_user_logged_in()) { return 'Please log in to view the event summary.
'; } // Get event ID from URL parameter $event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0; if ($event_id <= 0) { return 'Please log in to view your profile.
'; } // Include the trainer profile template ob_start(); include HVAC_CE_PLUGIN_DIR . 'templates/template-trainer-profile.php'; return ob_get_clean(); } /** * Render email attendees content */ public function render_email_attendees() { // Check if user is logged in if (!is_user_logged_in()) { return 'Please log in to email event attendees.
'; } // Get event ID from URL parameter $event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0; if ($event_id <= 0) { return 'Please log in to view certificate reports.
'; } // Check if the current user has permission to view certificate reports // For now, we'll check if they're a trainer or have edit_posts capability if (!current_user_can('hvac_trainer') && !current_user_can('edit_posts')) { return 'Please log in to generate certificates.
'; } // Get event ID from URL parameter if available $event_id = isset($_GET['event_id']) ? absint($_GET['event_id']) : 0; // Check if the event exists and user has permission to view it when event_id is provided if ($event_id > 0) { $event = get_post($event_id); if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) { return 'Please log in to access this feature.
'; } // Check if user has permission if (!current_user_can('hvac_trainer') && !current_user_can('edit_posts')) { return 'Fill out the form below to create a new training event. All events are reviewed before being published.
Note: This page is currently using a simplified form. For full event creation functionality, please use the WordPress admin area or ensure The Events Calendar Community Events plugin is properly configured.
Manage and view all your training events. This list shows events you've created.
Note: Event management is available on your main dashboard. This is a simplified view.
You haven't created any events yet.
Create Your First Event