## 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>
14 KiB
HVAC Community Events - Plugin Architecture
Overview
The HVAC Community Events plugin follows a modular, single-responsibility architecture designed for maintainability and extensibility.
Core Architecture Components
1. HVAC_Plugin (Main Controller)
- Location:
/includes/class-hvac-plugin.php - Purpose: Main plugin initialization and coordination
- Responsibilities:
- Plugin activation/deactivation
- Loading dependencies
- Initializing core components
- Hook registration
2. HVAC_Shortcodes
- Location:
/includes/class-hvac-shortcodes.php - Purpose: Centralized shortcode management
- Responsibilities:
- Register all plugin shortcodes
- Handle shortcode callbacks
- Manage shortcode attributes
- Key Shortcodes:
[hvac_dashboard]- Trainer dashboard[hvac_master_dashboard]- Master trainer dashboard[hvac_trainer_registration]- Registration form[hvac_community_login]- Login form[hvac_manage_event]- Event management[hvac_certificate_reports]- Certificate reports
3. HVAC_Scripts_Styles
- Location:
/includes/class-hvac-scripts-styles.php - Purpose: Asset management
- Responsibilities:
- Frontend script/style enqueuing
- Admin script/style enqueuing
- Script localization
- Cache busting
4. HVAC_Route_Manager
- Location:
/includes/class-hvac-route-manager.php - Purpose: URL routing and redirects
- Responsibilities:
- Legacy URL redirects
- Parent page redirects
- Custom rewrite rules
- Query var registration
5. HVAC_Template_Loader
- Location:
/includes/class-hvac-template-loader.php - Purpose: Template handling
- Responsibilities:
- Load custom templates
- Template hierarchy
- Theme compatibility
6. HVAC_Page_Manager
- Location:
/includes/class-hvac-page-manager.php - Purpose: WordPress page management
- Responsibilities:
- Create plugin pages
- Manage page hierarchy
- Set page templates
Feature Components
Authentication & Access Control
- HVAC_Access_Control: Page access restrictions
- HVAC_Roles: User role management
- HVAC_Trainer_Status: Trainer approval status
Event Management
- HVAC_Manage_Event: Event creation/editing
- HVAC_Event_Summary: Event details display
- Event_Form_Handler: Form processing
Dashboards
- HVAC_Dashboard: Trainer dashboard
- HVAC_Master_Dashboard: Master trainer dashboard
- HVAC_Dashboard_Data: Dashboard data processing
Certificate System
- HVAC_Certificate_Manager: Certificate generation
- HVAC_Certificate_Security: Security measures
- HVAC_Certificate_URL_Handler: URL processing
Venue Management
- HVAC_Venues: Venue CRUD operations (Singleton)
- Venue Database: TEC venue post type integration
- Venue Shortcodes: Display and management interfaces
- AJAX Handlers: Real-time venue operations
Organizer Management
- HVAC_Organizers: Organization profiles (Singleton)
- Logo Upload: Media library integration
- Organizer Database: TEC organizer post type
- Company Profiles: Business information management
Training Leads System
- HVAC_Training_Leads: Lead tracking (Singleton)
- Lead Forms: Contact request handling
- Status Management: Lead lifecycle tracking
- Reply Tracking: Communication history
Communication
- HVAC_Communication_Templates: Email templates
- HVAC_Communication_Scheduler: Automated emails
- HVAC_Announcements: System-wide notifications
- HVAC_Master_Content_Injector: Dynamic content injection
Design Patterns
Singleton Pattern
Used for classes that should have only one instance:
- HVAC_Plugin
- HVAC_Shortcodes
- HVAC_Scripts_Styles
- HVAC_Route_Manager
- HVAC_Help_System
- HVAC_Certificate_Security
- HVAC_Venues
- HVAC_Organizers
- HVAC_Training_Leads
- HVAC_Breadcrumbs
- HVAC_Master_Layout_Standardizer
Implementation Example:
class HVAC_Component {
private static $instance = null;
public static function instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
// Initialize component
add_action('init', array($this, 'init'));
}
}
### Hook-Based Architecture
WordPress actions and filters are used extensively:
- `init` - Component initialization
- `wp_enqueue_scripts` - Frontend assets
- `admin_enqueue_scripts` - Admin assets
- `template_redirect` - Access control
## File Structure
hvac-community-events/ ├── hvac-community-events.php # Main plugin file ├── includes/ │ ├── class-hvac-plugin.php # Main controller (Singleton) │ ├── class-hvac-shortcodes.php # Shortcode manager (Singleton) │ ├── class-hvac-scripts-styles.php # Asset manager (Singleton) │ ├── class-hvac-route-manager.php # URL routing (Singleton) │ ├── class-hvac-template-loader.php # Templates │ ├── class-hvac-template-router.php # Template routing │ ├── class-hvac-template-security.php # Template security │ ├── class-hvac-page-manager.php # Page creation │ ├── class-hvac-page-manager-v2.php # Enhanced page management │ ├── class-hvac-page-content-manager.php # Content injection │ ├── class-hvac-access-control.php # Access control │ ├── class-hvac-venues.php # Venue management (Singleton) │ ├── class-hvac-organizers.php # Organizer management (Singleton) │ ├── class-hvac-training-leads.php # Lead tracking (Singleton) │ ├── class-hvac-help-system.php # Help system (Singleton) │ ├── class-hvac-menu-system.php # Menu management │ ├── class-hvac-master-* # Master trainer components │ ├── admin/ # Admin classes │ ├── certificates/ # Certificate system │ ├── communication/ # Email system │ └── find-trainer/ # Public trainer directory ├── templates/ │ ├── page-.php # Page templates │ ├── template-.php # Layout templates │ └── status/ # Status templates ├── assets/ │ ├── css/ # Stylesheets │ ├── js/ # JavaScript │ └── images/ # Image assets ├── tests/ │ ├── docker-compose.test.yml # Docker test environment │ ├── fixtures/ # Test data │ └── e2e/ # End-to-end tests ├── scripts/ # Deployment & maintenance ├── lib/ # Third-party libraries └── docs/ # Documentation
## Initialization Flow
1. `hvac-community-events.php` loads
2. `HVAC_Plugin::instance()` singleton created
3. Core components initialized:
- HVAC_Shortcodes
- HVAC_Scripts_Styles
- HVAC_Route_Manager
- HVAC_Template_Loader
4. Feature components loaded
5. Hooks registered
6. Ready for requests
## Database Schema
### Custom Tables
#### hvac_certificates
```sql
CREATE TABLE {prefix}_hvac_certificates (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
certificate_number varchar(50) NOT NULL,
trainer_id bigint(20) unsigned NOT NULL,
event_id bigint(20) unsigned NOT NULL,
attendee_name varchar(255) NOT NULL,
attendee_email varchar(255) NOT NULL,
completion_date datetime NOT NULL,
created_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY certificate_number (certificate_number),
KEY trainer_id (trainer_id),
KEY event_id (event_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
hvac_training_leads
-- Training leads are stored in wp_posts with post_type='hvac_training_lead'
-- Meta data stored in wp_postmeta
WordPress Tables Used
{prefix}_posts- Events, venues, organizers, pages{prefix}_postmeta- Event/venue/organizer metadata{prefix}_users- Trainer accounts{prefix}_usermeta- Trainer profile data{prefix}_options- Plugin settings
Key URLs
Trainer Pages
/trainer/dashboard/- Main dashboard/trainer/registration/- Registration form/trainer/event/manage/- Create/edit events/trainer/certificate-reports/- View certificates
Master Trainer Pages
/master-trainer/dashboard/- Master dashboard/master-trainer/google-sheets/- Google Sheets integration
Public Pages
/training-login/- Login page/trainer/registration/- Public registration
CSS Architecture
Stylesheet Organization
- hvac-dashboard.css - Base dashboard styles, stat cards, tables
- hvac-dashboard-enhanced.css - Advanced dashboard features
- hvac-event-manage.css - Event creation/editing form styles
- hvac-layout.css - Layout containers and responsive grids
- hvac-common.css - Shared components and utilities
- hvac-page-templates.css - Page-specific template styles
CSS Methodology
- Scoped Selectors: All styles scoped to prevent theme conflicts
- Example:
.hvac-event-manage-wrapper .tribe-section
- Example:
- CSS Variables: Used for consistent theming
--hvac-primary,--hvac-spacing-*,--hvac-radius-*
- Mobile-First: Responsive breakpoints at 768px
- BEM-like Naming: Component-based class naming
Theme Compatibility
- Styles use high specificity to override theme defaults
- Container max-width enforced at 1200px
- Consistent 20px padding on all pages
- Theme layout constraints overridden where necessary
Security Architecture
Access Control
- Role-Based: Uses WordPress roles (hvac_trainer, hvac_master_trainer)
- Capability Checks: Fine-grained permission system
- Page Templates: Security flag
HVAC_IN_PAGE_TEMPLATE - AJAX Security: Nonce verification on all AJAX calls
Data Protection
// Input sanitization
$trainer_id = absint($_POST['trainer_id']);
$email = sanitize_email($_POST['email']);
$text = sanitize_text_field($_POST['text']);
// Output escaping
echo esc_html($trainer_name);
echo esc_url($profile_url);
echo esc_attr($css_class);
// Nonce verification
if (!wp_verify_nonce($_POST['nonce'], 'hvac_action')) {
wp_die('Security check failed');
}
// SQL injection prevention
$wpdb->prepare("SELECT * FROM table WHERE id = %d", $id);
Security Headers
- Content Security Policy
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- Strict-Transport-Security
Performance Optimizations
- Singleton patterns prevent duplicate initialization
- Assets loaded only on relevant pages
- Database queries optimized
- Caching implemented where appropriate
Testing Infrastructure
Docker Test Environment
Services:
- WordPress 6.4 (PHP 8.2) on port 8080
- MySQL 8.0 on port 3307
- Redis 7 on port 6380
- Mailhog on port 8025
- PhpMyAdmin on port 8081
Test Framework
- Architecture: Page Object Model (POM)
- Coverage: 146 E2E tests migrated
- Efficiency: 90% code reduction through shared patterns
- Browser Support: Headless and headed modes
- Test Data: Comprehensive fixtures and seeders
Running Tests
# Start Docker environment
docker compose -f tests/docker-compose.test.yml up -d
# Run E2E tests (headless)
HEADLESS=true BASE_URL=http://localhost:8080 node test-master-trainer-e2e.js
# Run with browser (requires display)
DISPLAY=:0 node test-comprehensive-validation.js
Integration Points
The Events Calendar (TEC)
- Version: 5.0+ required
- Post Types: tribe_events, tribe_venues, tribe_organizers
- Custom Fields: CE credits, certification types
- Template Override: Custom event display templates
Third-Party Services
- Google Sheets API: Data export/sync
- SMTP Services: Email delivery
- PDF Generation: TCPDF for certificates
- Maps Integration: Venue location display
Performance Considerations
Optimization Strategies
- Singleton Pattern: Prevents duplicate initialization
- Lazy Loading: Components loaded on demand
- Asset Optimization: Conditional script/style loading
- Database Indexes: Optimized query performance
- Object Caching: Redis/Memcached support
- CDN Integration: Static asset delivery
Caching Layers
┌─────────────────┐
│ Browser Cache │
└────────┬────────┘
│
┌────────▼────────┐
│ CDN Cache │
└────────┬────────┘
│
┌────────▼────────┐
│ Page Cache │
└────────┬────────┘
│
┌────────▼────────┐
│ Object Cache │
└────────┬────────┘
│
┌────────▼────────┐
│ Database │
└─────────────────┘
Deployment Architecture
Environments
- Development: Local Docker containers
- Staging: Mirror of production
- Production: Live environment
CI/CD Pipeline
Stages:
1. Code Quality Checks
2. Security Scanning
3. Unit Tests
4. E2E Tests
5. Staging Deployment
6. Smoke Tests
7. Production Deployment
Future Roadmap
Phase 1 (Q3 2025)
- REST API v2 implementation
- GraphQL endpoint
- Webhook system expansion
Phase 2 (Q4 2025)
- Microservices architecture
- Event streaming (Kafka/RabbitMQ)
- Advanced analytics dashboard
Phase 3 (Q1 2026)
- Machine learning integration
- Predictive analytics
- Mobile application API