upskill-event-manager/includes/class-hvac-page-manager-v2.php
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

320 lines
No EOL
9.9 KiB
PHP

<?php
/**
* HVAC Page Manager V2 - Template System Overhaul
*
* New page manager using base template system with minimal hardcoded assignments
*
* @package HVAC_Community_Events
* @since 2.0.0
*/
if (!defined('ABSPATH')) {
exit;
}
class HVAC_Page_Manager_V2 {
/**
* Simplified page definitions - no hardcoded templates for most pages
*
* @var array
*/
private static $pages = [
// Public pages
'community-login' => [
'title' => 'Trainer Login',
'template' => 'page-hvac-public.php', // Uses specialized template
'public' => true,
'parent' => null
],
'find-a-trainer' => [
'title' => 'Find a Trainer',
'template' => 'page-hvac-public.php', // Uses specialized template
'public' => true,
'parent' => null
],
'trainer/registration' => [
'title' => 'Trainer Registration',
'template' => 'page-hvac-form.php', // Uses specialized form template
'public' => true,
'parent' => null
],
'registration-pending' => [
'title' => 'Registration Pending',
'template' => 'page-hvac-status.php', // Uses specialized status template
'public' => true,
'parent' => null
],
// Trainer hierarchy pages (parent containers)
'trainer' => [
'title' => 'Trainer',
'template' => null, // No template needed - just for hierarchy
'public' => false,
'parent' => null
],
'trainer/venue' => [
'title' => 'Venues',
'template' => null,
'public' => false,
'parent' => 'trainer'
],
'trainer/organizer' => [
'title' => 'Organizers',
'template' => null,
'public' => false,
'parent' => 'trainer'
],
'trainer/event' => [
'title' => 'Events',
'template' => null,
'public' => false,
'parent' => 'trainer'
],
'trainer/profile' => [
'title' => 'Profile',
'template' => null,
'public' => false,
'parent' => 'trainer'
],
// Complex pages that need specialized templates
'trainer/dashboard' => [
'title' => 'Trainer Dashboard',
'template' => 'page-hvac-dashboard.php',
'public' => false,
'parent' => 'trainer'
],
'trainer/profile/view' => [
'title' => 'View Profile',
'template' => 'page-hvac-profile.php',
'public' => false,
'parent' => 'trainer/profile'
],
'trainer/account-pending' => [
'title' => 'Account Pending Approval',
'template' => 'page-hvac-status.php',
'public' => false,
'parent' => null
],
'trainer/account-disabled' => [
'title' => 'Account Access Restricted',
'template' => 'page-hvac-status.php',
'public' => false,
'parent' => null
],
'trainer/event/create' => [
'title' => 'Create Event',
'template' => 'page-hvac-form.php',
'public' => false,
'parent' => 'trainer/event'
],
'trainer/event/edit' => [
'title' => 'Edit Event',
'template' => 'page-hvac-form.php',
'public' => false,
'parent' => 'trainer/event'
],
// Master trainer pages
'master-trainer' => [
'title' => 'Master Trainer',
'template' => null,
'public' => false,
'parent' => null
],
'master-trainer/master-dashboard' => [
'title' => 'Master Dashboard',
'template' => 'page-hvac-dashboard.php',
'public' => false,
'parent' => 'master-trainer'
],
// All other pages use the base template via HVAC_Template_Router
// No need to define them here - they're handled automatically
];
/**
* Create required pages
*/
public static function create_required_pages() {
foreach (self::$pages as $slug => $config) {
self::create_page($slug, $config);
}
// Flush rewrite rules after creating pages
flush_rewrite_rules();
}
/**
* Create a single page
*
* @param string $slug
* @param array $config
* @return int|false Page ID or false on failure
*/
private static function create_page($slug, $config) {
// Check if page already exists
$existing_page = get_page_by_path($slug);
if ($existing_page) {
// Update template if needed
self::update_page_template($existing_page->ID, $config);
return $existing_page->ID;
}
// Parse slug for parent
$parent_id = 0;
if (!empty($config['parent'])) {
$parent_page = get_page_by_path($config['parent']);
if ($parent_page) {
$parent_id = $parent_page->ID;
}
}
// Create page
$page_data = [
'post_title' => $config['title'],
'post_name' => $slug,
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'page',
'post_parent' => $parent_id,
'comment_status' => 'closed',
'ping_status' => 'closed'
];
$page_id = wp_insert_post($page_data);
if ($page_id && !is_wp_error($page_id)) {
// Set template only for pages that need specialized templates
self::update_page_template($page_id, $config);
// Set Astra theme layout to full-width for all HVAC pages
update_post_meta($page_id, 'site-sidebar-layout', 'no-sidebar');
update_post_meta($page_id, 'site-content-layout', 'full-width');
return $page_id;
}
return false;
}
/**
* Update page template assignment
*
* @param int $page_id
* @param array $config
*/
private static function update_page_template($page_id, $config) {
if (!empty($config['template'])) {
// Only set template for pages that explicitly need specialized templates
update_post_meta($page_id, '_wp_page_template', 'templates/' . $config['template']);
} else {
// Use base template for simple pages
update_post_meta($page_id, '_wp_page_template', 'templates/page-hvac-base.php');
}
}
/**
* Get page configuration by slug
*
* @param string $slug
* @return array|null
*/
public static function get_page_config($slug) {
return self::$pages[$slug] ?? null;
}
/**
* Check if a page exists in our registry
*
* @param string $slug
* @return bool
*/
public static function is_hvac_page($slug) {
return isset(self::$pages[$slug]) || HVAC_Template_Router::can_use_base_template($slug);
}
/**
* Get all page configurations
*
* @return array
*/
public static function get_all_pages() {
return self::$pages;
}
/**
* Add a page configuration dynamically
*
* @param string $slug
* @param array $config
*/
public static function register_page($slug, $config) {
self::$pages[$slug] = $config;
}
/**
* Remove duplicate pages from old system
*/
public static function cleanup_old_pages() {
// Pages that should be removed (duplicates or obsolete)
$pages_to_remove = [
'trainer/my-profile', // Replaced by trainer/profile/view
'training-login', // Renamed to community-login
];
foreach ($pages_to_remove as $slug) {
$page = get_page_by_path($slug);
if ($page) {
wp_delete_post($page->ID, true); // Force delete
}
}
}
/**
* Migrate pages from old template system to new base template system
*/
public static function migrate_to_base_templates() {
// Pages that should use base template instead of individual templates
$base_template_pages = [
'trainer/certificate-reports',
'trainer/generate-certificates',
'trainer/profile/edit',
'trainer/venue/list',
'trainer/venue/manage',
'trainer/organizer/list',
'trainer/organizer/manage',
'trainer/profile/training-leads',
'trainer/announcements',
'trainer/resources',
'trainer/documentation',
'trainer/email-attendees',
'trainer/communication-templates',
'trainer/communication-schedules',
'trainer/event/summary',
'trainer/event/manage',
'master-trainer/announcements',
'master-trainer/manage-announcements'
];
foreach ($base_template_pages as $slug) {
$page = get_page_by_path($slug);
if ($page) {
// Switch to base template
update_post_meta($page->ID, '_wp_page_template', 'templates/page-hvac-base.php');
// Ensure page configuration is registered with router
HVAC_Template_Router::register_page_config($slug, [
'render_method' => 'shortcode',
'show_navigation' => true,
'show_breadcrumbs' => true,
'menu_type' => strpos($slug, 'master-trainer/') === 0 ? 'master_trainer' : 'trainer'
]);
}
}
// Flush rewrite rules
flush_rewrite_rules();
}
}