- Add comprehensive Training Leads system for HVAC trainers * New /trainer/training-leads/ page with tabular contact submission display * HVAC_Training_Leads class with AJAX status updates and filtering * Empty state messaging and profile sharing CTA * Database integration with existing contact forms system - Restructure trainer navigation menu for better UX * Rename "Customize" to "Profile" with logical groupings * Move "Logout" under "Profile" submenu * Change "Personal Profile" to "Trainer Profile" * Add "Training Leads" under Profile section * Update help menu to show only question mark icon positioned far right - Enhance documentation system * Fix /trainer/documentation/ page styling and navigation integration * Update content to reflect current platform features * Add Training Leads documentation and navigation guide * Implement proper WordPress template structure - Update user management * Change joe@upskillhvac.com display name to "Joe Medosch" * Assign Joe as author of measureQuick headquarters venue * Assign Joe as author of measureQuick and Upskill HVAC organizers 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			295 lines
		
	
	
		
			No EOL
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			295 lines
		
	
	
		
			No EOL
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Test Data Verification Script
 | |
| # Checks what test data exists in staging environment
 | |
| # Use this before/after cleanup to verify the process
 | |
| 
 | |
| source .env
 | |
| 
 | |
| echo "========================================="
 | |
| echo "🔍 TEST DATA VERIFICATION"
 | |
| echo "========================================="
 | |
| echo "Target: $UPSKILL_STAGING_IP"
 | |
| echo ""
 | |
| 
 | |
| # Upload and execute verification PHP script
 | |
| sshpass -p "$UPSKILL_STAGING_PASS" scp -o StrictHostKeyChecking=no /dev/stdin $UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP:tmp/verify-test-data.php << 'PHPEOF'
 | |
| <?php
 | |
| /**
 | |
|  * Test Data Verification Script
 | |
|  * 
 | |
|  * Checks for presence of test data in the system
 | |
|  */
 | |
| 
 | |
| require_once('wp-load.php');
 | |
| 
 | |
| echo "=== Test Data Verification Report ===\n\n";
 | |
| 
 | |
| // 1. CHECK TEST USERS
 | |
| echo "👥 TEST USERS:\n";
 | |
| echo "================\n";
 | |
| 
 | |
| $test_users = [
 | |
|     'test_trainer' => 'login',
 | |
|     'joemedosch' => 'login', 
 | |
|     'JoeMedosch@gmail.com' => 'email'
 | |
| ];
 | |
| 
 | |
| $found_users = 0;
 | |
