upskill-event-manager/docs/ARCHITECTURE.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

440 lines
No EOL
14 KiB
Markdown

# 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:
```php
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
```sql
-- 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`
- **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
```php
// 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
```yaml
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
```bash
# 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
```yaml
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