## 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>
9.9 KiB
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 datecertification_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
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 certificationpost_status: draft (pending), publish (active), private (revoked)post_author: The trainer who holds the certification
Implementation Plan
Phase 1: Core Infrastructure (Week 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
- File:
-
Database Setup
- No custom tables needed (using WordPress post system)
- Add meta field validation
- Set up proper indexing for queries
-
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)
-
Migration Script
- File:
includes/certifications/class-hvac-certification-migrator.php - Convert existing certification fields to new post type
- Preserve historical data
- Create audit trail
- File:
-
Backward Compatibility Layer
- Maintain old meta field getters during transition
- Add deprecation notices
- Gradual migration approach
Phase 3: Integration Updates (Week 2)
-
Trainer Profile Manager Updates
- Update display logic for multiple certifications
- Modify save/update routines
- Maintain color coding system
-
Find-a-Trainer Integration
- Update filtering to work with new structure
- Support multiple certification searches
- Performance optimization
-
API Endpoints
- REST API for certification management
- AJAX handlers for admin interface
- Export capabilities
Phase 4: Advanced Features (Week 2-3)
-
Expiration Management
- Automated expiration checking
- Email notifications for expiring certifications
- Renewal workflow
-
Audit Trail
- Track all certification changes
- Admin reporting interface
- Export audit logs
-
Bulk Operations
- Bulk certification renewal
- Batch imports
- Mass status changes
Migration Strategy
Step 1: Data Preservation
// 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
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:
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
-
Capability Management
- Only
hvac_master_trainerandadministratorcan manage certifications - Trainers can view their own certifications (read-only)
- Audit all certification changes
- Only
-
Data Validation
- Validate all input fields
- Prevent duplicate certifications
- Enforce business rules (expiration dates, etc.)
-
Access Control
- Nonce verification for all actions
- User permission checks
- Sanitize all inputs
Testing Strategy
-
Unit Tests
- Test all CRUD operations
- Validate migration scripts
- Test search and filter functionality
-
Integration Tests
- Test trainer profile display
- Verify find-a-trainer filtering
- Check admin interface functionality
-
Performance Tests
- Query performance with large datasets
- Page load times with multiple certifications
- Search performance
Future Enhancements
Phase 5: Advanced Certification Types (Future)
-
NATE Certifications
- Multiple NATE specialty areas
- Expiration tracking
- CE hour requirements
-
EPA Certifications
- Section 608 certifications
- Universal, Type I, II, III tracking
- Renewal management
-
Manufacturer Certifications
- Brand-specific certifications
- Product line specializations
- Training completion tracking
Phase 6: Reporting and Analytics (Future)
-
Certification Dashboard
- Real-time certification status
- Expiration alerts
- Trainer qualification reports
-
Compliance Reporting
- Export certification records
- Audit trail reports
- Regulatory compliance tracking
Success Metrics
-
Migration Success
- 100% data preservation during migration
- Zero downtime during transition
- All existing functionality maintained
-
Performance
- Page load times remain under 2 seconds
- Search performance under 500ms
- Admin interface responsive
-
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.