'', '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";