upskill-event-manager/wordpress-dev/bin/simple-interface-test.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";