🚨 CRITICAL: Fixed deployment blockers by adding missing core directories: **Community System (CRITICAL)** - includes/community/ - Login_Handler and all community classes - templates/community/ - Community login forms **Certificate System (CRITICAL)** - includes/certificates/ - 8+ certificate classes and handlers - templates/certificates/ - Certificate reports and generation templates **Core Individual Classes (CRITICAL)** - includes/class-hvac-event-summary.php - includes/class-hvac-trainer-profile-manager.php - includes/class-hvac-master-dashboard-data.php - Plus 40+ other individual HVAC classes **Major Feature Systems (HIGH)** - includes/database/ - Training leads database tables - includes/find-trainer/ - Find trainer directory and MapGeo integration - includes/google-sheets/ - Google Sheets integration system - includes/zoho/ - Complete Zoho CRM integration - includes/communication/ - Communication templates system **Template Infrastructure** - templates/attendee/, templates/email-attendees/ - templates/event-summary/, templates/status/ - templates/template-parts/ - Shared template components **Impact:** - 70+ files added covering 10+ missing directories - Resolves ALL deployment blockers and feature breakdowns - Plugin activation should now work correctly - Multi-machine deployment fully supported 🔧 Generated with Claude Code Co-Authored-By: Ben Reed <ben@tealmaker.com>
		
			
				
	
	
		
			385 lines
		
	
	
		
			No EOL
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			385 lines
		
	
	
		
			No EOL
		
	
	
		
			16 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * HVAC Community Events - Email Attendees Template
 | |
|  *
 | |
|  * Template for the Email Attendees page.
 | |
|  *
 | |
|  * @package HVAC_Community_Events
 | |
