upskill-event-manager/templates/certificates/certificate-reports-content.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

230 lines
No EOL
11 KiB
PHP

<?php
/**
* Certificate Reports Content Template (without page wrapper)
* Used by shortcode to output just the content
*
* @package HVAC_Community_Events
* @subpackage Templates/Certificates
*/
// Exit if accessed directly
if (!defined('ABSPATH')) {
exit;
}
// Ensure proper CSS classes for styling
echo '<div class="hvac-certificate-reports-content">';
// Get current user ID
$current_user_id = get_current_user_id();
// Initialize variables with defaults
$certificates = array();
$certificate_stats = array('total' => 0, 'active' => 0, 'revoked' => 0, 'emailed' => 0);
$events = array();
$filter_event = isset($_GET['filter_event']) ? absint($_GET['filter_event']) : 0;
$filter_status = isset($_GET['filter_status']) ? sanitize_text_field($_GET['filter_status']) : 'active';
// Removed problematic output buffering that interferes with WordPress header rendering
// Get user's events directly from database to bypass TEC issues
global $wpdb;
$events_query = $wpdb->prepare("
SELECT DISTINCT p.ID, p.post_title
FROM {$wpdb->posts} p
LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
WHERE p.post_type = 'tribe_events'
AND p.post_status = 'publish'
AND p.post_author = %d
ORDER BY p.post_date DESC
", $current_user_id);
$events_results = $wpdb->get_results($events_query);
if ($events_results) {
foreach ($events_results as $event) {
$events[$event->ID] = $event->post_title;
}
}
// Get certificate stats
$stats_query = $wpdb->prepare("
SELECT
COUNT(DISTINCT c.id) as total,
COUNT(DISTINCT CASE WHEN c.status = 'active' THEN c.id END) as active,
COUNT(DISTINCT CASE WHEN c.status = 'revoked' THEN c.id END) as revoked,
COUNT(DISTINCT e.certificate_id) as emailed
FROM {$wpdb->prefix}hvac_certificates c
LEFT JOIN {$wpdb->prefix}hvac_certificate_emails e ON c.id = e.certificate_id
WHERE c.trainer_id = %d
", $current_user_id);
$stats = $wpdb->get_row($stats_query);
if ($stats) {
$certificate_stats = array(
'total' => (int)$stats->total,
'active' => (int)$stats->active,
'revoked' => (int)$stats->revoked,
'emailed' => (int)$stats->emailed
);
}
// Build certificate query
$cert_query = "
SELECT DISTINCT c.*, a.name as attendee_name, a.email as attendee_email,
e.post_title as event_name, pm.meta_value as event_date
FROM {$wpdb->prefix}hvac_certificates c
LEFT JOIN {$wpdb->prefix}hvac_attendees a ON c.attendee_id = a.id
LEFT JOIN {$wpdb->posts} e ON c.event_id = e.ID
LEFT JOIN {$wpdb->postmeta} pm ON e.ID = pm.post_id AND pm.meta_key = '_EventStartDate'
WHERE c.trainer_id = %d
";
$query_params = array($current_user_id);
// Apply filters
if ($filter_event > 0) {
$cert_query .= " AND c.event_id = %d";
$query_params[] = $filter_event;
}
if ($filter_status && $filter_status !== 'all') {
$cert_query .= " AND c.status = %s";
$query_params[] = $filter_status;
}
$cert_query .= " ORDER BY c.date_generated DESC LIMIT 100";
$certificates = $wpdb->get_results($wpdb->prepare($cert_query, $query_params));
?>
<div class="hvac-certificate-reports-content">
<div class="hvac-page-header">
<h1><?php _e('Certificate Reports', 'hvac-community-events'); ?></h1>
<p><?php _e('View and manage all certificates you\'ve generated for event attendees.', 'hvac-community-events'); ?></p>
</div>
<!-- Certificate Statistics -->
<div class="hvac-certificate-stats">
<h2><?php _e('Certificate Statistics', 'hvac-community-events'); ?></h2>
<div class="hvac-stats-grid">
<div class="hvac-stat-card">
<div class="hvac-stat-label"><?php _e('Total Certificates', 'hvac-community-events'); ?></div>
<div class="hvac-stat-value"><?php echo esc_html($certificate_stats['total']); ?></div>
</div>
<div class="hvac-stat-card">
<div class="hvac-stat-label"><?php _e('Active Certificates', 'hvac-community-events'); ?></div>
<div class="hvac-stat-value"><?php echo esc_html($certificate_stats['active']); ?></div>
</div>
<div class="hvac-stat-card">
<div class="hvac-stat-label"><?php _e('Revoked Certificates', 'hvac-community-events'); ?></div>
<div class="hvac-stat-value"><?php echo esc_html($certificate_stats['revoked']); ?></div>
</div>
<div class="hvac-stat-card">
<div class="hvac-stat-label"><?php _e('Emailed Certificates', 'hvac-community-events'); ?></div>
<div class="hvac-stat-value"><?php echo esc_html($certificate_stats['emailed']); ?></div>
</div>
</div>
</div>
<!-- Certificate Filters -->
<div class="hvac-certificate-filters">
<h2><?php _e('Certificate Filters', 'hvac-community-events'); ?></h2>
<form method="get" action="" class="hvac-filter-form">
<div class="hvac-filter-row">
<div class="hvac-filter-group">
<label for="filter_event"><?php _e('Event:', 'hvac-community-events'); ?></label>
<select name="filter_event" id="filter_event">
<option value="0"><?php _e('All Events', 'hvac-community-events'); ?></option>
<?php foreach ($events as $event_id => $event_name): ?>
<option value="<?php echo esc_attr($event_id); ?>" <?php selected($filter_event, $event_id); ?>>
<?php echo esc_html($event_name); ?>
</option>
<?php endforeach; ?>
</select>
</div>
<div class="hvac-filter-group">
<label for="filter_status"><?php _e('Status:', 'hvac-community-events'); ?></label>
<select name="filter_status" id="filter_status">
<option value="active" <?php selected($filter_status, 'active'); ?>><?php _e('Active Only', 'hvac-community-events'); ?></option>
<option value="all" <?php selected($filter_status, 'all'); ?>><?php _e('All Certificates', 'hvac-community-events'); ?></option>
<option value="revoked" <?php selected($filter_status, 'revoked'); ?>><?php _e('Revoked Only', 'hvac-community-events'); ?></option>
</select>
</div>
<div class="hvac-filter-group">
<button type="submit" class="hvac-button hvac-button-primary"><?php _e('Apply Filters', 'hvac-community-events'); ?></button>
</div>
</div>
</form>
</div>
<!-- Certificate Listing -->
<div class="hvac-certificate-listing">
<h2><?php _e('Certificate Listing', 'hvac-community-events'); ?></h2>
<?php if (empty($events)): ?>
<div class="hvac-notice hvac-notice-info">
<p><?php _e('You don\'t have any events yet. Create your first event to start generating certificates.', 'hvac-community-events'); ?></p>
<a href="/trainer/event/manage/" class="hvac-button hvac-button-primary"><?php _e('Create Event', 'hvac-community-events'); ?></a>
</div>
<?php elseif (empty($certificates)): ?>
<div class="hvac-notice hvac-notice-info">
<p><?php _e('No certificates found matching your criteria.', 'hvac-community-events'); ?></p>
<a href="/trainer/generate-certificates/" class="hvac-button hvac-button-primary"><?php _e('Generate Certificates', 'hvac-community-events'); ?></a>
</div>
<?php else: ?>
<div class="hvac-table-wrapper">
<table class="hvac-certificates-table">
<thead>
<tr>
<th><?php _e('Certificate ID', 'hvac-community-events'); ?></th>
<th><?php _e('Attendee', 'hvac-community-events'); ?></th>
<th><?php _e('Event', 'hvac-community-events'); ?></th>
<th><?php _e('Date Generated', 'hvac-community-events'); ?></th>
<th><?php _e('Status', 'hvac-community-events'); ?></th>
<th><?php _e('Actions', 'hvac-community-events'); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($certificates as $certificate): ?>
<tr>
<td><?php echo esc_html($certificate->certificate_number); ?></td>
<td>
<?php echo esc_html($certificate->attendee_name); ?><br>
<small><?php echo esc_html($certificate->attendee_email); ?></small>
</td>
<td><?php echo esc_html($certificate->event_name); ?></td>
<td><?php echo esc_html(date('M j, Y', strtotime($certificate->date_generated))); ?></td>
<td>
<span class="hvac-status hvac-status-<?php echo esc_attr($certificate->status); ?>">
<?php echo esc_html(ucfirst($certificate->status)); ?>
</span>
</td>
<td>
<div class="hvac-actions">
<a href="#" class="hvac-action-link hvac-view-certificate"
data-certificate-id="<?php echo esc_attr($certificate->id); ?>">
<?php _e('View', 'hvac-community-events'); ?>
</a>
<?php if ($certificate->status === 'active'): ?>
<a href="#" class="hvac-action-link hvac-email-certificate"
data-certificate-id="<?php echo esc_attr($certificate->id); ?>">
<?php _e('Email', 'hvac-community-events'); ?>
</a>
<a href="#" class="hvac-action-link hvac-revoke-certificate"
data-certificate-id="<?php echo esc_attr($certificate->id); ?>">
<?php _e('Revoke', 'hvac-community-events'); ?>
</a>
<?php endif; ?>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<?php endif; ?>
</div>
</div>