176 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			No EOL
		
	
	
		
			6.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Simple Interface Test for Certificate Reports
 | |
|  * 
 | |
|  * This script simulates the actual template-certificate-reports.php processing
 | |
|  * by replicating the query logic for attendee search functionality.
 | |
|  */
 | |
| 
 | |
| // Load WordPress
 | |
| require_once('wp-load.php');
 | |
| 
 | |
| echo "===== CERTIFICATE REPORTS INTERFACE SIMULATION =====\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 certificate manager
 | |
| $certificate_manager = HVAC_Certificate_Manager::instance();
 | |
| 
 | |
| // Get current user ID (should be admin)
 | |
| $current_user_id = get_current_user_id();
 | |
| echo "Current user ID: {$current_user_id}\n";
 | |
| 
 | |
| // Simulate different search parameters
 | |
| $test_cases = [
 | |
|     ['event_id' => '', 'search_attendee' => 'Ben Tester', 'revoked' => ''],
 | |
|     ['event_id' => '', 'search_attendee' => 'ben@tealmaker.com', 'revoked' => ''],
 | |
|     ['event_id' => '', 'search_attendee' => 'Smith', 'revoked' => ''],
 | |
|     ['event_id' => '', 'search_attendee' => '@gmail', 'revoked' => ''],
 | |
| ];
 | |
| 
 | |
| echo "Simulating certificate report page with different search parameters:\n";
 | |
| echo "----------------------------------------------------------------\n\n";
 | |
| 
 | |
