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 ]; // 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'); } } // Load Zoho integration if in admin if (is_admin()) { $zoho_path = HVAC_CE_PLUGIN_DIR . 'includes/admin/class-zoho-admin.php'; if (file_exists($zoho_path)) { require_once $zoho_path; HVAC_Logger::info("Included Zoho admin interface", 'Core'); } } 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')); } // 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; } } /** * 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 if in admin if (is_admin()) { $this->init_zoho_admin(); $this->init_admin_dashboard(); } // Initialize forms $this->init_forms(); // Initialize shortcodes $this->init_shortcodes(); // 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')); // Remove the event form shortcode as we're using TEC's shortcode instead // add_shortcode('hvac_event_form', array('HVAC_Community_Event_Handler', 'render_event_form')); // 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 '
No event ID provided. Please access this page from your dashboard.
'; } // Check if the event exists and user has permission to view it $event = get_post($event_id); if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) { return '
Event not found or invalid.
'; } // Check if the current user has permission to view this event // For now, we'll check if they're the post author or have edit_posts capability if ($event->post_author != get_current_user_id() && !current_user_can('edit_posts')) { return '
You do not have permission to view this event summary.
'; } // Include the event summary template ob_start(); include HVAC_CE_PLUGIN_DIR . 'templates/event-summary/template-event-summary.php'; return ob_get_clean(); } /** * Render trainer profile content */ public function render_trainer_profile() { if (!is_user_logged_in()) { 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 '
No event ID provided. Please access this page from your dashboard or event summary page.
'; } // Check if the event exists and user has permission to view it $event = get_post($event_id); if (!$event || get_post_type($event) !== Tribe__Events__Main::POSTTYPE) { return '
Event not found or invalid.
'; } // Check if the current user has permission to view this event // For now, we'll check if they're the post author or have edit_posts capability if ($event->post_author != get_current_user_id() && !current_user_can('edit_posts')) { return '
You do not have permission to email attendees for this event.
'; } // Include the email attendees template ob_start(); include HVAC_CE_PLUGIN_DIR . 'templates/email-attendees/template-email-attendees.php'; return ob_get_clean(); } /** * Include custom templates for plugin pages */ public function load_custom_templates($template) { // Check for dashboard page if (is_page('hvac-dashboard')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-hvac-dashboard.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for community-login page if (is_page('community-login')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/page-community-login.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for my-events page if (is_page('my-events')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/page-my-events.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for trainer-profile page if (is_page('trainer-profile')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-trainer-profile.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for event-summary page if (is_page('event-summary')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-event-summary.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for email-attendees page if (is_page('email-attendees')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/email-attendees/template-email-attendees.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for edit-profile page if (is_page('edit-profile')) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/template-edit-profile.php'; if (file_exists($custom_template)) { return $custom_template; } } // Check for single event view (temporary) if ( is_singular( 'tribe_events' ) ) { $custom_template = HVAC_CE_PLUGIN_DIR . 'templates/single-tribe_events.php'; if ( file_exists( $custom_template ) ) { return $custom_template; } } // Add future custom templates here return $template; } // End load_custom_templates } // End class HVAC_Community_Events