upskill-event-manager/wordpress-dev/bin/mark-attendees-checked-in.php

196 lines
No EOL
7.1 KiB
PHP

<?php
/**
* Mark Existing Attendees as Checked In and Generate Certificates
*
* This script marks existing attendees as checked in and generates certificates for them.
*/
// Load WordPress
require_once('wp-load.php');
echo "===== MARKING ATTENDEES AS CHECKED IN & GENERATING CERTIFICATES =====\n\n";
// Check for certificate manager
if (!class_exists('HVAC_Certificate_Manager')) {
die("Certificate Manager class not found. Please ensure the plugin is active.\n");
}
// Initialize the certificate manager
$certificate_manager = HVAC_Certificate_Manager::instance();
// Get all attendees
$attendees = get_posts([
'post_type' => 'tribe_tpp_attendees',
'posts_per_page' => 100,
]);
// Get attendees from RSVP as well
$rsvp_attendees = get_posts([
'post_type' => 'tribe_rsvp_attendees',
'posts_per_page' => 100,
]);
// Combine attendees
$all_attendees = array_merge($attendees, $rsvp_attendees);
echo "Found " . count($all_attendees) . " total attendees\n";
// Create certificate directory if it doesn't exist
$upload_dir = wp_upload_dir();
$cert_dir = $upload_dir['basedir'] . '/' . get_option('hvac_certificate_storage_path', 'hvac-certificates');
if (!file_exists($cert_dir)) {
echo "Certificate directory does not exist. Creating it now...\n";
$result = wp_mkdir_p($cert_dir);
if (!$result) {
die("Failed to create certificate directory at: {$cert_dir}\n");
}
echo "Certificate directory created at: {$cert_dir}\n";
}
// Track stats
$checked_in = 0;
$certificates_created = 0;
$certificates_revoked = 0;
$certificates_emailed = 0;
// Process attendees
foreach ($all_attendees as $attendee) {
$attendee_id = $attendee->ID;
// Get attendee details
$attendee_name = get_post_meta($attendee_id, '_tribe_tickets_full_name', true);
if (empty($attendee_name)) {
$attendee_name = get_post_meta($attendee_id, '_tribe_rsvp_full_name', true);
}
$attendee_email = get_post_meta($attendee_id, '_tribe_tickets_email', true);
if (empty($attendee_email)) {
$attendee_email = get_post_meta($attendee_id, '_tribe_rsvp_email', true);
}
// Get event ID
$event_id = get_post_meta($attendee_id, '_tribe_tpp_event', true);
if (empty($event_id)) {
$event_id = get_post_meta($attendee_id, '_tribe_rsvp_event', true);
}
if (!$event_id) {
echo "No event ID found for attendee {$attendee_id}. Skipping.\n";
continue;
}
// Check if already checked in
$is_checked_in = false;
$checkin_status1 = get_post_meta($attendee_id, '_tribe_tpp_checkin', true);
$checkin_status2 = get_post_meta($attendee_id, '_tribe_rsvp_checkin', true);
$checkin_status3 = get_post_meta($attendee_id, '_tribe_tickets_checkin_status', true);
if (!empty($checkin_status1) || !empty($checkin_status2) || !empty($checkin_status3)) {
$is_checked_in = true;
}
// Mark as checked in randomly (if not already)
if (!$is_checked_in && mt_rand(1, 3) == 1) {
// Update the various check-in fields used by different ticket providers
update_post_meta($attendee_id, '_tribe_tpp_checkin', 1);
update_post_meta($attendee_id, '_tribe_rsvp_checkin', 1);
update_post_meta($attendee_id, '_tribe_tickets_checkin_status', 1);
update_post_meta($attendee_id, 'check_in', 1);
$is_checked_in = true;
$checked_in++;
echo "Marked attendee {$attendee_name} (ID: {$attendee_id}) as checked in\n";
}
// Generate certificate for checked-in attendees
if ($is_checked_in) {
// Skip if already has a certificate
if ($certificate_manager->certificate_exists($event_id, $attendee_id)) {
echo "Certificate already exists for attendee {$attendee_name} (ID: {$attendee_id}). Skipping.\n";
continue;
}
// Create a sample certificate file path
$year = date('Y');
$month = date('m');
$certificate_filename = "certificate-{$event_id}-{$attendee_id}-" . time() . ".pdf";
$certificate_relative_path = "hvac-certificates/{$year}/{$month}/{$certificate_filename}";
// Create year/month directory structure if needed
$year_month_dir = $cert_dir . "/{$year}/{$month}";
if (!file_exists($year_month_dir)) {
wp_mkdir_p($year_month_dir);
}
// Create the certificate record
$certificate_id = $certificate_manager->create_certificate(
$event_id,
$attendee_id,
0, // user_id (not associated with a user)
$certificate_relative_path,
get_current_user_id() // generated by current user
);
if ($certificate_id) {
$certificates_created++;
// Create dummy certificate file
$certificate_full_path = $upload_dir['basedir'] . '/' . $certificate_relative_path;
file_put_contents($certificate_full_path, "Placeholder for certificate PDF (Generated for testing)");
echo "Generated certificate for {$attendee_name} ({$attendee_email}) - ID: {$certificate_id}\n";
// For testing, randomly mark some certificates as revoked or emailed
$random = mt_rand(1, 10);
// Revoke about 10% of certificates
if ($random == 1) {
$revoke_result = $certificate_manager->revoke_certificate(
$certificate_id,
get_current_user_id(),
"Test revocation for certificate testing"
);
if ($revoke_result) {
$certificates_revoked++;
echo " - Revoked certificate ID: {$certificate_id}\n";
}
}
// Mark about 60% as emailed
if ($random <= 6) {
$email_result = $certificate_manager->mark_certificate_emailed($certificate_id);
if ($email_result) {
$certificates_emailed++;
echo " - Marked certificate ID: {$certificate_id} as emailed\n";
}
}
} else {
echo "Failed to generate certificate for attendee {$attendee_name} (ID: {$attendee_id})\n";
}
}
}
echo "\n===== RESULTS =====\n";
echo "Marked {$checked_in} attendees as checked in\n";
echo "Generated {$certificates_created} certificates\n";
echo "Revoked {$certificates_revoked} certificates\n";
echo "Marked {$certificates_emailed} certificates as emailed\n";
// Get certificate statistics
if (class_exists('HVAC_Certificate_Manager')) {
$stats = $certificate_manager->get_certificate_stats();
echo "\n===== CERTIFICATE STATISTICS =====\n";
echo "Total certificates in database: {$stats['total_certificates']}\n";
echo "Total events with certificates: {$stats['total_events']}\n";
echo "Total trainees with certificates: {$stats['total_trainees']}\n";
echo "Total revoked certificates: {$stats['total_revoked']}\n";
echo "Total emailed certificates: {$stats['total_emailed']}\n";
}
echo "\n===== COMPLETE =====\n";