- Add explicit role setting in update_user() method for existing users - Fix issue where existing users kept their old roles during import - Update both CLI and web-based import scripts - Update documentation to reflect role handling improvement 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
4.1 KiB
4.1 KiB
HVAC Trainer CSV Import
This script imports trainer data from the Formidable Forms CSV export into the current HVAC Upskill platform user database.
Usage
Download the CSV File First
# Download the CSV file to your local machine
curl -O "https://upskill-staging.measurequick.com/wp-content/uploads/2025/06/250618120131_user-registration_formidable_entries.csv"
Run Import Script
# Dry run (shows what would be imported without making changes)
php scripts/import-trainer-csv.php 250618120131_user-registration_formidable_entries.csv --dry-run
# Actual import
php scripts/import-trainer-csv.php 250618120131_user-registration_formidable_entries.csv
What the Script Does
User Creation
- Creates new WordPress users with
hvac_trainerrole - Updates existing users and ensures they have
hvac_trainerrole - Maps CSV fields to current database schema
- Sets users as
approved(pre-approved from previous system) - Generates secure random passwords
- Sends welcome emails with password reset links
Field Mappings
| CSV Field | Database Field | Notes |
|---|---|---|
| Name | first_name | Direct mapping |
| Last Name | last_name | Direct mapping |
| Work Email | user_email, user_login | Primary identifier |
| Country | user_country | Direct mapping |
| State | user_state | Direct mapping |
| Personal Accreditations | personal_accreditation | Direct mapping |
| Company Name | business_name | Direct mapping |
| Company Website | business_website | Direct mapping |
| Phone Number | business_phone | Direct mapping |
| Trainer Details | application_details | Background info |
| Training Target | training_audience | Converted to array |
| Organization Type | business_type | Mapped values |
| Profile Picture | profile_image_id | URL mapping only |
Image Handling
- Does NOT download images from staging URLs
- Maps staging URLs (
upskill-staging.measurequick.com) to production URLs - Searches for existing attachments by URL
- Sets
profile_image_idif attachment found - Logs warnings for missing images
Additional Features
- Creates Events Calendar organizer profiles
- Creates venue profiles for businesses
- Handles duplicate users (updates existing)
- Comprehensive error handling and logging
- Import statistics summary
Important Notes
Before Running
- Backup your database - This script creates/modifies user data
- Run dry-run first - Always test with
--dry-runflag - Check production domain - Update the domain mapping in
map_profile_image()method if needed
Image URL Mapping
The script expects images to already exist on your current instance but with staging URLs in the CSV. It converts:
upskill-staging.measurequick.com → upskill.measurequick.com
Update line 169 in the script if your production domain is different.
Generated Passwords
- Users get randomly generated secure passwords
- Welcome emails include password reset links
- Users must reset passwords on first login
Organizer/Venue Creation
- Creates Events Calendar organizer profiles for each trainer
- Creates venue profiles for trainers with company names
- Links profiles to user accounts via meta fields
Troubleshooting
Common Issues
- Missing images: Check if images exist on current instance
- Duplicate usernames: Script auto-handles with numbered suffixes
- Email sending: Ensure WordPress mail is configured
- WordPress not found: Run from WordPress root directory
Error Messages
Could not load WordPress: Run from correct directoryCSV file not found: Check file pathCould not find attachment: Image doesn't exist on current instance
Output Example
Starting import from: trainers.csv
----------------------------------------
Creating new user: trainer1@example.com
Creating new user: trainer2@example.com
Updating existing user: existing@example.com
Warning: Could not find attachment for URL: https://...
========================================
Import Complete!
========================================
Processed: 25
Created: 23
Updated: 2
Skipped: 0
Errors: 0