- 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>
		
			
				
	
	
		
			203 lines
		
	
	
		
			No EOL
		
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			No EOL
		
	
	
		
			6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # Manual Test Data Cleanup Script
 | |
| # Uses the same method as deploy-to-staging.sh
 | |
| 
 | |
| set -e
 | |
| 
 | |
| # Load environment variables
 | |
| if [ -f .env ]; then
 | |
|     export $(cat .env | sed 's/#.*//g' | xargs)
 | |
| fi
 | |
| 
 | |
| # Check required variables
 | |
| if [ -z "$UPSKILL_STAGING_IP" ] || [ -z "$UPSKILL_STAGING_SSH_USER" ]; then
 | |
|     echo "❌ Missing required environment variables"
 | |
|     echo "Required: UPSKILL_STAGING_IP, UPSKILL_STAGING_SSH_USER"
 | |
|     exit 1
 | |
| fi
 | |
| 
 | |
| STAGING_HOST="$UPSKILL_STAGING_IP"
 | |
| STAGING_USER="$UPSKILL_STAGING_SSH_USER"
 | |
| STAGING_PATH="$UPSKILL_STAGING_PATH"
 | |
| 
 | |
| echo "========================================="
 | |
| echo "🧹 MANUAL TEST DATA CLEANUP"
 | |
| echo "========================================="
 | |
| echo "Target: $STAGING_HOST"
 | |
| echo "User: $STAGING_USER"
 | |
| echo "Path: $STAGING_PATH"
 | |
| echo ""
 | |
| 
 | |
| # Create cleanup PHP script locally
 | |
| cat > cleanup-manual.php << 'EOF'
 | |
| <?php
 | |
| require_once('wp-load.php');
 | |
| 
 | |
| echo "=== Manual Cleanup Starting ===\n";
 | |
| 
 | |
| $deleted_items = 0;
 | |
| 
 | |
| // 1. Remove test users by login
 | |
| echo "Removing test users...\n";
 | |
| $test_users = ['test_trainer', 'joemedosch'];
 | |
