/** * Event Summary Certificate Actions JavaScript * * Handles certificate actions for the Event Summary page */ (function($) { 'use strict'; // Initialize certificate actions when document is ready $(document).ready(function() { // Set up certificate action modal initCertificateModal(); // Set up certificate action handlers initCertificateActions(); }); // Initialize certificate modal function initCertificateModal() { // Check if modal exists, create it if not if ($('#hvac-certificate-modal').length === 0) { var modalHtml = `
×
`; $('body').append(modalHtml); // Add modal close functionality $('.hvac-modal-close').on('click', function() { $('#hvac-certificate-modal').hide(); }); // Close modal when clicking outside $(window).on('click', function(event) { if ($(event.target).is('#hvac-certificate-modal')) { $('#hvac-certificate-modal').hide(); } }); } } // Initialize certificate action handlers function initCertificateActions() { // View certificate action $('.hvac-view-certificate').on('click', function(e) { e.preventDefault(); var eventId = $(this).data('event'); var attendeeId = $(this).data('attendee'); // Show modal with loading indicator var modal = $('#hvac-certificate-modal'); var iframe = $('#hvac-certificate-preview'); iframe.attr('src', ''); var loadingHtml = '
Loading certificate...
'; $('.hvac-modal-body').append(loadingHtml); modal.show(); // Fetch certificate URL via AJAX $.ajax({ url: hvacEventSummary.ajaxUrl, method: 'POST', data: { action: 'hvac_get_certificate_url', event_id: eventId, attendee_id: attendeeId, nonce: hvacEventSummary.certificateNonce }, success: function(response) { $('.hvac-loading').remove(); if (response.success && response.data.url) { iframe.attr('src', response.data.url); } else { $('.hvac-modal-body').append('
Error: ' + (response.data.message || 'Could not load certificate') + '
'); } }, error: function() { $('.hvac-loading').remove(); $('.hvac-modal-body').append('
Error: Could not connect to the server
'); } }); }); // Email certificate action $('.hvac-email-certificate').on('click', function(e) { e.preventDefault(); var eventId = $(this).data('event'); var attendeeId = $(this).data('attendee'); var button = $(this); if (confirm('Send this certificate to the attendee via email?')) { // Show loading state button.text('Sending...').addClass('hvac-loading'); // Send email via AJAX $.ajax({ url: hvacEventSummary.ajaxUrl, method: 'POST', data: { action: 'hvac_email_certificate', event_id: eventId, attendee_id: attendeeId, nonce: hvacEventSummary.certificateNonce }, success: function(response) { button.removeClass('hvac-loading'); if (response.success) { button.closest('td').find('.certificate-status').text('Sent'); alert('Certificate was sent successfully.'); } else { button.text('Email'); alert('Error: ' + (response.data.message || 'Failed to send certificate.')); } }, error: function() { button.removeClass('hvac-loading').text('Email'); alert('Error: Could not connect to the server.'); } }); } }); // Revoke certificate action $('.hvac-revoke-certificate').on('click', function(e) { e.preventDefault(); var eventId = $(this).data('event'); var attendeeId = $(this).data('attendee'); var button = $(this); var cell = button.closest('td'); // Ask for a reason var reason = prompt('Please enter a reason for revoking this certificate:'); if (reason !== null) { // Null means the user clicked Cancel // Show loading state button.text('Revoking...').addClass('hvac-loading'); // Revoke certificate via AJAX $.ajax({ url: hvacEventSummary.ajaxUrl, method: 'POST', data: { action: 'hvac_revoke_certificate', event_id: eventId, attendee_id: attendeeId, reason: reason, nonce: hvacEventSummary.certificateNonce }, success: function(response) { button.removeClass('hvac-loading'); if (response.success) { // Update cell content to show revoked status cell.html('Revoked'); alert('Certificate was revoked successfully.'); } else { button.text('Revoke'); alert('Error: ' + (response.data.message || 'Failed to revoke certificate.')); } }, error: function() { button.removeClass('hvac-loading').text('Revoke'); alert('Error: Could not connect to the server.'); } }); } }); } })(jQuery);