🚨 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>
		
			
				
	
	
		
			540 lines
		
	
	
		
			No EOL
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			540 lines
		
	
	
		
			No EOL
		
	
	
		
			24 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | ||
| /**
 | ||
|  * Google Sheets Admin Interface
 | ||
|  *
 | ||
|  * Provides admin interface for Google Sheets integration
 | ||
|  *
 | ||
|  * @package HVAC_Community_Events
 | ||
|  * @subpackage Google_Sheets_Integration
 | ||
|  */
 | ||
| 
 | ||
| if (!defined('ABSPATH')) {
 | ||
|     exit;
 | ||
| }
 | ||
| 
 | ||
| require_once plugin_dir_path(__FILE__) . 'class-google-sheets-auth.php';
 | ||
| require_once plugin_dir_path(__FILE__) . 'class-google-sheets-manager.php';
 | ||
| 
 | ||
| class HVAC_Google_Sheets_Admin {
 | ||
|     
 | ||
|     private $auth;
 | ||
|     private $manager;
 | ||
|     
 | ||
|     public function __construct() {
 | ||
|         $this->auth = new HVAC_Google_Sheets_Auth();
 | ||
|         $this->manager = new HVAC_Google_Sheets_Manager();
 | ||
|         
 | ||
|         add_action('wp_ajax_hvac_create_master_report', array($this, 'ajax_create_master_report'));
 | ||
|         add_action('wp_ajax_hvac_create_event_spreadsheet', array($this, 'ajax_create_event_spreadsheet'));
 | ||
|         add_action('wp_ajax_hvac_test_google_sheets_connection', array($this, 'ajax_test_connection'));
 | ||
|         add_action('wp_ajax_hvac_verify_folder_structure', array($this, 'ajax_verify_folder_structure'));
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * Render Google Sheets admin page
 | ||
|      */
 | ||
|     public function render_admin_page() {
 | ||
|         try {
 | ||
|             // Initialize with safe defaults
 | ||
|             $auth_status = array(
 | ||
|                 'has_credentials' => false,
 | ||
|                 'is_authenticated' => false,
 | ||
|                 'client_id' => 'Not configured',
 | ||
|                 'token_expires' => 'N/A'
 | ||
|             );
 | ||
|             
 | ||
|             // Try to get auth status
 | ||
|             if ($this->auth) {
 | ||
|                 $auth_status = $this->auth->get_config_status();
 | ||
|             }
 | ||
|             
 | ||
|             // Initialize report variables
 | ||
|             $latest_report = null;
 | ||
|             $report_history = array();
 | ||
|             
 | ||
|             // Try to get reports if manager is available
 | ||
|             if ($this->manager) {
 | ||
|                 $latest_report = $this->manager->get_latest_master_report();
 | ||
|                 $report_history = $this->manager->get_master_report_history();
 | ||
|             }
 | ||
|         
 | ||
|         ?>
 | ||
|         <div class="hvac-google-sheets-admin">
 | ||
|             <div class="hvac-container">
 | ||
|                 <div class="hvac-header">
 | ||
|                     <h1><i class="hvac-icon-sheets"></i>Google Sheets Integration</h1>
 | ||
|                     <div class="hvac-header-actions">
 | ||
|                         <a href="<?php echo home_url('/master-trainer/dashboard/'); ?>" class="hvac-btn hvac-btn-secondary">
 | ||
|                             <i class="hvac-icon-arrow-left"></i> Back to Master Dashboard
 | ||
|                         </a>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|                 
 | ||
|                 <!-- Success/Error Messages -->
 | ||
|                 <?php if (isset($_GET['auth_success']) && $_GET['auth_success'] == '1'): ?>
 | ||
|                 <div class="hvac-alert hvac-alert-success">
 | ||
|                     <i class="hvac-icon-check"></i>
 | ||
|                     <strong>Success!</strong> Google Sheets authorization completed successfully! You can now create reports.
 | ||
|                 </div>
 | ||
|                 <?php endif; ?>
 | ||
|                 
 | ||
|                 <?php if (isset($_GET['auth_error']) && $_GET['auth_error'] == '1'): ?>
 | ||
|                 <div class="hvac-alert hvac-alert-error">
 | ||
|                     <i class="hvac-icon-warning"></i>
 | ||
|                     <strong>Error:</strong> <?php echo esc_html($_GET['message'] ?? 'Failed to complete Google Sheets authorization.'); ?>
 | ||
|                 </div>
 | ||
|                 <?php endif; ?>
 | ||
|                 
 | ||
|                 <!-- Connection Status -->
 | ||
|                 <div class="hvac-card">
 | ||
|                     <div class="hvac-card-header">
 | ||
|                         <h2><i class="hvac-icon-connection"></i>Connection Status</h2>
 | ||
|                     </div>
 | ||
|                     <div class="hvac-card-body">
 | ||
|                         <div class="hvac-status-grid">
 | ||
|                             <div class="hvac-status-item">
 | ||
|                                 <span class="hvac-status-label">Credentials:</span>
 | ||
|                                 <span class="hvac-status-value <?php echo $auth_status['has_credentials'] ? 'success' : 'error'; ?>">
 | ||
|                                     <?php echo $auth_status['has_credentials'] ? '✓ Configured' : '✗ Missing'; ?>
 | ||
|                                 </span>
 | ||
|                             </div>
 | ||
|                             <div class="hvac-status-item">
 | ||
|                                 <span class="hvac-status-label">Authentication:</span>
 | ||
|                                 <span class="hvac-status-value <?php echo $auth_status['is_authenticated'] ? 'success' : 'error'; ?>">
 | ||
|                                     <?php echo $auth_status['is_authenticated'] ? '✓ Connected' : '✗ Not Connected'; ?>
 | ||
|                                 </span>
 | ||
|                             </div>
 | ||
|                             <div class="hvac-status-item">
 | ||
|                                 <span class="hvac-status-label">Client ID:</span>
 | ||
|                                 <span class="hvac-status-value"><?php echo esc_html($auth_status['client_id']); ?></span>
 | ||
|                             </div>
 | ||
|                             <div class="hvac-status-item">
 | ||
|                                 <span class="hvac-status-label">Token Expires:</span>
 | ||
|                                 <span class="hvac-status-value"><?php echo esc_html($auth_status['token_expires']); ?></span>
 | ||
|                             </div>
 | ||
|                         </div>
 | ||
|                         
 | ||
|                         <div class="hvac-actions">
 | ||
|                             <button id="test-connection" class="hvac-btn hvac-btn-primary">
 | ||
|                                 <i class="hvac-icon-test"></i> Test Connection
 | ||
|                             </button>
 | ||
|                             <button id="verify-folders" class="hvac-btn hvac-btn-secondary"
 | ||
|                                     <?php echo !$auth_status['is_authenticated'] ? 'disabled' : ''; ?>>
 | ||
|                                 <i class="hvac-icon-folder"></i> Verify Folders
 | ||
|                             </button>
 | ||
|                             <?php if (!$auth_status['is_authenticated']): ?>
 | ||
|                             <a href="<?php echo esc_url($this->auth->get_authorization_url()); ?>" 
 | ||
|                                class="hvac-btn hvac-btn-secondary" target="_blank">
 | ||
|                                 <i class="hvac-icon-auth"></i> Authorize Access
 | ||
|                             </a>
 | ||
|                             <?php endif; ?>
 | ||
|                         </div>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|                 
 | ||
|                 <!-- Master Report Section -->
 | ||
|                 <div class="hvac-card">
 | ||
|                     <div class="hvac-card-header">
 | ||
|                         <h2><i class="hvac-icon-report"></i>Master Report</h2>
 | ||
|                     </div>
 | ||
|                     <div class="hvac-card-body">
 | ||
|                         <p>Generate a comprehensive report with system overview, trainer performance, all events, and revenue analytics.</p>
 | ||
|                         
 | ||
|                         <?php if ($latest_report): ?>
 | ||
|                         <div class="hvac-latest-report">
 | ||
|                             <h3>Latest Report</h3>
 | ||
|                             <div class="hvac-report-info">
 | ||
|                                 <div class="hvac-report-meta">
 | ||
|                                     <span class="hvac-report-date">
 | ||
|                                         <i class="hvac-icon-calendar"></i>
 | ||
|                                         <?php echo date('M j, Y g:i A', strtotime($latest_report['created_at'])); ?>
 | ||
|                                     </span>
 | ||
|                                     <a href="<?php echo esc_url($latest_report['url']); ?>" 
 | ||
|                                        target="_blank" class="hvac-btn hvac-btn-primary hvac-btn-sm">
 | ||
|                                         <i class="hvac-icon-external"></i> Open Spreadsheet
 | ||
|                                     </a>
 | ||
|                                 </div>
 | ||
|                             </div>
 | ||
|                         </div>
 | ||
|                         <?php endif; ?>
 | ||
|                         
 | ||
|                         <div class="hvac-actions">
 | ||
|                             <button id="create-master-report" class="hvac-btn hvac-btn-primary"
 | ||
|                                     <?php echo !$auth_status['is_authenticated'] ? 'disabled' : ''; ?>>
 | ||
|                                 <i class="hvac-icon-create"></i> Generate New Master Report
 | ||
|                             </button>
 | ||
|                         </div>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|                 
 | ||
|                 <!-- Event Spreadsheets Section -->
 | ||
|                 <div class="hvac-card">
 | ||
|                     <div class="hvac-card-header">
 | ||
|                         <h2><i class="hvac-icon-events"></i>Event Spreadsheets</h2>
 | ||
|                     </div>
 | ||
|                     <div class="hvac-card-body">
 | ||
|                         <p>Create detailed spreadsheets for individual events with attendees, financial data, and event details.</p>
 | ||
|                         
 | ||
|                         <div class="hvac-event-selection">
 | ||
|                             <label for="event-select">Select Event:</label>
 | ||
|                             <select id="event-select" class="hvac-select">
 | ||
|                                 <option value="">Choose an event...</option>
 | ||
|                                 <?php $this->render_event_options(); ?>
 | ||
|                             </select>
 | ||
|                             <button id="create-event-spreadsheet" class="hvac-btn hvac-btn-primary"
 | ||
|                                     <?php echo !$auth_status['is_authenticated'] ? 'disabled' : ''; ?>>
 | ||
|                                 <i class="hvac-icon-create"></i> Create Event Spreadsheet
 | ||
|                             </button>
 | ||
|                         </div>
 | ||
|                         
 | ||
|                         <div id="existing-event-sheets">
 | ||
|                             <h3>Existing Event Spreadsheets</h3>
 | ||
|                             <div class="hvac-event-sheets-list">
 | ||
|                                 <?php $this->render_existing_event_sheets(); ?>
 | ||
|                             </div>
 | ||
|                         </div>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|                 
 | ||
|                 <!-- Report History -->
 | ||
|                 <?php if (!empty($report_history)): ?>
 | ||
|                 <div class="hvac-card">
 | ||
|                     <div class="hvac-card-header">
 | ||
|                         <h2><i class="hvac-icon-history"></i>Report History</h2>
 | ||
|                     </div>
 | ||
|                     <div class="hvac-card-body">
 | ||
|                         <div class="hvac-history-list">
 | ||
|                             <?php foreach (array_reverse($report_history) as $report): ?>
 | ||
|                             <div class="hvac-history-item">
 | ||
|                                 <div class="hvac-history-meta">
 | ||
|                                     <span class="hvac-history-date">
 | ||
|                                         <?php echo date('M j, Y g:i A', strtotime($report['created_at'])); ?>
 | ||
|                                     </span>
 | ||
|                                     <span class="hvac-history-user">
 | ||
|                                         by <?php echo get_userdata($report['created_by'])->display_name; ?>
 | ||
|                                     </span>
 | ||
|                                 </div>
 | ||
|                                 <a href="<?php echo esc_url($report['url']); ?>" target="_blank" 
 | ||
|                                    class="hvac-btn hvac-btn-secondary hvac-btn-sm">
 | ||
|                                     <i class="hvac-icon-external"></i> Open
 | ||
|                                 </a>
 | ||
|                             </div>
 | ||
|                             <?php endforeach; ?>
 | ||
|                         </div>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|                 <?php endif; ?>
 | ||
|             </div>
 | ||
|         </div>
 | ||
|         
 | ||
|         <!-- Loading Overlay -->
 | ||
|         <div id="hvac-loading-overlay" class="hvac-loading-overlay" style="display: none;">
 | ||
|             <div class="hvac-loading-content">
 | ||
|                 <div class="hvac-spinner"></div>
 | ||
|                 <p>Processing request...</p>
 | ||
|             </div>
 | ||
|         </div>
 | ||
|         
 | ||
|         <script>
 | ||
|         // Define ajaxurl for frontend AJAX requests
 | ||
|         var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
 | ||
|         
 | ||
|         document.addEventListener('DOMContentLoaded', function() {
 | ||
|             // Test Connection
 | ||
|             document.getElementById('test-connection').addEventListener('click', function() {
 | ||
|                 showLoading();
 | ||
|                 
 | ||
|                 fetch(ajaxurl, {
 | ||
|                     method: 'POST',
 | ||
|                     headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
 | ||
|                     body: 'action=hvac_test_google_sheets_connection&_wpnonce=<?php echo wp_create_nonce('hvac_google_sheets'); ?>'
 | ||
|                 })
 | ||
|                 .then(response => response.json())
 | ||
|                 .then(data => {
 | ||
|                     hideLoading();
 | ||
|                     if (data.success) {
 | ||
|                         showNotification('Connection test successful!', 'success');
 | ||
|                     } else {
 | ||
|                         showNotification('Connection test failed: ' + data.data, 'error');
 | ||
|                     }
 | ||
|                 })
 | ||
|                 .catch(error => {
 | ||
|                     hideLoading();
 | ||
|                     showNotification('Connection test failed: ' + error.message, 'error');
 | ||
|                 });
 | ||
|             });
 | ||
|             
 | ||
|             // Verify Folder Structure
 | ||
|             document.getElementById('verify-folders').addEventListener('click', function() {
 | ||
|                 showLoading();
 | ||
|                 
 | ||
|                 fetch(ajaxurl, {
 | ||
|                     method: 'POST',
 | ||
|                     headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
 | ||
|                     body: 'action=hvac_verify_folder_structure&_wpnonce=<?php echo wp_create_nonce('hvac_google_sheets'); ?>'
 | ||
|                 })
 | ||
|                 .then(response => response.json())
 | ||
|                 .then(data => {
 | ||
|                     hideLoading();
 | ||
|                     if (data.success) {
 | ||
|                         showNotification('Folder structure verification completed!', 'success');
 | ||
|                     } else {
 | ||
|                         showNotification('Folder verification failed: ' + data.data, 'error');
 | ||
|                     }
 | ||
|                 })
 | ||
|                 .catch(error => {
 | ||
|                     hideLoading();
 | ||
|                     showNotification('Folder verification failed: ' + error.message, 'error');
 | ||
|                 });
 | ||
|             });
 | ||
|             
 | ||
|             // Create Master Report
 | ||
|             document.getElementById('create-master-report').addEventListener('click', function() {
 | ||
|                 showLoading();
 | ||
|                 
 | ||
|                 fetch(ajaxurl, {
 | ||
|                     method: 'POST',
 | ||
|                     headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
 | ||
|                     body: 'action=hvac_create_master_report&_wpnonce=<?php echo wp_create_nonce('hvac_google_sheets'); ?>'
 | ||
|                 })
 | ||
|                 .then(response => response.json())
 | ||
|                 .then(data => {
 | ||
|                     hideLoading();
 | ||
|                     if (data.success) {
 | ||
|                         showNotification('Master Report created successfully!', 'success');
 | ||
|                         setTimeout(() => window.location.reload(), 2000);
 | ||
|                     } else {
 | ||
|                         showNotification('Failed to create Master Report: ' + data.data, 'error');
 | ||
|                     }
 | ||
|                 })
 | ||
|                 .catch(error => {
 | ||
|                     hideLoading();
 | ||
|                     showNotification('Failed to create Master Report: ' + error.message, 'error');
 | ||
|                 });
 | ||
|             });
 | ||
|             
 | ||
|             // Create Event Spreadsheet
 | ||
|             document.getElementById('create-event-spreadsheet').addEventListener('click', function() {
 | ||
|                 const eventSelect = document.getElementById('event-select');
 | ||
|                 const eventId = eventSelect.value;
 | ||
|                 
 | ||
|                 if (!eventId) {
 | ||
|                     showNotification('Please select an event first.', 'warning');
 | ||
|                     return;
 | ||
|                 }
 | ||
|                 
 | ||
|                 showLoading();
 | ||
|                 
 | ||
|                 fetch(ajaxurl, {
 | ||
|                     method: 'POST',
 | ||
|                     headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
 | ||
|                     body: `action=hvac_create_event_spreadsheet&event_id=${eventId}&_wpnonce=<?php echo wp_create_nonce('hvac_google_sheets'); ?>`
 | ||
|                 })
 | ||
|                 .then(response => response.json())
 | ||
|                 .then(data => {
 | ||
|                     hideLoading();
 | ||
|                     if (data.success) {
 | ||
|                         showNotification('Event spreadsheet created successfully!', 'success');
 | ||
|                         setTimeout(() => window.location.reload(), 2000);
 | ||
|                     } else {
 | ||
|                         showNotification('Failed to create event spreadsheet: ' + data.data, 'error');
 | ||
|                     }
 | ||
|                 })
 | ||
|                 .catch(error => {
 | ||
|                     hideLoading();
 | ||
|                     showNotification('Failed to create event spreadsheet: ' + error.message, 'error');
 | ||
|                 });
 | ||
|             });
 | ||
|             
 | ||
|             function showLoading() {
 | ||
|                 document.getElementById('hvac-loading-overlay').style.display = 'flex';
 | ||
|             }
 | ||
|             
 | ||
|             function hideLoading() {
 | ||
|                 document.getElementById('hvac-loading-overlay').style.display = 'none';
 | ||
|             }
 | ||
|             
 | ||
|             function showNotification(message, type) {
 | ||
|                 // Create notification element
 | ||
|                 const notification = document.createElement('div');
 | ||
|                 notification.className = `hvac-notification hvac-notification-${type}`;
 | ||
|                 notification.innerHTML = `
 | ||
|                     <span>${message}</span>
 | ||
|                     <button onclick="this.parentElement.remove()">×</button>
 | ||
|                 `;
 | ||
|                 
 | ||
|                 document.body.appendChild(notification);
 | ||
|                 
 | ||
|                 // Auto-remove after 5 seconds
 | ||
|                 setTimeout(() => {
 | ||
|                     if (notification.parentElement) {
 | ||
|                         notification.remove();
 | ||
|                     }
 | ||
|                 }, 5000);
 | ||
|             }
 | ||
|         });
 | ||
|         </script>
 | ||
|         <?php
 | ||
|         } catch (Exception $e) {
 | ||
|             // Display error message if something goes wrong
 | ||
|             ?>
 | ||
|             <div class="hvac-google-sheets-admin">
 | ||
|                 <div class="hvac-container">
 | ||
|                     <div class="hvac-alert hvac-alert-error">
 | ||
|                         <i class="hvac-icon-warning"></i>
 | ||
|                         <strong>Error:</strong> Unable to load Google Sheets integration. <?php echo esc_html($e->getMessage()); ?>
 | ||
|                     </div>
 | ||
|                     <div class="hvac-actions">
 | ||
|                         <a href="<?php echo home_url('/master-trainer/dashboard/'); ?>" class="hvac-btn hvac-btn-secondary">
 | ||
|                             <i class="hvac-icon-arrow-left"></i> Back to Master Dashboard
 | ||
|                         </a>
 | ||
|                     </div>
 | ||
|                 </div>
 | ||
|             </div>
 | ||
|             <?php
 | ||
|             error_log('HVAC Google Sheets Admin Error: ' . $e->getMessage());
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * Render event options for select dropdown
 | ||
|      */
 | ||
|     private function render_event_options() {
 | ||
|         $events = get_posts(array(
 | ||
|             'post_type' => 'tribe_events',
 | ||
|             'post_status' => 'publish',
 | ||
|             'numberposts' => -1,
 | ||
|             'orderby' => 'meta_value',
 | ||
|             'meta_key' => '_EventStartDate',
 | ||
|             'order' => 'DESC'
 | ||
|         ));
 | ||
|         
 | ||
|         foreach ($events as $event) {
 | ||
|             $event_date = get_post_meta($event->ID, '_EventStartDate', true);
 | ||
|             $formatted_date = $event_date ? date('M j, Y', strtotime($event_date)) : 'No date';
 | ||
|             $trainer_name = get_the_author_meta('display_name', $event->post_author);
 | ||
|             
 | ||
|             echo '<option value="' . esc_attr($event->ID) . '">';
 | ||
|             echo esc_html($event->post_title) . ' - ' . esc_html($formatted_date) . ' (' . esc_html($trainer_name) . ')';
 | ||
|             echo '</option>';
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * Render existing event spreadsheets
 | ||
|      */
 | ||
|     private function render_existing_event_sheets() {
 | ||
|         global $wpdb;
 | ||
|         
 | ||
|         $results = $wpdb->get_results(
 | ||
|             "SELECT p.ID, p.post_title, pm.meta_value, u.display_name
 | ||
|              FROM {$wpdb->posts} p
 | ||
|              JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id
 | ||
|              JOIN {$wpdb->users} u ON p.post_author = u.ID
 | ||
|              WHERE p.post_type = 'tribe_events'
 | ||
|              AND pm.meta_key = '_hvac_google_sheet'
 | ||
|              ORDER BY p.post_date DESC"
 | ||
|         );
 | ||
|         
 | ||
|         if (empty($results)) {
 | ||
|             echo '<p class="hvac-no-sheets">No event spreadsheets created yet.</p>';
 | ||
|             return;
 | ||
|         }
 | ||
|         
 | ||
|         foreach ($results as $result) {
 | ||
|             $sheet_data = maybe_unserialize($result->meta_value);
 | ||
|             if (is_array($sheet_data) && isset($sheet_data['url'])) {
 | ||
|                 echo '<div class="hvac-event-sheet-item">';
 | ||
|                 echo '<div class="hvac-sheet-info">';
 | ||
|                 echo '<h4>' . esc_html($result->post_title) . '</h4>';
 | ||
|                 echo '<span class="hvac-sheet-trainer">by ' . esc_html($result->display_name) . '</span>';
 | ||
|                 echo '<span class="hvac-sheet-date">Created: ' . date('M j, Y', strtotime($sheet_data['created_at'])) . '</span>';
 | ||
|                 echo '</div>';
 | ||
|                 echo '<a href="' . esc_url($sheet_data['url']) . '" target="_blank" class="hvac-btn hvac-btn-secondary hvac-btn-sm">';
 | ||
|                 echo '<i class="hvac-icon-external"></i> Open Spreadsheet';
 | ||
|                 echo '</a>';
 | ||
|                 echo '</div>';
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * AJAX: Create Master Report
 | ||
|      */
 | ||
|     public function ajax_create_master_report() {
 | ||
|         check_ajax_referer('hvac_google_sheets', '_wpnonce');
 | ||
|         
 | ||
|         if (!current_user_can('view_master_dashboard')) {
 | ||
|             wp_die('Insufficient permissions');
 | ||
|         }
 | ||
|         
 | ||
|         $result = $this->manager->create_master_report();
 | ||
|         
 | ||
|         if ($result['success']) {
 | ||
|             wp_send_json_success($result);
 | ||
|         } else {
 | ||
|             wp_send_json_error($result['error']);
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * AJAX: Create Event Spreadsheet
 | ||
|      */
 | ||
|     public function ajax_create_event_spreadsheet() {
 | ||
|         check_ajax_referer('hvac_google_sheets', '_wpnonce');
 | ||
|         
 | ||
|         if (!current_user_can('view_master_dashboard')) {
 | ||
|             wp_die('Insufficient permissions');
 | ||
|         }
 | ||
|         
 | ||
|         $event_id = intval($_POST['event_id']);
 | ||
|         if (!$event_id) {
 | ||
|             wp_send_json_error('Invalid event ID');
 | ||
|         }
 | ||
|         
 | ||
|         $result = $this->manager->create_event_spreadsheet($event_id);
 | ||
|         
 | ||
|         if ($result['success']) {
 | ||
|             wp_send_json_success($result);
 | ||
|         } else {
 | ||
|             wp_send_json_error($result['error']);
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * AJAX: Test Connection
 | ||
|      */
 | ||
|     public function ajax_test_connection() {
 | ||
|         check_ajax_referer('hvac_google_sheets', '_wpnonce');
 | ||
|         
 | ||
|         if (!current_user_can('view_master_dashboard')) {
 | ||
|             wp_die('Insufficient permissions');
 | ||
|         }
 | ||
|         
 | ||
|         $result = $this->manager->test_connection();
 | ||
|         
 | ||
|         if ($result['success']) {
 | ||
|             wp_send_json_success($result['message']);
 | ||
|         } else {
 | ||
|             wp_send_json_error($result['message']);
 | ||
|         }
 | ||
|     }
 | ||
|     
 | ||
|     /**
 | ||
|      * AJAX: Verify Folder Structure
 | ||
|      */
 | ||
|     public function ajax_verify_folder_structure() {
 | ||
|         check_ajax_referer('hvac_google_sheets', '_wpnonce');
 | ||
|         
 | ||
|         if (!current_user_can('view_master_dashboard')) {
 | ||
|             wp_die('Insufficient permissions');
 | ||
|         }
 | ||
|         
 | ||
|         require_once plugin_dir_path(dirname(__FILE__)) . '../google-sheets-folder-manager.php';
 | ||
|         $folder_manager = new HVAC_Google_Sheets_Folder_Manager();
 | ||
|         
 | ||
|         $result = $folder_manager->verify_folder_structure();
 | ||
|         
 | ||
|         wp_send_json_success($result);
 | ||
|     }
 | ||
| }
 |