417 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			417 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Plugin Name: HVAC Community Events
 | |
|  * Plugin URI: https://upskillhvac.com
 | |
|  * Description: Custom plugin for HVAC trainer event management system
 | |
|  * Version: 1.0.0
 | |
|  * Author: Upskill HVAC
 | |
|  * Author URI: https://upskillhvac.com
 | |
|  * License: GPL-2.0+
 | |
|  * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
 | |
|  * Text Domain: hvac-community-events
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| if (!defined('ABSPATH')) {
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| // Define plugin constants
 | |
| define('HVAC_CE_VERSION', '1.0.0');
 | |
| define('HVAC_CE_PLUGIN_DIR', plugin_dir_path(__FILE__));
 | |
| define('HVAC_CE_PLUGIN_URL', plugin_dir_url(__FILE__));
 | |
| 
 | |
| // Include the logger class early
 | |
| require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-logger.php';
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Create required pages and roles upon plugin activation.
 | |
|  */
 | |
| function hvac_ce_create_required_pages() {
 | |
| 
 | |
|     // Ensure the roles class is available
 | |
|     require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php';
 | |
|     HVAC_Logger::info('Starting page creation process', 'Activation');
 | |
|     $required_pages = [
 | |
|         'community-login' => [
 | |
|             'title' => 'Trainer Login',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_community_login]<!-- /wp:shortcode -->',
 | |
|             'template' => 'page-community-login.php',
 | |
|         ],
 | |
|         'trainer-registration' => [
 | |
|             'title' => 'Trainer Registration',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_trainer_registration]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'hvac-dashboard' => [
 | |
|             'title' => 'Trainer Dashboard',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_trainer_dashboard]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'manage-event' => [ // New page for TEC CE submission form shortcode
 | |
|             'title' => 'Manage Event',
 | |
|             'content' => '<!-- wp:shortcode -->[tribe_community_events view="submission_form"]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'my-events' => [ // New page for TEC CE event list shortcode
 | |
|             'title' => 'My Events',
 | |
|             'content' => '<!-- wp:shortcode -->[tribe_community_events view="my_events"]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'trainer-profile' => [ // Add trainer profile page
 | |
|             'title' => 'Trainer Profile',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_trainer_profile]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'event-summary' => [ // Add event summary page
 | |
|             'title' => 'Event Summary',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_event_summary]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'email-attendees' => [ // Add email attendees page
 | |
|             'title' => 'Email Attendees',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_email_attendees]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'certificate-reports' => [ // Add certificate reports page
 | |
|             'title' => 'Certificate Reports',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_certificate_reports]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'generate-certificates' => [ // Add generate certificates page
 | |
|             'title' => 'Generate Certificates',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_generate_certificates]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         'certificate-fix' => [ // Add certificate fix page (admin only)
 | |
|             'title' => 'Certificate System Diagnostics',
 | |
|             'content' => '<!-- wp:shortcode -->[hvac_certificate_fix]<!-- /wp:shortcode -->',
 | |
|         ],
 | |
|         // REMOVED: 'submit-event' page creation. Will link to default TEC CE page.
 | |
|         // 'submit-event' => [
 | |
|         //     'title' => 'Submit Event',
 | |
|         //     'content' => '<!-- wp:shortcode -->[hvac_event_form]<!-- /wp:shortcode -->',
 | |
|         // ],
 | |
|         // Add future required pages here
 | |
|     ];
 | |
| 
 | |
|     $created_pages_option = 'hvac_community_pages';
 | |
|     $created_pages = get_option($created_pages_option, []);
 | |
| 
 | |
|     foreach ($required_pages as $slug => $page_data) {
 | |
|         // Check if page already exists (by slug)
 | |
|         $existing_page = get_page_by_path($slug, OBJECT, 'page');
 | |
|         
 | |
|         // Log what we're getting back for debugging
 | |
|         HVAC_Logger::info("Checking for page with slug '{$slug}'. Result type: " . gettype($existing_page), 'Activation');
 | |
|         
 | |
|         if (!$existing_page) {
 | |
|             HVAC_Logger::info("Page with slug '{$slug}' not found. Attempting to create.", 'Activation');
 | |
|             // Page does not exist, create it
 | |
|             $post_data = [
 | |
|                 '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',
 | |
|             ];
 | |
|             
 | |
|             // Check if we should use a specific template
 | |
|             if (!empty($page_data['template'])) {
 | |
|                 $post_data['page_template'] = $page_data['template'];
 | |
|             }
 | |
| 
 | |
|             $page_id = wp_insert_post($post_data);
 | |
| 
 | |
|             // Log the result of wp_insert_post
 | |
|             if (is_wp_error($page_id)) {
 | |
|                 HVAC_Logger::error("Error creating page '{$slug}': " . $page_id->get_error_message(), 'Activation');
 | |
|             } else {
 | |
|                 HVAC_Logger::info("Successfully created page '{$slug}' with ID: {$page_id}.", 'Activation');
 | |
|             }
 | |
| 
 | |
|             // Store the created page ID - Rewritten to avoid tool issue with &&
 | |
|             if ($page_id) { // Check if page_id is truthy (non-zero, non-null, etc.)
 | |
|                 if (!is_wp_error($page_id)) { // Then check if it's not a WP_Error object
 | |
|                     // Use a key based on the slug or feature name for clarity
 | |
|                     $feature_key = str_replace('-', '_', $slug);
 | |
|                     $created_pages[$feature_key] = $page_id;
 | |
|                 }
 | |
|             }
 | |
|         } else {
 | |
|              // Ensure existing pages are also recorded in the option if not already
 | |
|              $feature_key = str_replace('-', '_', $slug);
 | |
|              
 | |
|              // Check if the existing page is an object and has an ID property
 | |
|              if (!isset($created_pages[$feature_key])) {
 | |
|                  if (is_object($existing_page) && isset($existing_page->ID)) {
 | |
|                      $created_pages[$feature_key] = $existing_page->ID;
 | |
|                      HVAC_Logger::info("Page '{$slug}' exists. Recording ID: {$existing_page->ID}", 'Activation');
 | |
|                  } else {
 | |
|                      // If existing_page is not valid, log it but don't cause an error
 | |
|                      HVAC_Logger::warning("Page '{$slug}' exists but could not retrieve ID properly.", 'Activation');
 | |
|                  }
 | |
|              }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Update the option with any newly created page IDs (and existing ones)
 | |
|     update_option($created_pages_option, $created_pages);
 | |
| 
 | |
|     // Create the custom role (Moved inside the activation function)
 | |
|     $roles_manager = new HVAC_Roles();
 | |
|     $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');
 | |
|     }
 | |
|     HVAC_Logger::info('Completed page creation and role setup process', 'Activation');
 | |
| 
 | |
| } // <<-- Brace moved here
 | |
| register_activation_hook(__FILE__, 'hvac_ce_create_required_pages');
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * 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();
 | |
|     HVAC_Logger::info('Deactivation hook fired, attempted to remove hvac_trainer role.', 'Deactivation');
 | |
| }
 | |
