- 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>
118 lines
No EOL
4.1 KiB
Markdown
118 lines
No EOL
4.1 KiB
Markdown
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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_trainer` role
|
|
- Updates existing users and ensures they have `hvac_trainer` role
|
|
- 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_id` if 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
|
|
1. **Backup your database** - This script creates/modifies user data
|
|
2. **Run dry-run first** - Always test with `--dry-run` flag
|
|
3. **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
|
|
1. **Missing images**: Check if images exist on current instance
|
|
2. **Duplicate usernames**: Script auto-handles with numbered suffixes
|
|
3. **Email sending**: Ensure WordPress mail is configured
|
|
4. **WordPress not found**: Run from WordPress root directory
|
|
|
|
### Error Messages
|
|
- `Could not load WordPress`: Run from correct directory
|
|
- `CSV file not found`: Check file path
|
|
- `Could 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
|
|
``` |