upskill-event-manager/docs/TRAINER-CERTIFICATION-REFACTORING-PLAN.md
Ben c3e7fe9140 feat: comprehensive HVAC plugin development framework and modernization
## Major Enhancements

### 🏗️ Architecture & Infrastructure
- Implement comprehensive Docker testing infrastructure with hermetic environment
- Add Forgejo Actions CI/CD pipeline for automated deployments
- Create Page Object Model (POM) testing architecture reducing test duplication by 90%
- Establish security-first development patterns with input validation and output escaping

### 🧪 Testing Framework Modernization
- Migrate 146+ tests from 80 duplicate files to centralized architecture
- Add comprehensive E2E test suites for all user roles and workflows
- Implement WordPress error detection with automatic site health monitoring
- Create robust browser lifecycle management with proper cleanup

### 📚 Documentation & Guides
- Add comprehensive development best practices guide
- Create detailed administrator setup documentation
- Establish user guides for trainers and master trainers
- Document security incident reports and migration guides

### 🔧 Core Plugin Features
- Enhance trainer profile management with certification system
- Improve find trainer functionality with advanced filtering
- Strengthen master trainer area with content management
- Add comprehensive venue and organizer management

### 🛡️ Security & Reliability
- Implement security-first patterns throughout codebase
- Add comprehensive input validation and output escaping
- Create secure credential management system
- Establish proper WordPress role-based access control

### 🎯 WordPress Integration
- Strengthen singleton pattern implementation across all classes
- Enhance template hierarchy with proper WordPress integration
- Improve page manager with hierarchical URL structure
- Add comprehensive shortcode and menu system

### 🔍 Developer Experience
- Add extensive debugging and troubleshooting tools
- Create comprehensive test data seeding scripts
- Implement proper error handling and logging
- Establish consistent code patterns and standards

### 📊 Performance & Optimization
- Optimize database queries and caching strategies
- Improve asset loading and script management
- Enhance template rendering performance
- Streamline user experience across all interfaces

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-29 11:26:10 -03:00

321 lines
No EOL
9.9 KiB
Markdown

