- Fixed dashboard data class to use consistent post_author queries instead of mixed _EventOrganizerID meta queries - This resolves the issue where dashboard showed 18 events but 0 tickets/revenue - Added WordPress API credentials to environment (.env) - Created comprehensive API debugging utilities (wp-api-debug.sh, wp-api-fix.sh, api-only-debug.sh) - Enhanced test and deployment suite with WordPress REST API capabilities - Root cause: get_total_tickets_sold() and get_total_revenue() were using _EventOrganizerID while other methods used post_author 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
167 lines
No EOL
5.7 KiB
Bash
Executable file
167 lines
No EOL
5.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# API-Only Debug Utility (No SSH required)
|
|
# Uses only WordPress REST API for debugging
|
|
|
|
set -e
|
|
|
|
# Load environment variables
|
|
if [ -f "../.env" ]; then
|
|
source ../.env
|
|
elif [ -f ".env" ]; then
|
|
source .env
|
|
else
|
|
echo "Error: .env file not found"
|
|
exit 1
|
|
fi
|
|
|
|
# API Configuration
|
|
API_BASE="${WP_API_BASE_URL}"
|
|
USERNAME="${WP_API_USERNAME}"
|
|
PASSWORD="${WP_API_PASSWORD}"
|
|
|
|
# Function to make authenticated API calls
|
|
api_call() {
|
|
local endpoint="$1"
|
|
local method="${2:-GET}"
|
|
local data="$3"
|
|
|
|
local auth_header="Authorization: Basic $(echo -n "${USERNAME}:${PASSWORD}" | base64)"
|
|
|
|
if [ "$method" = "POST" ] && [ -n "$data" ]; then
|
|
curl -s -X "$method" \
|
|
-H "Content-Type: application/json" \
|
|
-H "$auth_header" \
|
|
-d "$data" \
|
|
"${API_BASE}${endpoint}" 2>/dev/null
|
|
else
|
|
curl -s -X "$method" \
|
|
-H "$auth_header" \
|
|
"${API_BASE}${endpoint}" 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
echo "=== API-Only Dashboard Debug ==="
|
|
echo "Base URL: $API_BASE"
|
|
echo ""
|
|
|
|
# Test API connectivity
|
|
echo "1. Testing API connectivity..."
|
|
api_result=$(api_call "/wp-json/wp/v2/posts?per_page=1")
|
|
if echo "$api_result" | jq -e '.[0].id' > /dev/null 2>&1; then
|
|
echo "✓ API connection successful"
|
|
else
|
|
echo "✗ API connection failed"
|
|
echo "Response: $api_result"
|
|
exit 1
|
|
fi
|
|
|
|
# Get test_trainer user
|
|
echo ""
|
|
echo "2. Getting test_trainer user..."
|
|
user_data=$(api_call "/wp-json/wp/v2/users?search=test_trainer")
|
|
user_id=$(echo "$user_data" | jq -r '.[0].id // empty' 2>/dev/null)
|
|
|
|
if [ -n "$user_id" ] && [ "$user_id" != "null" ] && [ "$user_id" != "" ]; then
|
|
echo "✓ Found test_trainer user: ID $user_id"
|
|
user_name=$(echo "$user_data" | jq -r '.[0].name' 2>/dev/null)
|
|
user_email=$(echo "$user_data" | jq -r '.[0].email' 2>/dev/null)
|
|
echo " Name: $user_name"
|
|
echo " Email: $user_email"
|
|
else
|
|
echo "✗ test_trainer user not found"
|
|
echo "User data response: $user_data"
|
|
exit 1
|
|
fi
|
|
|
|
# Get ALL events first
|
|
echo ""
|
|
echo "3. Getting all events for comparison..."
|
|
all_events=$(api_call "/wp-json/tribe/events/v1/events?per_page=100")
|
|
all_events_count=$(echo "$all_events" | jq -r 'length // 0' 2>/dev/null)
|
|
echo "✓ Total events in system: $all_events_count"
|
|
|
|
# Get events by test_trainer
|
|
echo ""
|
|
echo "4. Getting events for test_trainer (author=$user_id)..."
|
|
events_data=$(api_call "/wp-json/tribe/events/v1/events?author=${user_id}&per_page=100")
|
|
events_count=$(echo "$events_data" | jq -r 'length // 0' 2>/dev/null)
|
|
|
|
echo "✓ Found $events_count events authored by test_trainer"
|
|
|
|
if [ "$events_count" -gt 0 ]; then
|
|
echo ""
|
|
echo "Event details:"
|
|
echo "$events_data" | jq -r '.[] | " ID: \(.id) - \(.title.rendered) - Status: \(.status)"' 2>/dev/null
|
|
|
|
# Get first event for detailed analysis
|
|
first_event_id=$(echo "$events_data" | jq -r '.[0].id' 2>/dev/null)
|
|
echo ""
|
|
echo "5. Analyzing first event (ID: $first_event_id)..."
|
|
|
|
# Try to get tickets (this may fail if endpoint doesn't exist)
|
|
tickets_data=$(api_call "/wp-json/tribe/tickets/v1/tickets?event=${first_event_id}" 2>/dev/null)
|
|
tickets_count=$(echo "$tickets_data" | jq -r 'length // 0' 2>/dev/null)
|
|
|
|
if [ "$tickets_count" -gt 0 ]; then
|
|
echo " ✓ Tickets available: $tickets_count"
|
|
echo "$tickets_data" | jq -r '.[] | " Ticket ID: \(.id) - \(.name) - Price: \(.price)"' 2>/dev/null
|
|
else
|
|
echo " ✗ No tickets found or tickets API unavailable"
|
|
fi
|
|
|
|
# Try to get attendees
|
|
attendees_data=$(api_call "/wp-json/tribe/tickets/v1/attendees?event=${first_event_id}" 2>/dev/null)
|
|
attendees_count=$(echo "$attendees_data" | jq -r 'length // 0' 2>/dev/null)
|
|
|
|
if [ "$attendees_count" -gt 0 ]; then
|
|
echo " ✓ Attendees: $attendees_count"
|
|
echo "$attendees_data" | jq -r '.[] | " Attendee ID: \(.id) - \(.holder_name) - Status: \(.checked_in)"' 2>/dev/null
|
|
else
|
|
echo " ✗ No attendees found or attendees API unavailable"
|
|
fi
|
|
else
|
|
echo ""
|
|
echo "⚠️ ISSUE IDENTIFIED: Dashboard shows 18 events total but 0 events for test_trainer"
|
|
echo " This explains why tickets sold and revenue show 0"
|
|
fi
|
|
|
|
# Analyze all events by author
|
|
echo ""
|
|
echo "6. Analyzing all events by author..."
|
|
if [ "$all_events_count" -gt 0 ]; then
|
|
authors=$(echo "$all_events" | jq -r '.[] | .author' 2>/dev/null | sort | uniq -c | sort -nr)
|
|
echo "Events by author ID:"
|
|
echo "$authors"
|
|
|
|
# Check if any events have test_trainer as organizer in meta
|
|
echo ""
|
|
echo "7. Checking for meta data inconsistencies..."
|
|
events_with_meta=$(echo "$all_events" | jq -r ".[] | select(.meta._EventOrganizerID == \"$user_id\") | .id" 2>/dev/null)
|
|
if [ -n "$events_with_meta" ]; then
|
|
echo "✓ Found events with test_trainer as organizer in meta:"
|
|
echo "$events_with_meta"
|
|
else
|
|
echo "✗ No events found with test_trainer as organizer in meta"
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Debug Summary ==="
|
|
echo "- Total events in system: $all_events_count"
|
|
echo "- Events authored by test_trainer: $events_count"
|
|
echo "- test_trainer user ID: $user_id"
|
|
|
|
if [ "$events_count" -eq 0 ] && [ "$all_events_count" -gt 0 ]; then
|
|
echo ""
|
|
echo "🔍 ROOT CAUSE IDENTIFIED:"
|
|
echo " Dashboard counts events using different queries than author-based queries"
|
|
echo " This suggests the dashboard may be using _EventOrganizerID meta instead of post_author"
|
|
echo " Or there's a data inconsistency where events exist but aren't properly attributed"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Next Steps ==="
|
|
echo "1. Check dashboard query logic in class-hvac-dashboard-data.php"
|
|
echo "2. Verify if events have _EventOrganizerID meta matching post_author"
|
|
echo "3. Fix data inconsistency or query logic" |