upskill-event-manager/templates/email-attendees/template-email-attendees.php
bengizmo 37f4180e1c feat: Add massive missing plugin infrastructure to repository
🚨 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>
2025-08-11 13:30:11 -03:00

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); ?> &lt;<?php echo esc_html($sender_email); ?>&gt;</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>