## 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>
440 lines
No EOL
14 KiB
Markdown
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 |