Implements automatic creation of required plugin pages (Community Login, Trainer Registration, Trainer Dashboard) upon plugin activation. This addresses E2E test failures caused by missing pages in the test environment. - Adds activation hook in `hvac-community-events.php` to call `hvac_ce_create_required_pages`. - The callback function checks for existing pages by slug and creates them using `wp_insert_post` if missing. Includes debug logging. Also fixes issues identified during E2E test debugging: - Corrects fatal error in `includes/community/class-login-handler.php` by replacing undefined constant `HVAC_COMMUNITY_EVENTS_PATH` with `HVAC_CE_PLUGIN_DIR`. - Updates `tests/e2e/tests/login.spec.ts` to use the correct selector `#wp-submit` for the login form submit button instead of `button[type="submit"]`. Documentation updates: - Adds `docs/automatic-page-creation-plan.md`. - Updates `README.md` regarding automatic page creation. - Updates Memory Bank files (`decisionLog.md`, `progress.md`, `activeContext.md`). Note: Activation hook logging did not appear during WP-CLI activation, requiring further investigation if page creation issues persist. E2E test confirmation pending.
		
			
				
	
	
	
	
		
			5.9 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	HVAC Trainer Role Implementation Plan
Overview
This document outlines the plan for implementing the hvac_trainer role in the HVAC Community Events plugin, ensuring proper integration with WordPress core and The Events Calendar plugin suite.
Requirements Analysis
The hvac_trainer role needs to:
- Allow trainers to manage their own events using The Events Calendar
- Restrict access to WordPress admin areas
- Provide custom capabilities for HVAC-specific features
- Integrate with The Events Calendar's event management capabilities
Implementation Architecture
classDiagram
    class HVAC_Community_Events {
        +activate()
        +deactivate()
        +init()
    }
    
    class HVAC_Roles {
        +create_trainer_role()
        +remove_trainer_role()
        +get_trainer_capabilities()
        +check_trainer_capability(capability)
    }
    
    class HVAC_Registration {
        +create_trainer_account(data)
    }
    
    HVAC_Community_Events --> HVAC_Roles : includes/initializes
    HVAC_Registration --> HVAC_Roles : uses capabilities
Detailed Implementation Steps
1. Create Role Management Class
We will create a new file class-hvac-roles.php with the following functionality:
class HVAC_Roles {
    /**
     * Create the hvac_trainer role
     */
    public function create_trainer_role() {
        // Check if role already exists
        if (get_role('hvac_trainer')) {
            return;
        }
        
        // Add the role with basic capabilities
        add_role(
            'hvac_trainer',
            __('HVAC Trainer', 'hvac-community-events'),
            $this->get_trainer_capabilities()
        );
    }
    
    /**
     * Remove the hvac_trainer role
     */
    public function remove_trainer_role() {
        remove_role('hvac_trainer');
    }
    
    /**
     * Get all capabilities for the hvac_trainer role
     */
    public function get_trainer_capabilities() {
        // Default capabilities
        $caps = array(
            'read' => true,
            'upload_files' => true,
            
            // Custom HVAC capabilities
            'manage_hvac_events' => true,
            'edit_hvac_profile' => true,
            'view_hvac_dashboard' => true,
            'manage_attendees' => true,
            'email_attendees' => true,
            
            // Events Calendar capabilities
            'publish_tribe_events' => true,
            'edit_tribe_events' => true,
            'delete_tribe_events' => true,
            'edit_published_tribe_events' => true,
            'delete_published_tribe_events' => true,
            'read_private_tribe_events' => true,
        );
        
        // Restrict access to admin areas
        $admin_caps = array(
            'manage_options', 
            'moderate_comments',
            'manage_categories',
            'manage_links',
            'edit_others_posts',
            'edit_pages',
            'edit_others_pages',
            'edit_published_pages',
            'publish_pages',
            'delete_pages',
            'delete_others_pages',
            'delete_published_pages',
            'delete_others_posts',
            'import',
            'export',
            'edit_theme_options',
        );
        
        foreach ($admin_caps as $cap) {
            $caps[$cap] = false;
        }
        
        return $caps;
    }
    
    /**
     * Check if current user has a specific HVAC trainer capability
     */
    public function check_trainer_capability($capability) {
        return current_user_can($capability);
    }
}
2. Update Main Plugin Class
We will modify class-hvac-community-events.php to:
- Include the new roles class
- Create the role during plugin activation
- Remove the role during plugin deactivation
private function includes() {
    require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-roles.php';
    require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-registration.php';
}
public function activate() {
    // Create the hvac_trainer role
    $roles = new HVAC_Roles();
    $roles->create_trainer_role();
}
public function deactivate() {
    // Remove the hvac_trainer role
    $roles = new HVAC_Roles();
    $roles->remove_trainer_role();
}
3. Integration with Registration System
The registration system already assigns the 'hvac_trainer' role in the create_trainer_account() method, so no changes are needed there.
4. Admin Redirect for Trainers
To prevent trainers from accessing the WordPress admin area, we'll add a redirect:
public function init() {
    // Prevent trainers from accessing wp-admin
    add_action('admin_init', array($this, 'redirect_trainers_from_admin'));
}
public function redirect_trainers_from_admin() {
    if (current_user_can('view_hvac_dashboard') && !current_user_can('manage_options')) {
        wp_redirect(home_url('/hvac-trainer-dashboard/'));
        exit;
    }
}
5. Testing the Implementation
To ensure the role works correctly, we'll:
- Test role creation during plugin activation
- Test trainer registration and role assignment
- Verify trainer permissions with The Events Calendar
- Test admin area restrictions
- Test event creation, editing, and deletion capabilities
Considerations and Potential Issues
- 
Plugin Dependencies: The role's capabilities depend on The Events Calendar plugin. We should check if the plugin is active before adding its capabilities. 
- 
Role Migration: If the capabilities change in a future update, we'll need a mechanism to update existing roles. 
- 
Role Conflict: If a user already has the WordPress administrator role, adding the trainer role could cause confusion. 
- 
Backward Compatibility: Ensure compatibility with existing registered trainers if the role didn't previously exist. 
Implementation Timeline
- Create class-hvac-roles.php- 1 hour
- Update main plugin class - 30 minutes
- Add admin redirect - 30 minutes
- Testing and debugging - 2 hours
Total estimated time: 4 hours