- Add 26 documentation files including test reports, deployment guides, and troubleshooting documentation - Include 3 CSV data files for trainer imports and user registration tracking - Add 43 JavaScript test files covering mobile optimization, Safari compatibility, and E2E testing - Include 18 PHP utility files for debugging, geocoding, and data analysis - Add 12 shell scripts for deployment verification, user management, and database operations - Update .gitignore with whitelist patterns for development files, documentation, and CSV data 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
202 lines
No EOL
8.8 KiB
Bash
Executable file
202 lines
No EOL
8.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Debug and fix certificate attendees script with proper revenue data
|
|
|
|
source .env
|
|
|
|
echo "=== Debug and Fix Certificate Attendees + Revenue Data ==="
|
|
echo "Target: $UPSKILL_STAGING_IP"
|
|
echo "=========================================================="
|
|
|
|
# Upload and execute PHP script to debug and fix attendee data
|
|
sshpass -p "$UPSKILL_STAGING_PASS" scp -o StrictHostKeyChecking=no /dev/stdin $UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP:tmp/debug-fix-attendees.php << 'PHPEOF'
|
|
<?php
|
|
require_once('wp-load.php');
|
|
|
|
echo "=== Debug and Fix Attendees for Revenue Calculation ===\n";
|
|
|
|
// Get test_trainer user
|
|
$test_trainer = get_user_by('login', 'test_trainer');
|
|
if (!$test_trainer) {
|
|
die("test_trainer user not found.\n");
|
|
}
|
|
|
|
$trainer_id = $test_trainer->ID;
|
|
echo "Using trainer ID: {$trainer_id}\n";
|
|
|
|
// First, let's check existing attendees
|
|
echo "\n=== 1. Current Attendees Overview ===\n";
|
|
global $wpdb;
|
|
|
|
$attendees = $wpdb->get_results($wpdb->prepare(
|
|
"SELECT
|
|
p.ID as attendee_id,
|
|
p.post_parent as event_id,
|
|
p.post_title,
|
|
pm_event.meta_value as linked_event,
|
|
pm_price1.meta_value as tec_commerce_price,
|
|
pm_price2.meta_value as tpp_ticket_price,
|
|
pm_price3.meta_value as tpp_price,
|
|
pm_price4.meta_value as paid_price
|
|
FROM {$wpdb->posts} p
|
|
LEFT JOIN {$wpdb->postmeta} pm_event ON p.ID = pm_event.post_id AND pm_event.meta_key IN ('_tec_tickets_commerce_event', '_tribe_tpp_event')
|
|
LEFT JOIN {$wpdb->postmeta} pm_price1 ON p.ID = pm_price1.post_id AND pm_price1.meta_key = '_tec_tickets_commerce_price_paid'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price2 ON p.ID = pm_price2.post_id AND pm_price2.meta_key = '_tribe_tpp_ticket_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price3 ON p.ID = pm_price3.post_id AND pm_price3.meta_key = '_tribe_tpp_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price4 ON p.ID = pm_price4.post_id AND pm_price4.meta_key = '_paid_price'
|
|
WHERE p.post_type IN ('tec_tc_attendee', 'tribe_tpp_attendees')
|
|
AND p.post_parent IN (
|
|
SELECT ID FROM {$wpdb->posts}
|
|
WHERE post_type = 'tribe_events'
|
|
AND post_author = %d
|
|
)
|
|
ORDER BY p.post_parent, p.ID",
|
|
$trainer_id
|
|
));
|
|
|
|
echo "Found " . count($attendees) . " attendees:\n";
|
|
foreach ($attendees as $attendee) {
|
|
echo " - ID: {$attendee->attendee_id}, Event: {$attendee->event_id}, TEC Price: {$attendee->tec_commerce_price}, TPP Price: {$attendee->tpp_ticket_price}\n";
|
|
}
|
|
|
|
// Now let's add price metadata to existing attendees
|
|
echo "\n=== 2. Adding Price Metadata to Attendees ===\n";
|
|
$ticket_price = 95.00; // Standard ticket price for HVAC training
|
|
|
|
foreach ($attendees as $attendee) {
|
|
$attendee_id = $attendee->attendee_id;
|
|
$event_id = $attendee->event_id;
|
|
|
|
// Force add price metadata regardless of current state (to fix the revenue issue)
|
|
$post = get_post($attendee_id);
|
|
|
|
if ($post->post_type === 'tribe_tpp_attendees') {
|
|
// For Tribe PayPal attendees, set multiple price fields
|
|
update_post_meta($attendee_id, '_tribe_tpp_ticket_price', $ticket_price);
|
|
update_post_meta($attendee_id, '_tribe_tpp_price', $ticket_price);
|
|
update_post_meta($attendee_id, '_paid_price', $ticket_price);
|
|
echo " ✓ FORCE ADDED TPP price metadata ($ticket_price) to attendee ID: {$attendee_id}\n";
|
|
} elseif ($post->post_type === 'tec_tc_attendee') {
|
|
// For TEC Commerce attendees
|
|
update_post_meta($attendee_id, '_tec_tickets_commerce_price_paid', $ticket_price);
|
|
echo " ✓ FORCE ADDED TEC Commerce price metadata ($ticket_price) to attendee ID: {$attendee_id}\n";
|
|
} else {
|
|
echo " - Unknown post type: {$post->post_type} for attendee ID: {$attendee_id}\n";
|
|
}
|
|
}
|
|
|
|
// Test the revenue calculation
|
|
echo "\n=== 3. Testing Revenue Calculation ===\n";
|
|
require_once ABSPATH . 'wp-content/plugins/hvac-community-events/includes/class-hvac-dashboard-data.php';
|
|
$dashboard_data = new HVAC_Dashboard_Data($trainer_id);
|
|
|
|
$total_revenue = $dashboard_data->get_total_revenue();
|
|
$total_tickets = $dashboard_data->get_total_tickets_sold();
|
|
|
|
echo "Total Tickets Sold: {$total_tickets}\n";
|
|
echo "Total Revenue: $" . number_format($total_revenue, 2) . "\n";
|
|
|
|
if ($total_revenue > 0) {
|
|
echo "✅ SUCCESS: Revenue calculation is working!\n";
|
|
} else {
|
|
echo "❌ ISSUE: Revenue is still $0.00\n";
|
|
|
|
// Let's debug the revenue query
|
|
echo "\n=== Revenue Debug Query ===\n";
|
|
|
|
// TEC Commerce revenue
|
|
$tec_commerce_revenue = $wpdb->get_var($wpdb->prepare(
|
|
"SELECT SUM(CAST(pm_price.meta_value AS DECIMAL(10,2)))
|
|
FROM {$wpdb->posts} p
|
|
INNER JOIN {$wpdb->postmeta} pm_event ON p.ID = pm_event.post_id AND pm_event.meta_key = '_tec_tickets_commerce_event'
|
|
INNER JOIN {$wpdb->postmeta} pm_price ON p.ID = pm_price.post_id AND pm_price.meta_key = '_tec_tickets_commerce_price_paid'
|
|
WHERE p.post_type = %s
|
|
AND pm_event.meta_value IN (
|
|
SELECT ID FROM {$wpdb->posts}
|
|
WHERE post_type = %s
|
|
AND post_author = %d
|
|
AND post_status IN ('publish', 'private')
|
|
)",
|
|
'tec_tc_attendee',
|
|
'tribe_events',
|
|
$trainer_id
|
|
));
|
|
|
|
// Legacy Tribe PayPal revenue
|
|
$tribe_tpp_revenue = $wpdb->get_var($wpdb->prepare(
|
|
"SELECT SUM(
|
|
CASE
|
|
WHEN pm_price1.meta_value IS NOT NULL THEN CAST(pm_price1.meta_value AS DECIMAL(10,2))
|
|
WHEN pm_price2.meta_value IS NOT NULL THEN CAST(pm_price2.meta_value AS DECIMAL(10,2))
|
|
WHEN pm_price3.meta_value IS NOT NULL THEN CAST(pm_price3.meta_value AS DECIMAL(10,2))
|
|
ELSE 0
|
|
END
|
|
)
|
|
FROM {$wpdb->posts} p
|
|
INNER JOIN {$wpdb->postmeta} pm_event ON p.ID = pm_event.post_id AND pm_event.meta_key = '_tribe_tpp_event'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price1 ON p.ID = pm_price1.post_id AND pm_price1.meta_key = '_tribe_tpp_ticket_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price2 ON p.ID = pm_price2.post_id AND pm_price2.meta_key = '_paid_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price3 ON p.ID = pm_price3.post_id AND pm_price3.meta_key = '_tribe_tpp_price'
|
|
WHERE p.post_type = %s
|
|
AND pm_event.meta_value IN (
|
|
SELECT ID FROM {$wpdb->posts}
|
|
WHERE post_type = %s
|
|
AND post_author = %d
|
|
AND post_status IN ('publish', 'private')
|
|
)",
|
|
'tribe_tpp_attendees',
|
|
'tribe_events',
|
|
$trainer_id
|
|
));
|
|
|
|
echo "TEC Commerce Revenue: $" . number_format(($tec_commerce_revenue ?: 0), 2) . "\n";
|
|
echo "Tribe TPP Revenue: $" . number_format(($tribe_tpp_revenue ?: 0), 2) . "\n";
|
|
}
|
|
|
|
echo "\n=== Final Verification ===\n";
|
|
// Re-check attendees after adding price data
|
|
$updated_attendees = $wpdb->get_results($wpdb->prepare(
|
|
"SELECT
|
|
p.ID as attendee_id,
|
|
p.post_parent as event_id,
|
|
pm_price1.meta_value as tec_commerce_price,
|
|
pm_price2.meta_value as tpp_ticket_price,
|
|
pm_price3.meta_value as tpp_price,
|
|
pm_price4.meta_value as paid_price
|
|
FROM {$wpdb->posts} p
|
|
LEFT JOIN {$wpdb->postmeta} pm_price1 ON p.ID = pm_price1.post_id AND pm_price1.meta_key = '_tec_tickets_commerce_price_paid'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price2 ON p.ID = pm_price2.post_id AND pm_price2.meta_key = '_tribe_tpp_ticket_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price3 ON p.ID = pm_price3.post_id AND pm_price3.meta_key = '_tribe_tpp_price'
|
|
LEFT JOIN {$wpdb->postmeta} pm_price4 ON p.ID = pm_price4.post_id AND pm_price4.meta_key = '_paid_price'
|
|
WHERE p.post_type IN ('tec_tc_attendee', 'tribe_tpp_attendees')
|
|
AND p.post_parent IN (
|
|
SELECT ID FROM {$wpdb->posts}
|
|
WHERE post_type = 'tribe_events'
|
|
AND post_author = %d
|
|
)
|
|
ORDER BY p.post_parent, p.ID",
|
|
$trainer_id
|
|
));
|
|
|
|
echo "Attendees with price data:\n";
|
|
foreach ($updated_attendees as $attendee) {
|
|
$has_price = !empty($attendee->tec_commerce_price) || !empty($attendee->tpp_ticket_price) || !empty($attendee->tpp_price) || !empty($attendee->paid_price);
|
|
$price_display = $attendee->tec_commerce_price ?: ($attendee->tpp_ticket_price ?: ($attendee->tpp_price ?: ($attendee->paid_price ?: 'NO PRICE')));
|
|
echo " - Attendee ID: {$attendee->attendee_id}, Event: {$attendee->event_id}, Price: {$price_display}\n";
|
|
}
|
|
|
|
echo "\n✅ Debug and fix completed!\n";
|
|
?>
|
|
PHPEOF
|
|
|
|
# Execute the script on the server
|
|
echo "Executing debug and fix script..."
|
|
sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no $UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP "cd $UPSKILL_STAGING_PATH && php ../tmp/debug-fix-attendees.php && rm ../tmp/debug-fix-attendees.php"
|
|
|
|
echo ""
|
|
echo "✅ Debug and fix completed!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Check dashboard - revenue should now show correct amount"
|
|
echo "2. Dashboard key metrics should display in a row instead of column"
|
|
echo "3. All formatting issues should be resolved" |