define_shortcodes(); $this->register_shortcodes(); } /** * Define all plugin shortcodes * * @return void */ private function define_shortcodes() { $this->shortcodes = array( // Dashboard shortcodes 'hvac_dashboard' => array( 'callback' => array($this, 'render_dashboard'), 'description' => 'Trainer dashboard' ), 'hvac_master_dashboard' => array( 'callback' => array($this, 'render_master_dashboard'), 'description' => 'Master trainer dashboard' ), // Event management shortcodes 'hvac_manage_event' => array( 'callback' => array($this, 'render_manage_event'), 'description' => 'Event management form' ), 'hvac_event_summary' => array( 'callback' => array($this, 'render_event_summary'), 'description' => 'Event summary page' ), // Authentication shortcodes 'hvac_community_login' => array( 'callback' => array($this, 'render_login'), 'description' => 'Community login form' ), 'hvac_trainer_registration' => array( 'callback' => array($this, 'render_registration'), 'description' => 'Trainer registration form' ), // Profile shortcodes 'hvac_trainer_profile' => array( 'callback' => array($this, 'render_trainer_profile'), 'description' => 'Trainer profile page' ), // Certificate shortcodes 'hvac_certificate_reports' => array( 'callback' => array($this, 'render_certificate_reports'), 'description' => 'Certificate reports page' ), 'hvac_generate_certificates' => array( 'callback' => array($this, 'render_generate_certificates'), 'description' => 'Certificate generation page' ), // Communication shortcodes 'hvac_email_attendees' => array( 'callback' => array($this, 'render_email_attendees'), 'description' => 'Email attendees interface' ), 'hvac_communication_templates' => array( 'callback' => array($this, 'render_communication_templates'), 'description' => 'Communication templates management' ), 'hvac_communication_schedules' => array( 'callback' => array($this, 'render_communication_schedules'), 'description' => 'Communication schedules management' ), // Venue shortcodes 'hvac_trainer_venues_list' => array( 'callback' => array($this, 'render_venues_list'), 'description' => 'Trainer venues listing page' ), 'hvac_trainer_venue_manage' => array( 'callback' => array($this, 'render_venue_manage'), 'description' => 'Trainer venue management page' ), // Organizer shortcodes 'hvac_trainer_organizers_list' => array( 'callback' => array($this, 'render_organizers_list'), 'description' => 'Trainer organizers listing page' ), 'hvac_trainer_organizer_manage' => array( 'callback' => array($this, 'render_organizer_manage'), 'description' => 'Trainer organizer management page' ), // Profile shortcodes - additional ones beyond hvac_trainer_profile 'hvac_trainer_profile_view' => array( 'callback' => array($this, 'render_trainer_profile_view'), 'description' => 'Trainer profile view page' ), 'hvac_trainer_profile_edit' => array( 'callback' => array($this, 'render_trainer_profile_edit'), 'description' => 'Trainer profile edit page' ), // Admin shortcodes 'hvac_google_sheets' => array( 'callback' => array($this, 'render_google_sheets_admin'), 'description' => 'Google Sheets integration admin' ), ); // Allow filtering of shortcode definitions $this->shortcodes = apply_filters('hvac_shortcode_definitions', $this->shortcodes); } /** * Register all shortcodes * * @return void */ private function register_shortcodes() { foreach ($this->shortcodes as $tag => $config) { add_shortcode($tag, $config['callback']); } // Log registration HVAC_Logger::info('Registered ' . count($this->shortcodes) . ' shortcodes', 'Shortcodes'); } /** * Get registered shortcodes * * @return array */ public function get_shortcodes() { return $this->shortcodes; } /** * Check if shortcode is registered * * @param string $tag Shortcode tag * @return bool */ public function is_registered($tag) { return isset($this->shortcodes[$tag]); } // ======================================== // Shortcode Render Methods // ======================================== /** * Render dashboard shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_dashboard($atts = array()) { // Add debug comment to verify this method is being called $debug = ''; // Use the HVAC_Community_Events instance method if (class_exists('HVAC_Community_Events')) { $hvac = HVAC_Community_Events::get_instance(); if (method_exists($hvac, 'render_dashboard')) { return $debug . $hvac->render_dashboard(); } } // Fallback if class not available if (!is_user_logged_in()) { return $debug . '

' . __('Please log in to view the dashboard.', 'hvac-community-events') . '

'; } // Include the dashboard template ob_start(); include HVAC_PLUGIN_DIR . 'templates/template-hvac-dashboard.php'; return ob_get_clean(); } /** * Render master dashboard shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_master_dashboard($atts = array()) { // Add debug comment to verify this method is being called $debug = ''; // Use the HVAC_Community_Events instance method if (class_exists('HVAC_Community_Events')) { $hvac = HVAC_Community_Events::get_instance(); if (method_exists($hvac, 'render_master_dashboard')) { return $debug . $hvac->render_master_dashboard(); } } // Fallback if class not available if (!is_user_logged_in()) { return $debug . '

' . __('Please log in to view the master dashboard.', 'hvac-community-events') . '

'; } if (!current_user_can('view_master_dashboard') && !current_user_can('view_all_trainer_data') && !current_user_can('administrator')) { return $debug . '
' . __('You do not have permission to view the master dashboard. This dashboard is only available to Master Trainers and Administrators.', 'hvac-community-events') . '
'; } // Include the master dashboard template ob_start(); include HVAC_PLUGIN_DIR . 'templates/template-hvac-master-dashboard.php'; return ob_get_clean(); } /** * Render manage event shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_manage_event($atts = array()) { // The manage event page uses The Events Calendar Community Events shortcode // This shortcode is just a placeholder since the actual functionality // is handled by the tribe_community_events shortcode if (!shortcode_exists('tribe_community_events')) { return '

' . __('Event management requires The Events Calendar Community Events add-on.', 'hvac-community-events') . '

'; } // Return the tribe shortcode return '[tribe_community_events]'; } /** * Render event summary shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_event_summary($atts = array()) { if (!class_exists('HVAC_Event_Summary')) { return '

' . __('Event summary functionality not available.', 'hvac-community-events') . '

'; } $event_summary = new HVAC_Event_Summary(); return $event_summary->render_summary($atts); } /** * Render login shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_login($atts = array()) { if (!class_exists('\\HVAC_Community_Events\\Community\\Login_Handler')) { return '

' . __('Login functionality not available.', 'hvac-community-events') . '

'; } $login_handler = new \HVAC_Community_Events\Community\Login_Handler(); return $login_handler->render_login_form($atts); } /** * Render registration shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_registration($atts = array()) { if (!class_exists('HVAC_Registration')) { return '

' . __('Registration functionality not available.', 'hvac-community-events') . '

'; } $registration = new HVAC_Registration(); return $registration->render_registration_form($atts); } /** * Render trainer profile shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_trainer_profile($atts = array()) { if (!class_exists('HVAC_Trainer_Profile')) { return '

' . __('Profile functionality not available.', 'hvac-community-events') . '

'; } $trainer_profile = new HVAC_Trainer_Profile(); return $trainer_profile->render_profile($atts); } /** * Render certificate reports shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_certificate_reports($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to view certificate reports.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } // Include the certificate reports content template ob_start(); include HVAC_PLUGIN_DIR . 'templates/certificates/certificate-reports-content.php'; return ob_get_clean(); } /** * Render generate certificates shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_generate_certificates($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to generate certificates.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } // Include the generate certificates content template ob_start(); include HVAC_PLUGIN_DIR . 'templates/certificates/generate-certificates-content.php'; return ob_get_clean(); } /** * Render email attendees shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_email_attendees($atts = array()) { // Check if user has appropriate permissions // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } ob_start(); include HVAC_PLUGIN_DIR . 'templates/email-attendees.php'; return ob_get_clean(); } /** * Render communication templates shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_communication_templates($atts = array()) { if (!class_exists('HVAC_Communication_Templates')) { return '

' . __('Communication templates functionality not available.', 'hvac-community-events') . '

'; } // Check permissions if (!current_user_can('edit_tribe_events') && !current_user_can('manage_options')) { return '

' . __('You do not have permission to access this page.', 'hvac-community-events') . '

'; } $templates = new HVAC_Communication_Templates(); ob_start(); $templates->render_admin_page(); return ob_get_clean(); } /** * Render communication schedules shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_communication_schedules($atts = array()) { if (!class_exists('HVAC_Communication_Scheduler')) { return '

' . __('Communication scheduler functionality not available.', 'hvac-community-events') . '

'; } // Check permissions if (!current_user_can('edit_tribe_events') && !current_user_can('manage_options')) { return '

' . __('You do not have permission to access this page.', 'hvac-community-events') . '

'; } $scheduler = hvac_communication_scheduler(); ob_start(); $scheduler->render_schedules_page(); return ob_get_clean(); } /** * Render Google Sheets admin shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_google_sheets_admin($atts = array()) { if (!class_exists('HVAC_Google_Sheets_Admin')) { return '

' . __('Google Sheets functionality not available.', 'hvac-community-events') . '

'; } // Check permissions if (!current_user_can('manage_options') && !current_user_can('view_all_trainer_data')) { return '

' . __('You do not have permission to access this page.', 'hvac-community-events') . '

'; } $google_sheets = new HVAC_Google_Sheets_Admin(); ob_start(); $google_sheets->render_admin_page(); return ob_get_clean(); } /** * Render venues list shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_venues_list($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to view venues.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Venues')) { return '

' . __('Venues functionality not available.', 'hvac-community-events') . '

'; } $venues = new HVAC_Venues(); return $venues->render_venues_list($atts); } /** * Render venue manage shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_venue_manage($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to manage venues.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Venues')) { return '

' . __('Venues functionality not available.', 'hvac-community-events') . '

'; } $venues = new HVAC_Venues(); return $venues->render_venue_manage($atts); } /** * Render organizers list shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_organizers_list($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to view organizers.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Organizers')) { return '

' . __('Organizers functionality not available.', 'hvac-community-events') . '

'; } $organizers = new HVAC_Organizers(); return $organizers->render_organizers_list($atts); } /** * Render organizer manage shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_organizer_manage($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to manage organizers.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Organizers')) { return '

' . __('Organizers functionality not available.', 'hvac-community-events') . '

'; } $organizers = new HVAC_Organizers(); return $organizers->render_organizer_manage($atts); } /** * Render trainer profile view shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_trainer_profile_view($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to view your profile.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Trainer_Profile_Manager')) { return '

' . __('Profile functionality not available.', 'hvac-community-events') . '

'; } $profile_manager = new HVAC_Trainer_Profile_Manager(); return $profile_manager->render_profile_view($atts); } /** * Render trainer profile edit shortcode * * @param array $atts Shortcode attributes * @return string */ public function render_trainer_profile_edit($atts = array()) { // Check permissions if (!is_user_logged_in()) { return '

' . __('Please log in to edit your profile.', 'hvac-community-events') . '

'; } // Allow trainers, master trainers, or WordPress admins if (!current_user_can('hvac_trainer') && !current_user_can('hvac_master_trainer') && !current_user_can('manage_options')) { return '

' . __('You must be a trainer to access this page.', 'hvac-community-events') . '

'; } if (!class_exists('HVAC_Trainer_Profile_Manager')) { return '

' . __('Profile functionality not available.', 'hvac-community-events') . '

'; } $profile_manager = new HVAC_Trainer_Profile_Manager(); return $profile_manager->render_profile_edit($atts); } }