| foreach ($test_users as $identifier => $type) {
 | |
|     $user = ($type === 'email') ? get_user_by('email', $identifier) : get_user_by('login', $identifier);
 | |
|     
 | |
|     if ($user) {
 | |
|         echo "✅ Found: {$user->user_login} ({$user->user_email}) - Roles: " . implode(', ', $user->roles) . "\n";
 | |
|         $found_users++;
 | |
|     } else {
 | |
|         echo "❌ Not found: {$identifier}\n";
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Check joe@measurequick.com for HVAC roles
 | |
| $joe_mq = get_user_by('email', 'joe@measurequick.com');
 | |
| if ($joe_mq) {
 | |
|     $hvac_roles = array_intersect(['hvac_trainer', 'hvac_master_trainer'], $joe_mq->roles);
 | |
|     if (!empty($hvac_roles)) {
 | |
|         echo "⚠️  joe@measurequick.com has HVAC roles: " . implode(', ', $hvac_roles) . "\n";
 | |
|         $found_users++;
 | |
|     } else {
 | |
|         echo "✅ joe@measurequick.com has no HVAC roles\n";
 | |
|     }
 | |
| } else {
 | |
|     echo "❌ joe@measurequick.com not found\n";
 | |
| }
 | |
| 
 | |
| echo "\nTotal test users found: {$found_users}\n\n";
 | |
| 
 | |
| // 2. CHECK TEST EVENTS
 | |
| echo "📅 TEST EVENTS:\n";
 | |
| echo "================\n";
 | |
| 
 | |
| $test_event_patterns = [
 | |
|     'HVAC System Diagnostics',
 | |
|     'Commercial Refrigeration',
 | |
|     'Energy Efficient HVAC',
 | |
|     'Advanced HVAC Troubleshooting',
 | |
|     'HVAC Energy Efficiency Workshop',
 | |
|     'Commercial Refrigeration Systems',
 | |
|     'Residential HVAC Installation Best Practices',
 | |
|     'HVAC Controls and Automation'
 | |
| ];
 | |
| 
 | |
| $all_events = get_posts([
 | |
|     'post_type' => 'tribe_events',
 | |
|     'post_status' => 'any',
 | |
|     'posts_per_page' => -1
 | |
| ]);
 | |
| 
 | |
| $found_test_events = 0;
 | |
| $recent_events = 0;
 | |
| $six_months_ago = strtotime('-6 months');
 | |
| 
 | |
| foreach ($all_events as $event) {
 | |
|     $is_test_event = false;
 | |
|     
 | |
|     // Check against known test patterns
 | |
|     foreach ($test_event_patterns as $pattern) {
 | |
|         if (stripos($event->post_title, $pattern) !== false) {
 | |
|             $is_test_event = true;
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // Check for test-like indicators
 | |
|     $test_indicators = ['test', 'training center', 'example', 'dummy', 'sample'];
 | |
|     $event_content = strtolower($event->post_title . ' ' . $event->post_content);
 | |
|     
 | |
|     foreach ($test_indicators as $indicator) {
 | |
|         if (strpos($event_content, $indicator) !== false) {
 | |
|             $is_test_event = true;
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     if ($is_test_event) {
 | |
|         $event_date = date('Y-m-d', strtotime($event->post_date));
 | |
|         echo "⚠️  Test Event: '{$event->post_title}' (ID: {$event->ID}, Created: {$event_date})\n";
 | |
|         $found_test_events++;
 | |
|     }
 | |
|     
 | |
|     // Count recent events (created in last 6 months)
 | |
|     if (strtotime($event->post_date) > $six_months_ago) {
 | |
|         $recent_events++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| echo "\nTotal test events found: {$found_test_events}\n";
 | |
| echo "Total recent events (last 6 months): {$recent_events}\n\n";
 | |
| 
 | |
| // 3. CHECK TEST ATTENDEES
 | |
| echo "🎟️  TEST ATTENDEES:\n";
 | |
| echo "===================\n";
 | |
| 
 | |
| $test_attendees = get_posts([
 | |
|     'post_type' => 'tribe_tpp_attendees',
 | |
|     'posts_per_page' => -1,
 | |
|     'meta_query' => [
 | |
|         'relation' => 'OR',
 | |
|         [
 | |
|             'key' => '_tribe_tickets_email',
 | |
|             'value' => '@example.com',
 | |
|             'compare' => 'LIKE'
 | |
|         ],
 | |
|         [
 | |
|             'key' => '_tribe_tickets_email',
 | |
|             'value' => 'ben@tealmaker.com',
 | |
|             'compare' => '='
 | |
|         ],
 | |
|         [
 | |
|             'key' => '_tribe_tickets_full_name',
 | |
|             'value' => 'Test',
 | |
|             'compare' => 'LIKE'
 | |
|         ]
 | |
|     ]
 | |
| ]);
 | |
| 
 | |
| echo "Test attendees found: " . count($test_attendees) . "\n";
 | |
| 
 | |
| if (count($test_attendees) > 0) {
 | |
|     echo "Sample test attendees:\n";
 | |
|     foreach (array_slice($test_attendees, 0, 5) as $attendee) {
 | |
|         $name = get_post_meta($attendee->ID, '_tribe_tickets_full_name', true);
 | |
|         $email = get_post_meta($attendee->ID, '_tribe_tickets_email', true);
 | |
|         $event_id = get_post_meta($attendee->ID, '_tribe_tpp_event', true);
 | |
|         $event = get_post($event_id);
 | |
|         $event_title = $event ? $event->post_title : 'Unknown Event';
 | |
|         
 | |
|         echo "  - {$name} ({$email}) for '{$event_title}'\n";
 | |
|     }
 | |
|     if (count($test_attendees) > 5) {
 | |
|         echo "  ... and " . (count($test_attendees) - 5) . " more\n";
 | |
|     }
 | |
| }
 | |
| echo "\n";
 | |
| 
 | |
| // 4. CHECK TEST CERTIFICATES
 | |
| echo "🏆 TEST CERTIFICATES:\n";
 | |
| echo "=====================\n";
 | |
| 
 | |
| if (class_exists('HVAC_Certificate_Manager')) {
 | |
|     global $wpdb;
 | |
|     $certificate_table = $wpdb->prefix . 'hvac_certificates';
 | |
|     
 | |
|     if ($wpdb->get_var("SHOW TABLES LIKE '$certificate_table'") === $certificate_table) {
 | |
|         $total_certificates = $wpdb->get_var("SELECT COUNT(*) FROM {$certificate_table}");
 | |
|         echo "Total certificates in database: {$total_certificates}\n";
 | |
|         
 | |
|         // Check for test certificate files
 | |
|         $test_certificates = $wpdb->get_results("
 | |
|             SELECT * FROM {$certificate_table} 
 | |
|             WHERE file_path LIKE '%test%' 
 | |
|                OR file_path LIKE '%example%' 
 | |
|                OR file_path LIKE '%demo%'
 | |
|         ");
 | |
|         
 | |
|         echo "Test certificates found: " . count($test_certificates) . "\n";
 | |
|         
 | |
|         // Check for orphaned certificates (event doesn't exist)
 | |
|         $orphaned_certificates = $wpdb->get_results("
 | |
|             SELECT c.* FROM {$certificate_table} c
 | |
|             LEFT JOIN {$wpdb->posts} p ON c.event_id = p.ID
 | |
|             WHERE p.ID IS NULL
 | |
|         ");
 | |
|         
 | |
|         echo "Orphaned certificates (event deleted): " . count($orphaned_certificates) . "\n";
 | |
|     } else {
 | |
|         echo "Certificate table does not exist\n";
 | |
|     }
 | |
| } else {
 | |
|     echo "HVAC Certificate Manager not available\n";
 | |
| }
 | |
| echo "\n";
 | |
| 
 | |
| // 5. CHECK TEST VENUES AND ORGANIZERS
 | |
| echo "🏢 TEST VENUES & ORGANIZERS:\n";
 | |
| echo "=============================\n";
 | |
| 
 | |
| $test_venues = get_posts([
 | |
|     'post_type' => 'tribe_venue',
 | |
|     'posts_per_page' => -1,
 | |
| ]);
 | |
| 
 | |
| $test_venue_count = 0;
 | |
| foreach ($test_venues as $venue) {
 | |
|     $test_indicators = ['training center', 'test', 'example', 'demo'];
 | |
|     $venue_content = strtolower($venue->post_title . ' ' . $venue->post_content);
 | |
|     
 | |
|     foreach ($test_indicators as $indicator) {
 | |
|         if (strpos($venue_content, $indicator) !== false) {
 | |
|             echo "⚠️  Test Venue: '{$venue->post_title}' (ID: {$venue->ID})\n";
 | |
|             $test_venue_count++;
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| $test_organizers = get_posts([
 | |
|     'post_type' => 'tribe_organizer',
 | |
|     'posts_per_page' => -1,
 | |
| ]);
 | |
| 
 | |
| $test_organizer_count = 0;
 | |
| foreach ($test_organizers as $organizer) {
 | |
|     $test_indicators = ['test', 'example', 'demo', 'training', 'sample'];
 | |
|     $organizer_content = strtolower($organizer->post_title . ' ' . $organizer->post_content);
 | |
|     
 | |
|     foreach ($test_indicators as $indicator) {
 | |
|         if (strpos($organizer_content, $indicator) !== false) {
 | |
|             echo "⚠️  Test Organizer: '{$organizer->post_title}' (ID: {$organizer->ID})\n";
 | |
|             $test_organizer_count++;
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| echo "Test venues found: {$test_venue_count}\n";
 | |
| echo "Test organizers found: {$test_organizer_count}\n\n";
 | |
| 
 | |
| // SUMMARY
 | |
| echo "========================================\n";
 | |
| echo "📊 VERIFICATION SUMMARY\n";
 | |
| echo "========================================\n";
 | |
| echo "Test users: {$found_users}\n";
 | |
| echo "Test events: {$found_test_events}\n";
 | |
| echo "Test attendees: " . count($test_attendees) . "\n";
 | |
| echo "Test venues: {$test_venue_count}\n";
 | |
| echo "Test organizers: {$test_organizer_count}\n";
 | |
| 
 | |
| if (class_exists('HVAC_Certificate_Manager') && isset($test_certificates)) {
 | |
|     echo "Test certificates: " . count($test_certificates) . "\n";
 | |
|     echo "Orphaned certificates: " . count($orphaned_certificates) . "\n";
 | |
| }
 | |
| 
 | |
| $total_test_items = $found_users + $found_test_events + count($test_attendees) + $test_venue_count + $test_organizer_count;
 | |
| if (isset($test_certificates)) {
 | |
|     $total_test_items += count($test_certificates);
 | |
| }
 | |
| 
 | |
| echo "========================================\n";
 | |
| 
 | |
| if ($total_test_items > 0) {
 | |
|     echo "⚠️  TEST DATA FOUND: {$total_test_items} items need cleanup\n";
 | |
|     echo "Run scripts/cleanup-test-data.sh to clean up before production.\n";
 | |
| } else {
 | |
|     echo "✅ NO TEST DATA FOUND: Ready for production deployment!\n";
 | |
| }
 | |
| 
 | |
| echo "========================================\n";
 | |
| ?>
 | |
| PHPEOF
 | |
| 
 | |
| # Execute the verification script on the server
 | |
| echo "Executing verification script on staging server..."
 | |
| sshpass -p "$UPSKILL_STAGING_PASS" ssh -o StrictHostKeyChecking=no $UPSKILL_STAGING_SSH_USER@$UPSKILL_STAGING_IP "cd $UPSKILL_STAGING_PATH && php ../tmp/verify-test-data.php && rm ../tmp/verify-test-data.php"
 | |
| 
 | |
| echo ""
 | |
| echo "✅ Test data verification completed!" |