| foreach ($test_cases as $index => $args) {
 | |
|     echo "Test Case #" . ($index + 1) . ":\n";
 | |
|     echo "Event ID: " . (empty($args['event_id']) ? "All Events" : $args['event_id']) . "\n";
 | |
|     echo "Search Attendee: " . $args['search_attendee'] . "\n";
 | |
|     echo "Revoked: " . (isset($args['revoked']) && $args['revoked'] !== '' ? ($args['revoked'] ? "Yes" : "No") : "All") . "\n";
 | |
|     
 | |
|     // Get certificate count
 | |
|     $count_args = $args;
 | |
|     $certificate_count = $certificate_manager->get_user_certificate_count($current_user_id, $count_args);
 | |
|     echo "Certificate count: {$certificate_count}\n";
 | |
|     
 | |
|     // Get certificates
 | |
|     $certificates = $certificate_manager->get_user_certificates($current_user_id, $args);
 | |
|     echo "Certificates returned: " . count($certificates) . "\n";
 | |
|     
 | |
|     // Show some sample certificates if any were found
 | |
|     if (!empty($certificates)) {
 | |
|         echo "Sample certificates:\n";
 | |
|         
 | |
|         $sample_count = min(count($certificates), 3);
 | |
|         for ($i = 0; $i < $sample_count; $i++) {
 | |
|             $cert = $certificates[$i];
 | |
|             
 | |
|             if (!$cert) continue;
 | |
|             
 | |
|             $event = get_post($cert->event_id);
 | |
|             $event_title = $event ? $event->post_title : "Unknown Event";
 | |
|             
 | |
|             $attendee_id = $cert->attendee_id;
 | |
|             $name = get_post_meta($attendee_id, '_tribe_tickets_full_name', true);
 | |
|             $email = get_post_meta($attendee_id, '_tribe_tickets_email', true);
 | |
|             
 | |
|             echo "  Certificate #{$cert->certificate_number}\n";
 | |
|             echo "    Event: {$event_title}\n";
 | |
|             echo "    Attendee: {$name} ({$email})\n";
 | |
|             echo "    Date: {$cert->date_generated}\n";
 | |
|             echo "    Status: " . ($cert->revoked ? "Revoked" : "Active") . "\n";
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     echo "\n";
 | |
| }
 | |
| 
 | |
| // Now get a more detailed view of how the SQL is constructed
 | |
| echo "Detailed SQL Construction Analysis:\n";
 | |
| echo "--------------------------------\n\n";
 | |
| 
 | |
| // Simulate the search for 'Ben Tester'
 | |
| $search_term = 'Ben Tester';
 | |
| 
 | |
| // Build the WHERE clause
 | |
| global $wpdb;
 | |
|     
 | |
| echo "Search term: '{$search_term}'\n\n";
 | |
| 
 | |
| // Get all test events
 | |
| $all_events = get_posts([
 | |
|     'post_type' => 'tribe_events',
 | |
|     'posts_per_page' => -1,
 | |
|     'fields' => 'ids'
 | |
| ]);
 | |
| 
 | |
| if (empty($all_events)) {
 | |
|     echo "No events found. Cannot continue SQL analysis.\n";
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| // Create event ID string for SQL
 | |
| $event_ids_string = implode(',', $all_events);
 | |
| 
 | |
| // Base SQL
 | |
| $base_sql = "FROM {$wpdb->prefix}hvac_certificates WHERE event_id IN ($event_ids_string)";
 | |
| 
 | |
| // Attendee search SQL
 | |
| $attendee_search_sql = " AND (
 | |
|     certificate_id IN (
 | |
|         SELECT c.certificate_id 
 | |
|         FROM {$wpdb->prefix}hvac_certificates c
 | |
|         JOIN {$wpdb->postmeta} pm ON c.attendee_id = pm.post_id 
 | |
|         WHERE pm.meta_key = '_tribe_tickets_full_name' AND pm.meta_value LIKE %s
 | |
|     )
 | |
|     OR
 | |
|     certificate_id IN (
 | |
|         SELECT c.certificate_id 
 | |
|         FROM {$wpdb->prefix}hvac_certificates c
 | |
|         JOIN {$wpdb->postmeta} pm ON c.attendee_id = pm.post_id 
 | |
|         WHERE pm.meta_key = '_tribe_tickets_email' AND pm.meta_value LIKE %s
 | |
|     )
 | |
| )";
 | |
| 
 | |
| // Complete SQL for count
 | |
| $count_sql = "SELECT COUNT(*) " . $base_sql . $attendee_search_sql;
 | |
| $prepared_count_sql = $wpdb->prepare(
 | |
|     $count_sql,
 | |
|     ['%' . $wpdb->esc_like($search_term) . '%', '%' . $wpdb->esc_like($search_term) . '%']
 | |
| );
 | |
| 
 | |
| echo "Count SQL:\n{$prepared_count_sql}\n\n";
 | |
| 
 | |
| // Complete SQL for data retrieval
 | |
| $data_sql = "SELECT * " . $base_sql . $attendee_search_sql . " ORDER BY date_generated DESC LIMIT 20";
 | |
| $prepared_data_sql = $wpdb->prepare(
 | |
|     $data_sql,
 | |
|     ['%' . $wpdb->esc_like($search_term) . '%', '%' . $wpdb->esc_like($search_term) . '%']
 | |
| );
 | |
| 
 | |
| echo "Data SQL:\n{$prepared_data_sql}\n\n";
 | |
| 
 | |
| // Execute the queries directly to verify SQL correctness
 | |
| $count_result = $wpdb->get_var($prepared_count_sql);
 | |
| echo "Direct SQL count result: {$count_result}\n";
 | |
| 
 | |
| $data_result = $wpdb->get_results($prepared_data_sql);
 | |
| $data_count = count($data_result);
 | |
| echo "Direct SQL data result count: {$data_count}\n\n";
 | |
| 
 | |
| // Display sample results
 | |
| if ($data_count > 0) {
 | |
|     echo "Sample results from direct SQL query:\n";
 | |
|     $sample_count = min($data_count, 3);
 | |
|     
 | |
|     for ($i = 0; $i < $sample_count; $i++) {
 | |
|         $cert = $data_result[$i];
 | |
|         
 | |
|         $event = get_post($cert->event_id);
 | |
|         $event_title = $event ? $event->post_title : "Unknown Event";
 | |
|         
 | |
|         $attendee_id = $cert->attendee_id;
 | |
|         $name = get_post_meta($attendee_id, '_tribe_tickets_full_name', true);
 | |
|         $email = get_post_meta($attendee_id, '_tribe_tickets_email', true);
 | |
|         
 | |
|         echo "  Certificate #{$cert->certificate_number}\n";
 | |
|         echo "    Event: {$event_title}\n";
 | |
|         echo "    Attendee: {$name} ({$email})\n";
 | |
|         echo "    Date: {$cert->date_generated}\n";
 | |
|         echo "    Status: " . ($cert->revoked ? "Revoked" : "Active") . "\n";
 | |
|     }
 | |
| }
 | |
| 
 | |
| echo "\n===== INTERFACE SIMULATION COMPLETE =====\n"; |