- 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>
223 lines
No EOL
6.8 KiB
Bash
Executable file
223 lines
No EOL
6.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# WordPress API Debug Utility
|
|
# Provides comprehensive debugging through WordPress REST API
|
|
|
|
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}"
|
|
else
|
|
curl -s -X "$method" \
|
|
-H "$auth_header" \
|
|
"${API_BASE}${endpoint}"
|
|
fi
|
|
}
|
|
|
|
# Function to get user by login
|
|
get_user_by_login() {
|
|
local login="$1"
|
|
api_call "/wp-json/wp/v2/users?search=${login}"
|
|
}
|
|
|
|
# Function to get events by author
|
|
get_events_by_author() {
|
|
local author_id="$1"
|
|
api_call "/wp-json/tribe/events/v1/events?author=${author_id}&per_page=100"
|
|
}
|
|
|
|
# Function to get tickets by event
|
|
get_tickets_by_event() {
|
|
local event_id="$1"
|
|
api_call "/wp-json/tribe/tickets/v1/tickets?event=${event_id}"
|
|
}
|
|
|
|
# Function to get attendees by event
|
|
get_attendees_by_event() {
|
|
local event_id="$1"
|
|
api_call "/wp-json/tribe/tickets/v1/attendees?event=${event_id}"
|
|
}
|
|
|
|
# Function to debug dashboard data issues
|
|
debug_dashboard_data() {
|
|
echo "=== WordPress API Dashboard Debug ==="
|
|
echo "Base URL: $API_BASE"
|
|
echo "Username: $USERNAME"
|
|
echo ""
|
|
|
|
# Test API connectivity
|
|
echo "1. Testing API connectivity..."
|
|
api_result=$(api_call "/wp-json/wp/v2/posts?per_page=1" 2>&1)
|
|
if echo "$api_result" | grep -q '"id"'; then
|
|
echo "✓ API connection successful"
|
|
else
|
|
echo "✗ API connection failed: $api_result"
|
|
return 1
|
|
fi
|
|
|
|
# Get test_trainer user
|
|
echo ""
|
|
echo "2. Getting test_trainer user..."
|
|
user_data=$(get_user_by_login "test_trainer")
|
|
user_id=$(echo "$user_data" | jq -r '.[0].id // empty')
|
|
|
|
if [ -n "$user_id" ] && [ "$user_id" != "null" ]; then
|
|
echo "✓ Found test_trainer user: ID $user_id"
|
|
user_name=$(echo "$user_data" | jq -r '.[0].name')
|
|
user_email=$(echo "$user_data" | jq -r '.[0].email')
|
|
echo " Name: $user_name"
|
|
echo " Email: $user_email"
|
|
else
|
|
echo "✗ test_trainer user not found"
|
|
return 1
|
|
fi
|
|
|
|
# Get events by author
|
|
echo ""
|
|
echo "3. Getting events for test_trainer..."
|
|
events_data=$(get_events_by_author "$user_id")
|
|
events_count=$(echo "$events_data" | jq -r 'length // 0')
|
|
|
|
echo "✓ Found $events_count events for test_trainer"
|
|
|
|
if [ "$events_count" -gt 0 ]; then
|
|
echo ""
|
|
echo "Event details:"
|
|
echo "$events_data" | jq -r '.[] | " ID: \(.id) - \(.title.rendered) - Status: \(.status)"'
|
|
|
|
# Get first event for detailed analysis
|
|
first_event_id=$(echo "$events_data" | jq -r '.[0].id')
|
|
echo ""
|
|
echo "4. Analyzing first event (ID: $first_event_id)..."
|
|
|
|
# Get tickets for this event
|
|
tickets_data=$(get_tickets_by_event "$first_event_id")
|
|
tickets_count=$(echo "$tickets_data" | jq -r 'length // 0')
|
|
echo " Tickets available: $tickets_count"
|
|
|
|
if [ "$tickets_count" -gt 0 ]; then
|
|
echo "$tickets_data" | jq -r '.[] | " Ticket ID: \(.id) - \(.name) - Price: \(.price)"'
|
|
fi
|
|
|
|
# Get attendees for this event
|
|
attendees_data=$(get_attendees_by_event "$first_event_id")
|
|
attendees_count=$(echo "$attendees_data" | jq -r 'length // 0')
|
|
echo " Attendees: $attendees_count"
|
|
|
|
if [ "$attendees_count" -gt 0 ]; then
|
|
echo "$attendees_data" | jq -r '.[] | " Attendee ID: \(.id) - \(.holder_name) - Status: \(.checked_in)"'
|
|
fi
|
|
fi
|
|
|
|
# Get all events to compare
|
|
echo ""
|
|
echo "5. 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')
|
|
echo "✓ Total events in system: $all_events_count"
|
|
|
|
# Analyze event authors
|
|
echo ""
|
|
echo "6. Analyzing event authors..."
|
|
authors=$(echo "$all_events" | jq -r '.[] | .author' | sort | uniq -c | sort -nr)
|
|
echo "Events by author ID:"
|
|
echo "$authors"
|
|
|
|
echo ""
|
|
echo "=== Debug Complete ==="
|
|
}
|
|
|
|
# Function to debug certificate system
|
|
debug_certificate_system() {
|
|
echo "=== Certificate System Debug ==="
|
|
|
|
# Custom API endpoint for certificates (if exists)
|
|
cert_result=$(api_call "/wp-json/hvac/v1/certificates" 2>&1)
|
|
if echo "$cert_result" | grep -q '"certificate_id"'; then
|
|
echo "✓ Certificate API endpoint working"
|
|
echo "$cert_result" | jq '.'
|
|
else
|
|
echo "✗ Certificate API endpoint not available or error: $cert_result"
|
|
fi
|
|
|
|
# Check for certificate custom post type
|
|
cert_posts=$(api_call "/wp-json/wp/v2/hvac_certificates?per_page=10" 2>&1)
|
|
if echo "$cert_posts" | grep -q '"id"'; then
|
|
echo "✓ Certificate posts found"
|
|
cert_count=$(echo "$cert_posts" | jq -r 'length')
|
|
echo " Certificate count: $cert_count"
|
|
else
|
|
echo "✗ No certificate posts or endpoint unavailable"
|
|
fi
|
|
}
|
|
|
|
# Function to fix dashboard data via API
|
|
fix_dashboard_data() {
|
|
echo "=== Attempting Dashboard Data Fix via API ==="
|
|
|
|
# This would require custom REST API endpoints in the plugin
|
|
# For now, we'll provide the framework
|
|
|
|
fix_result=$(api_call "/wp-json/hvac/v1/fix-dashboard-data" "POST" '{"action":"fix_author_inconsistency"}' 2>&1)
|
|
if echo "$fix_result" | grep -q '"success"'; then
|
|
echo "✓ Dashboard data fix applied successfully"
|
|
echo "$fix_result" | jq '.'
|
|
else
|
|
echo "✗ Dashboard data fix failed or endpoint unavailable: $fix_result"
|
|
fi
|
|
}
|
|
|
|
# Main execution
|
|
case "$1" in
|
|
"dashboard")
|
|
debug_dashboard_data
|
|
;;
|
|
"certificates")
|
|
debug_certificate_system
|
|
;;
|
|
"fix-dashboard")
|
|
fix_dashboard_data
|
|
;;
|
|
"all"|"")
|
|
debug_dashboard_data
|
|
echo ""
|
|
debug_certificate_system
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [dashboard|certificates|fix-dashboard|all]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " dashboard - Debug dashboard data issues"
|
|
echo " certificates - Debug certificate system"
|
|
echo " fix-dashboard - Attempt to fix dashboard data"
|
|
echo " all - Run all debug checks (default)"
|
|
exit 1
|
|
;;
|
|
esac |