# Trainer Certification System Refactoring Plan
**Date:** August 28, 2025
**Status:** Planning Phase
**Scope:** Refactor single trainer certification fields to support multiple certifications per trainer
## Overview
Currently, the HVAC plugin stores trainer certifications as simple meta fields in trainer profiles:
- `certification_type` (single value)
- `certification_status` (single value)
- `date_certified` (single date)
- `certification_color` (auto-assigned)
**Goal:** Expand to support multiple certifications per trainer with proper tracking, expiration dates, and audit trails.
## Current State Analysis
### Existing Fields (in `trainer_profile` post type):
- `certification_type`: "Certified measureQuick Champion", "Certified measureQuick Trainer"
- `certification_status`: "Active", "Expired", "Suspended"
- `date_certified`: Single certification date
- `certification_color`: Color coding based on type
### Current Usage:
- Trainer profile displays show single certification
- Find-a-trainer filtering by certification type
- Color coding in UI based on certification level
## Proposed Solution: Custom Post Type Architecture
### 1. New Custom Post Type: `trainer_certification`
```php
register_post_type('trainer_certification', [
'public' => false,
'show_ui' => true,
'show_in_menu' => 'hvac-dashboard',
'supports' => ['title', 'editor'],
'capability_type' => 'hvac_certification',
'labels' => [
'name' => 'Trainer Certifications',
'singular_name' => 'Trainer Certification',
'menu_name' => 'Certifications'
]
]);
```
### 2. Meta Fields Structure
**Core Fields:**
- `_trainer_user_id` (BIGINT) - Links to trainer's WordPress user ID
- `_certification_type` (VARCHAR) - Type of certification
- `_certification_number` (VARCHAR) - Unique identifier (e.g., "MQT-2025-00123")
- `_issue_date` (DATE) - When certification was granted
- `_expiration_date` (DATE) - When certification expires (nullable)
- `_status` (ENUM) - active, expired, suspended, revoked
- `_issued_by` (BIGINT) - User ID of who granted the certification
**Administrative Fields:**
- `_renewal_date` (DATE) - Last renewal date
- `_renewal_count` (INT) - Number of times renewed
- `_revocation_reason` (TEXT) - Reason if revoked
- `_revoked_by` (BIGINT) - Who revoked it
- `_revoked_date` (DATETIME) - When revoked
**Future Expansion Fields:**
- `_certification_level` (VARCHAR) - Basic, Advanced, Master
- `_prerequisites_met` (LONGTEXT) - JSON array of prerequisite certifications
- `_continuing_education_hours` (INT) - CE hours associated
- `_certificate_file_url` (TEXT) - Link to certification document
### 3. Custom Taxonomy: `certification_category`
**Terms:**
- measureQuick (current focus)
- NATE (future)
- EPA (future)
- Manufacturer (future)
- Safety (future)
### 4. Database Schema
**Post Structure:**
- `post_title`: Descriptive name (e.g., "John Doe - measureQuick Certified Trainer")
- `post_content`: Notes about the certification
- `post_status`: draft (pending), publish (active), private (revoked)
- `post_author`: The trainer who holds the certification
## Implementation Plan
### Phase 1: Core Infrastructure (Week 1)
1. **Create Custom Post Type Registration**
- File: `includes/certifications/class-hvac-trainer-certification-manager.php`
- Register post type and taxonomies
- Set up meta field definitions
- Add admin UI customizations
2. **Database Setup**
- No custom tables needed (using WordPress post system)
- Add meta field validation
- Set up proper indexing for queries
3. **Admin Interface**
- Custom meta boxes for certification details
- List view with certification status filters
- Bulk actions for status changes
### Phase 2: Migration System (Week 1)
1. **Migration Script**
- File: `includes/certifications/class-hvac-certification-migrator.php`
- Convert existing certification fields to new post type
- Preserve historical data
- Create audit trail
2. **Backward Compatibility Layer**
- Maintain old meta field getters during transition
- Add deprecation notices
- Gradual migration approach
### Phase 3: Integration Updates (Week 2)
1. **Trainer Profile Manager Updates**
- Update display logic for multiple certifications
- Modify save/update routines
- Maintain color coding system
2. **Find-a-Trainer Integration**
- Update filtering to work with new structure
- Support multiple certification searches
- Performance optimization
3. **API Endpoints**
- REST API for certification management
- AJAX handlers for admin interface
- Export capabilities
### Phase 4: Advanced Features (Week 2-3)
1. **Expiration Management**
- Automated expiration checking
- Email notifications for expiring certifications
- Renewal workflow
2. **Audit Trail**
- Track all certification changes
- Admin reporting interface
- Export audit logs
3. **Bulk Operations**
- Bulk certification renewal
- Batch imports
- Mass status changes
## Migration Strategy
### Step 1: Data Preservation
```php
// Before migration, backup existing data
$existing_certifications = [];
$trainers = get_users(['role' => 'hvac_trainer']);
foreach ($trainers as $trainer) {
$profile = get_trainer_profile($trainer->ID);
if ($profile) {
$existing_certifications[$trainer->ID] = [
'type' => get_post_meta($profile->ID, 'certification_type', true),
'status' => get_post_meta($profile->ID, 'certification_status', true),
'date' => get_post_meta($profile->ID, 'date_certified', true),
'color' => get_post_meta($profile->ID, 'certification_color', true)
];
}
}
```
### Step 2: Create New Certification Records
```php
foreach ($existing_certifications as $trainer_id => $cert_data) {
if (!empty($cert_data['type'])) {
$certification_id = wp_insert_post([
'post_type' => 'trainer_certification',
'post_title' => get_user_meta($trainer_id, 'display_name', true) . ' - ' . $cert_data['type'],
'post_status' => 'publish',
'post_author' => $trainer_id
]);
update_post_meta($certification_id, '_trainer_user_id', $trainer_id);
update_post_meta($certification_id, '_certification_type', $cert_data['type']);
update_post_meta($certification_id, '_status', strtolower($cert_data['status']));
update_post_meta($certification_id, '_issue_date', $cert_data['date']);
update_post_meta($certification_id, '_issued_by', get_current_user_id());
}
}
```
### Step 3: Update Display Logic
- Modify trainer profile templates to show multiple certifications
- Update find-a-trainer filters
- Maintain existing color coding where possible
## API Design
### New Manager Class: `HVAC_Trainer_Certification_Manager`
**Key Methods:**
```php
class HVAC_Trainer_Certification_Manager {
// Core CRUD operations
public function create_certification($trainer_id, $type, $data = []);
public function get_trainer_certifications($trainer_id, $active_only = true);
public function update_certification_status($cert_id, $status, $reason = '');
public function renew_certification($cert_id, $new_expiration = null);
// Queries and reporting
public function get_expiring_certifications($days_ahead = 30);
public function get_certification_stats();
public function search_certifications($criteria = []);
// Migration and compatibility
public function migrate_legacy_certifications();
public function get_primary_certification($trainer_id); // Backward compatibility
}
```
## Security Considerations
1. **Capability Management**
- Only `hvac_master_trainer` and `administrator` can manage certifications
- Trainers can view their own certifications (read-only)
- Audit all certification changes
2. **Data Validation**
- Validate all input fields
- Prevent duplicate certifications
- Enforce business rules (expiration dates, etc.)
3. **Access Control**
- Nonce verification for all actions
- User permission checks
- Sanitize all inputs
## Testing Strategy
1. **Unit Tests**
- Test all CRUD operations
- Validate migration scripts
- Test search and filter functionality
2. **Integration Tests**
- Test trainer profile display
- Verify find-a-trainer filtering
- Check admin interface functionality
3. **Performance Tests**
- Query performance with large datasets
- Page load times with multiple certifications
- Search performance
## Future Enhancements
### Phase 5: Advanced Certification Types (Future)
1. **NATE Certifications**
- Multiple NATE specialty areas
- Expiration tracking
- CE hour requirements
2. **EPA Certifications**
- Section 608 certifications
- Universal, Type I, II, III tracking
- Renewal management
3. **Manufacturer Certifications**
- Brand-specific certifications
- Product line specializations
- Training completion tracking
### Phase 6: Reporting and Analytics (Future)
1. **Certification Dashboard**
- Real-time certification status
- Expiration alerts
- Trainer qualification reports
2. **Compliance Reporting**
- Export certification records
- Audit trail reports
- Regulatory compliance tracking
## Success Metrics
1. **Migration Success**
- 100% data preservation during migration
- Zero downtime during transition
- All existing functionality maintained
2. **Performance**
- Page load times remain under 2 seconds
- Search performance under 500ms
- Admin interface responsive
3. **User Experience**
- Intuitive admin interface
- Clear certification status displays
- Easy bulk operations
## Timeline
**Week 1:**
- Core infrastructure implementation
- Migration system development
- Basic admin interface
**Week 2:**
- Integration with existing systems
- Testing and bug fixes
- Performance optimization
**Week 3:**
- Advanced features
- Documentation
- Production deployment
---
*This document will be updated as implementation progresses.*