| foreach ($test_users as $username) {
 | |
|     $user = get_user_by('login', $username);
 | |
|     if ($user) {
 | |
|         echo "  - Removing user: {$username} ({$user->user_email})\n";
 | |
|         wp_delete_user($user->ID, 1); // Reassign content to admin
 | |
|         $deleted_items++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Remove JoeMedosch by email
 | |
| $joe_user = get_user_by('email', 'JoeMedosch@gmail.com');
 | |
| if ($joe_user) {
 | |
|     echo "  - Removing JoeMedosch@gmail.com\n";
 | |
|     wp_delete_user($joe_user->ID, 1);
 | |
|     $deleted_items++;
 | |
| }
 | |
| 
 | |
| // Remove HVAC roles from joe@measurequick.com
 | |
| $joe_mq = get_user_by('email', 'joe@measurequick.com');
 | |
| if ($joe_mq) {
 | |
|     $user = new WP_User($joe_mq->ID);
 | |
|     $had_roles = false;
 | |
|     if (in_array('hvac_trainer', $user->roles)) {
 | |
|         $user->remove_role('hvac_trainer');
 | |
|         $had_roles = true;
 | |
|     }
 | |
|     if (in_array('hvac_master_trainer', $user->roles)) {
 | |
|         $user->remove_role('hvac_master_trainer');  
 | |
|         $had_roles = true;
 | |
|     }
 | |
|     if ($had_roles) {
 | |
|         echo "  - Removed HVAC roles from joe@measurequick.com\n";
 | |
|         $deleted_items++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // 2. Remove events with specific test patterns
 | |
| echo "Removing test events...\n";
 | |
| $test_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',
 | |
|     'AUER STEEL'
 | |
| ];
 | |
| 
 | |
| foreach ($test_patterns as $pattern) {
 | |
|     $events = get_posts([
 | |
|         'post_type' => 'tribe_events',
 | |
|         's' => $pattern,
 | |
|         'posts_per_page' => -1,
 | |
|         'post_status' => 'any'
 | |
|     ]);
 | |
|     
 | |
|     foreach ($events as $event) {
 | |
|         echo "  - Removing event: {$event->post_title} (ID: {$event->ID})\n";
 | |
|         
 | |
|         // Remove associated data first
 | |
|         $attendees = get_posts([
 | |
|             'post_type' => 'tribe_tpp_attendees',
 | |
|             'meta_query' => [['key' => '_tribe_tpp_event', 'value' => $event->ID]],
 | |
|             'posts_per_page' => -1
 | |
|         ]);
 | |
|         foreach ($attendees as $attendee) {
 | |
|             wp_delete_post($attendee->ID, true);
 | |
|         }
 | |
|         
 | |
|         $tickets = get_posts([
 | |
|             'post_type' => 'tribe_tpp_tickets', 
 | |
|             'meta_query' => [['key' => '_tribe_tpp_for_event', 'value' => $event->ID]],
 | |
|             'posts_per_page' => -1
 | |
|         ]);
 | |
|         foreach ($tickets as $ticket) {
 | |
|             wp_delete_post($ticket->ID, true);
 | |
|         }
 | |
|         
 | |
|         wp_delete_post($event->ID, true);
 | |
|         $deleted_items++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // 3. Remove attendees with @example.com emails
 | |
| echo "Removing test attendees...\n";
 | |
| $attendees = get_posts([
 | |
|     'post_type' => 'tribe_tpp_attendees',
 | |
|     'meta_query' => [['key' => '_tribe_tickets_email', 'value' => '@example.com', 'compare' => 'LIKE']], 
 | |
|     'posts_per_page' => -1
 | |
| ]);
 | |
| foreach ($attendees as $attendee) {
 | |
|     $email = get_post_meta($attendee->ID, '_tribe_tickets_email', true);
 | |
|     echo "  - Removing test attendee: {$attendee->post_title} ({$email})\n";
 | |
|     wp_delete_post($attendee->ID, true);
 | |
|     $deleted_items++;
 | |
| }
 | |
| 
 | |
| // 4. Remove clear test organizers and venues
 | |
| echo "Removing test organizers and venues...\n";
 | |
| $test_organizers = get_posts([
 | |
|     'post_type' => 'tribe_organizer',
 | |
|     'posts_per_page' => -1,
 | |
|     'post_status' => 'any'
 | |
| ]);
 | |
| foreach ($test_organizers as $organizer) {
 | |
|     $title_lower = strtolower($organizer->post_title);
 | |
|     if (strpos($title_lower, 'test') !== false || strpos($title_lower, 'bentest') !== false) {
 | |
|         echo "  - Removing test organizer: {$organizer->post_title}\n";
 | |
|         wp_delete_post($organizer->ID, true);
 | |
|         $deleted_items++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| $test_venues = get_posts([
 | |
|     'post_type' => 'tribe_venue',
 | |
|     'posts_per_page' => -1,
 | |
|     'post_status' => 'any'
 | |
| ]);
 | |
| foreach ($test_venues as $venue) {
 | |
|     $title_lower = strtolower($venue->post_title);
 | |
|     if (strpos($title_lower, 'training center') !== false || strpos($title_lower, 'test') !== false) {
 | |
|         echo "  - Removing test venue: {$venue->post_title}\n";
 | |
|         wp_delete_post($venue->ID, true);
 | |
|         $deleted_items++;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Clear caches
 | |
| wp_cache_flush();
 | |
| 
 | |
| echo "=== Manual Cleanup Complete ===\n";
 | |
| echo "Total items removed: {$deleted_items}\n";
 | |
| ?>
 | |
| EOF
 | |
| 
 | |
| # Try to upload and execute without sshpass first (key-based auth)
 | |
| echo "📤 Attempting to upload cleanup script..."
 | |
| if scp -o StrictHostKeyChecking=no cleanup-manual.php $STAGING_USER@$STAGING_HOST:tmp/ 2>/dev/null; then
 | |
|     echo "✅ Upload successful (key-based auth)"
 | |
|     echo "🧹 Executing cleanup..."
 | |
|     ssh -o StrictHostKeyChecking=no $STAGING_USER@$STAGING_HOST "cd $STAGING_PATH && php ../tmp/cleanup-manual.php && rm ../tmp/cleanup-manual.php"
 | |
| else
 | |
|     echo "❌ Key-based auth failed. Please run cleanup manually:"
 | |
|     echo ""
 | |
|     echo "1. Copy this content to a file on the server:"
 | |
|     echo "   File: cleanup-manual.php"
 | |
|     echo ""
 | |
|     cat cleanup-manual.php
 | |
|     echo ""
 | |
|     echo "2. Run: cd $STAGING_PATH && php cleanup-manual.php"
 | |
|     echo ""
 | |
| fi
 | |
| 
 | |
| # Clean up local file
 | |
| rm cleanup-manual.php
 | |
| 
 | |
| echo ""
 | |
| echo "✅ Manual cleanup process completed!" |