|  * @subpackage Templates
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| if ( ! defined( 'ABSPATH' ) ) {
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| // Check if user is logged in
 | |
| if ( ! is_user_logged_in() ) {
 | |
|     wp_redirect( site_url( '/community-login/' ) );
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| // Get the event ID from the URL
 | |
| $event_id = isset( $_GET['event_id'] ) ? intval( $_GET['event_id'] ) : 0;
 | |
| 
 | |
| // Load the email attendees data class
 | |
| require_once HVAC_PLUGIN_DIR . 'includes/community/class-email-attendees-data.php';
 | |
| $email_data = new HVAC_Email_Attendees_Data( $event_id );
 | |
| 
 | |
| // Check if event is valid and user has permission
 | |
| if ( ! $email_data->is_valid_event() ) {
 | |
|     wp_redirect( site_url( '/hvac-dashboard/' ) );
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| if ( ! $email_data->user_can_email_attendees() ) {
 | |
|     wp_die( __( 'You do not have permission to email attendees for this event.', 'hvac-community-events' ) );
 | |
| }
 | |
| 
 | |
| // Get event details and attendees
 | |
| $event_details = $email_data->get_event_details();
 | |
| $attendees = $email_data->get_attendees();
 | |
| $ticket_types = $email_data->get_ticket_types();
 | |
| 
 | |
| // Handle form submission
 | |
| $email_sent = false;
 | |
| $email_error = '';
 | |
| $email_success = '';
 | |
| 
 | |
| if ( isset( $_POST['hvac_send_email'] ) && isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'hvac_email_attendees_' . $event_id ) ) {
 | |
|     
 | |
|     $subject = isset( $_POST['email_subject'] ) ? sanitize_text_field( $_POST['email_subject'] ) : '';
 | |
|     $message = isset( $_POST['email_message'] ) ? wp_kses_post( $_POST['email_message'] ) : '';
 | |
|     $cc = isset( $_POST['email_cc'] ) ? sanitize_text_field( $_POST['email_cc'] ) : '';
 | |
|     
 | |
|     // Get selected recipients
 | |
|     $recipients = array();
 | |
|     if ( isset( $_POST['email_attendees'] ) && is_array( $_POST['email_attendees'] ) ) {
 | |
|         $recipients = array_map( 'sanitize_text_field', $_POST['email_attendees'] );
 | |
|     }
 | |
|     
 | |
|     // Validate and send email
 | |
|     if ( empty( $subject ) || empty( $message ) || empty( $recipients ) ) {
 | |
|         $email_error = __( 'Please fill in all required fields (subject, message, and select at least one recipient).', 'hvac-community-events' );
 | |
|     } else {
 | |
|         $result = $email_data->send_email( $recipients, $subject, $message, $cc );
 | |
|         
 | |
|         if ( $result['success'] ) {
 | |
|             $email_sent = true;
 | |
|             $email_success = $result['message'];
 | |
|         } else {
 | |
|             $email_error = $result['message'];
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Get filtered attendees if a ticket type is selected
 | |
| $selected_ticket_type = isset( $_GET['ticket_type'] ) ? sanitize_text_field( $_GET['ticket_type'] ) : '';
 | |
| if ( ! empty( $selected_ticket_type ) ) {
 | |
|     $attendees = $email_data->get_attendees_by_ticket_type( $selected_ticket_type );
 | |
| }
 | |
| 
 | |
| // Get the site title for the page title
 | |
| $site_title = get_bloginfo( 'name' );
 | |
| ?>
 | |
| 
 | |
| <!DOCTYPE html>
 | |
| <html <?php language_attributes(); ?>>
 | |
| <head>
 | |
|     <meta charset="<?php bloginfo( 'charset' ); ?>">
 | |
|     <meta name="viewport" content="width=device-width, initial-scale=1">
 | |
|     <title><?php echo esc_html( $site_title ); ?> - <?php _e( 'Email Attendees', 'hvac-community-events' ); ?></title>
 | |
|     <?php wp_head(); ?>
 | |
|     <style>
 | |
|         .hvac-email-attendees-wrapper {
 | |
|             max-width: 1200px;
 | |
|             margin: 0 auto;
 | |
|             padding: 20px;
 | |
|         }
 | |
|         .hvac-email-header {
 | |
|             display: flex;
 | |
|             justify-content: space-between;
 | |
|             align-items: center;
 | |
|             margin-bottom: 20px;
 | |
|             flex-wrap: wrap;
 | |
|         }
 | |
|         .hvac-email-title h1 {
 | |
|             margin: 0 0 10px 0;
 | |
|         }
 | |
|         .hvac-email-navigation {
 | |
|             display: flex;
 | |
|             gap: 10px;
 | |
|             flex-wrap: wrap;
 | |
|         }
 | |
|         .hvac-email-form {
 | |
|             margin-top: 20px;
 | |
|         }
 | |
|         .hvac-email-info {
 | |
|             background-color: #f9f9f9;
 | |
|             padding: 15px;
 | |
|             border-radius: 5px;
 | |
|             margin-bottom: 20px;
 | |
|         }
 | |
|         .hvac-email-form-row {
 | |
|             margin-bottom: 15px;
 | |
|         }
 | |
|         .hvac-email-form-row label {
 | |
|             display: block;
 | |
|             margin-bottom: 5px;
 | |
|             font-weight: 600;
 | |
|         }
 | |
|         .hvac-email-form-row input[type="text"], 
 | |
|         .hvac-email-form-row textarea {
 | |
|             width: 100%;
 | |
|             padding: 8px;
 | |
|             border-radius: 4px;
 | |
|             border: 1px solid #ddd;
 | |
|         }
 | |
|         .hvac-email-recipients {
 | |
|             margin-top: 20px;
 | |
|             border: 1px solid #ddd;
 | |
|             padding: 15px;
 | |
|             border-radius: 5px;
 | |
|         }
 | |
|         .hvac-email-filter {
 | |
|             margin-bottom: 15px;
 | |
|             display: flex;
 | |
|             gap: 15px;
 | |
|             align-items: center;
 | |
|             flex-wrap: wrap;
 | |
|         }
 | |
|         .hvac-attendee-list {
 | |
|             max-height: 300px;
 | |
|             overflow-y: auto;
 | |
|             border: 1px solid #eee;
 | |
|             padding: 10px;
 | |
|         }
 | |
|         .hvac-attendee-item {
 | |
|             margin-bottom: 10px;
 | |
|             padding: 5px;
 | |
|             background-color: #f9f9f9;
 | |
|             border-radius: 3px;
 | |
|         }
 | |
|         .hvac-attendee-checkbox {
 | |
|             margin-right: 10px;
 | |
|         }
 | |
|         .hvac-attendee-item a {
 | |
|             color: #0073aa;
 | |
|             text-decoration: none;
 | |
|         }
 | |
|         .hvac-attendee-item a:hover {
 | |
|             text-decoration: underline;
 | |
|         }
 | |
|         .hvac-email-sent {
 | |
|             background-color: #d4edda;
 | |
|             color: #155724;
 | |
|             padding: 15px;
 | |
|             border-radius: 5px;
 | |
|             margin-bottom: 20px;
 | |
|         }
 | |
|         .hvac-email-error {
 | |
|             background-color: #f8d7da;
 | |
|             color: #721c24;
 | |
|             padding: 15px;
 | |
|             border-radius: 5px;
 | |
|             margin-bottom: 20px;
 | |
|         }
 | |
|         .hvac-count-badge {
 | |
|             background-color: #007cba;
 | |
|             color: white;
 | |
|             padding: 2px 8px;
 | |
|             border-radius: 10px;
 | |
|             font-size: 0.8em;
 | |
|             margin-left: 5px;
 | |
|         }
 | |
|         .hvac-select-all-container {
 | |
|             margin-bottom: 10px;
 | |
|         }
 | |
|     </style>
 | |
| </head>
 | |
| 
 | |
| <body <?php body_class(); ?>>
 | |
|     <?php wp_body_open(); ?>
 | |
| 
 | |
|     <div class="hvac-email-attendees-wrapper">
 | |
|         <div class="hvac-email-header">
 | |
|             <div class="hvac-email-title">
 | |
|                 <h1><?php _e( 'Email Attendees', 'hvac-community-events' ); ?></h1>
 | |
|                 <h2><?php echo esc_html( $event_details['title'] ); ?></h2>
 | |
|                 <p>
 | |
|                     <?php echo esc_html( $event_details['start_date'] ); ?> 
 | |
|                     <?php echo esc_html( $event_details['start_time'] ); ?> - 
 | |
|                     <?php 
 | |
|                     if ( $event_details['start_date'] !== $event_details['end_date'] ) {
 | |
|                         echo esc_html( $event_details['end_date'] ) . ' ';
 | |
|                     }
 | |
|                     echo esc_html( $event_details['end_time'] );
 | |
|                     ?>
 | |
|                 </p>
 | |
|             </div>
 | |
|             
 | |
|             <div class="hvac-email-navigation">
 | |
|                 <a href="<?php echo esc_url( site_url( '/event-summary/?event_id=' . $event_id ) ); ?>" class="ast-button ast-button-secondary">
 | |
|                     <?php _e( 'View Event Summary', 'hvac-community-events' ); ?>
 | |
|                 </a>
 | |
|                 <a href="<?php echo esc_url( site_url( '/hvac-dashboard/' ) ); ?>" class="ast-button ast-button-secondary">
 | |
|                     <?php _e( 'Return to Dashboard', 'hvac-community-events' ); ?>
 | |
|                 </a>
 | |
|             </div>
 | |
|         </div>
 | |
|         
 | |
|         <?php if ( $email_sent ) : ?>
 | |
|             <div class="hvac-email-sent">
 | |
|                 <?php echo esc_html( $email_success ); ?>
 | |
|             </div>
 | |
|         <?php endif; ?>
 | |
|         
 | |
|         <?php if ( $email_error ) : ?>
 | |
|             <div class="hvac-email-error">
 | |
|                 <?php echo esc_html( $email_error ); ?>
 | |
|             </div>
 | |
|         <?php endif; ?>
 | |
|         
 | |
|         <?php if ( empty( $attendees ) ) : ?>
 | |
|             <div class="hvac-email-info">
 | |
|                 <?php _e( 'This event has no attendees registered yet.', 'hvac-community-events' ); ?>
 | |
|             </div>
 | |
|         <?php else : ?>
 | |
|             <!-- Include Template Manager Widget -->
 | |
|             <?php include HVAC_PLUGIN_DIR . 'templates/communication/template-manager-widget.php'; ?>
 | |
|             
 | |
|             <form method="post" class="hvac-email-form">
 | |
|                 <?php wp_nonce_field( 'hvac_email_attendees_' . $event_id ); ?>
 | |
|                 
 | |
|                 <div class="hvac-email-form-row">
 | |
|                     <label for="email_subject"><?php _e( 'Subject:', 'hvac-community-events' ); ?> <span class="required">*</span></label>
 | |
|                     <input type="text" name="email_subject" id="email_subject" required value="<?php echo isset( $_POST['email_subject'] ) ? esc_attr( $_POST['email_subject'] ) : ''; ?>">
 | |
|                 </div>
 | |
|                 
 | |
|                 <div class="hvac-email-form-row">
 | |
|                     <label for="email_cc"><?php _e( 'CC:', 'hvac-community-events' ); ?></label>
 | |
|                     <input type="text" name="email_cc" id="email_cc" value="<?php echo isset( $_POST['email_cc'] ) ? esc_attr( $_POST['email_cc'] ) : ''; ?>" placeholder="<?php _e( 'Separate multiple emails with commas', 'hvac-community-events' ); ?>">
 | |
|                 </div>
 | |
|                 
 | |
|                 <?php
 | |
|                 // Get sender information for display
 | |
|                 $current_user = wp_get_current_user();
 | |
|                 $sender_name = $current_user->display_name;
 | |
|                 $sender_email = $current_user->user_email;
 | |
|                 
 | |
|                 // Get trainer profile data if available
 | |
|                 if (in_array('hvac_trainer', $current_user->roles)) {
 | |
|                     $business_name = get_user_meta($current_user->ID, 'business_name', true);
 | |
|                     if (!empty($business_name)) {
 | |
|                         $sender_name = $business_name;
 | |
|                     }
 | |
|                     
 | |
|                     $contact_email = get_user_meta($current_user->ID, 'contact_email', true);
 | |
|                     if (!empty($contact_email) && is_email($contact_email)) {
 | |
|                         $sender_email = $contact_email;
 | |
|                     }
 | |
|                 }
 | |
|                 ?>
 | |
|                 
 | |
|                 <div class="hvac-email-info" style="background-color: #e7f5ff; margin-bottom: 20px; padding: 15px; border-radius: 5px; border: 1px solid #a3c4e1;">
 | |
|                     <p><?php _e( 'Email will be sent from:', 'hvac-community-events' ); ?> <strong><?php echo esc_html($sender_name); ?> <<?php echo esc_html($sender_email); ?>></strong></p>
 | |
|                     <p style="margin-bottom: 5px;"><small><?php _e('Having email issues? Try these steps:', 'hvac-community-events'); ?></small></p>
 | |
|                     <ul style="margin-top: 0; font-size: 13px;">
 | |
|                         <li><?php _e('Make sure your trainer profile has a valid email address', 'hvac-community-events'); ?></li>
 | |
|                         <li><?php _e('Check that recipients have valid email addresses', 'hvac-community-events'); ?></li>
 | |
|                         <li><?php _e('Use the "Debug Email System" button at the bottom right corner for more details', 'hvac-community-events'); ?></li>
 | |
|                         <li><?php _e('Contact support if emails are still not being delivered', 'hvac-community-events'); ?></li>
 | |
|                     </ul>
 | |
|                 </div>
 | |
|                 
 | |
|                 <div class="hvac-email-form-row">
 | |
|                     <label for="email_message"><?php _e( 'Message:', 'hvac-community-events' ); ?> <span class="required">*</span></label>
 | |
|                     <?php
 | |
|                     // Use WordPress editor if available
 | |
|                     if ( function_exists( 'wp_editor' ) ) {
 | |
|                         $content = isset( $_POST['email_message'] ) ? wp_kses_post( $_POST['email_message'] ) : '';
 | |
|                         $editor_settings = array(
 | |
|                             'textarea_name' => 'email_message',
 | |
|                             'textarea_rows' => 10,
 | |
|                             'media_buttons' => false,
 | |
|                             'teeny' => true,
 | |
|                         );
 | |
|                         wp_editor( $content, 'email_message', $editor_settings );
 | |
|                     } else {
 | |
|                         // Fallback to textarea
 | |
|                         echo '<textarea name="email_message" id="email_message" rows="10" required>' . 
 | |
|                             ( isset( $_POST['email_message'] ) ? esc_textarea( $_POST['email_message'] ) : '' ) . 
 | |
|                             '</textarea>';
 | |
|                     }
 | |
|                     ?>
 | |
|                 </div>
 | |
|                 
 | |
|                 <div class="hvac-email-recipients">
 | |
|                     <h3><?php _e( 'Recipients', 'hvac-community-events' ); ?> <span class="hvac-count-badge"><?php echo count( $attendees ); ?></span></h3>
 | |
|                     
 | |
|                     <?php if ( ! empty( $ticket_types ) && count( $ticket_types ) > 1 ) : ?>
 | |
|                         <div class="hvac-email-filter">
 | |
|                             <label for="ticket_type_filter"><?php _e( 'Filter by ticket type:', 'hvac-community-events' ); ?></label>
 | |
|                             <select id="ticket_type_filter" onchange="window.location.href='<?php echo esc_url( add_query_arg( array( 'event_id' => $event_id ), site_url( '/email-attendees/' ) ) ); ?>&ticket_type=' + this.value">
 | |
|                                 <option value=""><?php _e( 'All Tickets', 'hvac-community-events' ); ?></option>
 | |
|                                 <?php foreach ( $ticket_types as $ticket_type ) : ?>
 | |
|                                     <option value="<?php echo esc_attr( $ticket_type ); ?>" <?php selected( $selected_ticket_type, $ticket_type ); ?>>
 | |
|                                         <?php echo esc_html( $ticket_type ); ?>
 | |
|                                     </option>
 | |
|                                 <?php endforeach; ?>
 | |
|                             </select>
 | |
|                         </div>
 | |
|                     <?php endif; ?>
 | |
|                     
 | |
|                     <div class="hvac-select-all-container">
 | |
|                         <label>
 | |
|                             <input type="checkbox" id="select_all_attendees" onclick="toggleAllAttendees(this)">
 | |
|                             <?php _e( 'Select All', 'hvac-community-events' ); ?>
 | |
|                         </label>
 | |
|                     </div>
 | |
|                     
 | |
|                     <div class="hvac-attendee-list">
 | |
|                         <?php foreach ( $attendees as $attendee ) : ?>
 | |
|                             <div class="hvac-attendee-item">
 | |
|                                 <label>
 | |
|                                     <input type="checkbox" class="hvac-attendee-checkbox" name="email_attendees[]" value="<?php echo esc_attr( $attendee['email'] ); ?>">
 | |
|                                     <strong>
 | |
|                                         <?php if ( ! empty( $attendee['attendee_id'] ) ) : ?>
 | |
|                                             <a href="<?php echo esc_url( add_query_arg( 'attendee_id', $attendee['attendee_id'], home_url( '/attendee-profile/' ) ) ); ?>" target="_blank" title="View attendee profile">
 | |
|                                                 <?php echo esc_html( $attendee['name'] ); ?>
 | |
|                                             </a>
 | |
|                                         <?php else : ?>
 | |
|                                             <?php echo esc_html( $attendee['name'] ); ?>
 | |
|                                         <?php endif; ?>
 | |
|                                     </strong>
 | |
|                                     (<?php echo esc_html( $attendee['email'] ); ?>)
 | |
|                                     <?php if ( ! empty( $attendee['ticket_name'] ) ) : ?>
 | |
|                                         - <?php echo esc_html( $attendee['ticket_name'] ); ?>
 | |
|                                     <?php endif; ?>
 | |
|                                 </label>
 | |
|                             </div>
 | |
|                         <?php endforeach; ?>
 | |
|                     </div>
 | |
|                 </div>
 | |
|                 
 | |
|                 <div class="hvac-email-form-row" style="margin-top: 20px;">
 | |
|                     <button type="submit" name="hvac_send_email" class="ast-button ast-button-primary">
 | |
|                         <?php _e( 'Send Email', 'hvac-community-events' ); ?>
 | |
|                     </button>
 | |
|                 </div>
 | |
|             </form>
 | |
|             
 | |
|             <script>
 | |
|                 function toggleAllAttendees(checkbox) {
 | |
|                     var attendeeCheckboxes = document.querySelectorAll('.hvac-attendee-checkbox');
 | |
|                     for (var i = 0; i < attendeeCheckboxes.length; i++) {
 | |
|                         attendeeCheckboxes[i].checked = checkbox.checked;
 | |
|                     }
 | |
|                 }
 | |
|             </script>
 | |
|         <?php endif; ?>
 | |
|     </div>
 | |
| 
 | |
|     <?php wp_footer(); ?>
 | |
| </body>
 | |
| </html>
 |