| register_deactivation_hook(__FILE__, 'hvac_ce_remove_roles');
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Enqueue common styles and scripts for all HVAC Community Events pages
 | |
|  */
 | |
| function hvac_ce_enqueue_common_assets() {
 | |
|     // Enqueue the common CSS file for all pages
 | |
|     wp_enqueue_style(
 | |
|         'hvac-common-style',
 | |
|         HVAC_CE_PLUGIN_URL . 'assets/css/hvac-common.css',
 | |
|         [], // No dependencies
 | |
|         HVAC_CE_VERSION
 | |
|     );
 | |
|     
 | |
|     // Enqueue animations CSS file
 | |
|     wp_enqueue_style(
 | |
|         'hvac-animations',
 | |
|         HVAC_CE_PLUGIN_URL . 'assets/css/hvac-animations.css',
 | |
|         ['hvac-common-style'], // Depends on common styles
 | |
|         HVAC_CE_VERSION
 | |
|     );
 | |
|     
 | |
|     // Enqueue mobile navigation CSS file
 | |
|     wp_enqueue_style(
 | |
|         'hvac-mobile-nav',
 | |
|         HVAC_CE_PLUGIN_URL . 'assets/css/hvac-mobile-nav.css',
 | |
|         ['hvac-common-style'], // Depends on common styles
 | |
|         HVAC_CE_VERSION
 | |
|     );
 | |
|     
 | |
|     // Enqueue print stylesheet
 | |
|     wp_enqueue_style(
 | |
|         'hvac-print-style',
 | |
|         HVAC_CE_PLUGIN_URL . 'assets/css/hvac-print.css',
 | |
|         ['hvac-common-style'], // Depends on common styles
 | |
|         HVAC_CE_VERSION,
 | |
|         'print' // Print media only
 | |
|     );
 | |
|     
 | |
|     // Enqueue the accessibility helper JS for all 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 for all 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 for all 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 styles based on current page
 | |
|     if (is_page('hvac-dashboard')) {
 | |
|         wp_enqueue_style(
 | |
|             'hvac-dashboard-style',
 | |
|             HVAC_CE_PLUGIN_URL . 'assets/css/hvac-dashboard.css',
 | |
|             ['hvac-common-style'], // Depends on common styles
 | |
|             HVAC_CE_VERSION
 | |
|         );
 | |
|     }
 | |
|     
 | |
|     if (is_page('community-login')) {
 | |
|         wp_enqueue_style(
 | |
|             'hvac-community-login-style',
 | |
|             HVAC_CE_PLUGIN_URL . 'assets/css/community-login.css',
 | |
|             ['hvac-common-style'], // Depends on common styles
 | |
|             HVAC_CE_VERSION
 | |
|         );
 | |
|     }
 | |
|     
 | |
|     if (is_page('trainer-registration')) {
 | |
|         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
 | |
|         );
 | |
|     }
 | |
|     
 | |
|     if (is_page('email-attendees')) {
 | |
|         wp_enqueue_style(
 | |
|             'hvac-email-attendees-style',
 | |
|             HVAC_CE_PLUGIN_URL . 'assets/css/hvac-email-attendees.css',
 | |
|             ['hvac-common-style'], // Depends on common styles
 | |
|             HVAC_CE_VERSION
 | |
|         );
 | |
|     }
 | |
|     
 | |
|     if (is_singular(Tribe__Events__Main::POSTTYPE) || is_page('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 certificate-related styles
 | |
|     if (is_page('certificate-reports') || is_page('generate-certificates') || is_page('certificate-fix')) {
 | |
|         wp_enqueue_style(
 | |
|             'hvac-certificates-admin-style',
 | |
|             HVAC_CE_PLUGIN_URL . 'assets/css/hvac-certificates-admin.css',
 | |
|             ['hvac-common-style'], // Depends on common styles
 | |
|             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';
 | |
| 
 | |
| // 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');
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * 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 );
 |