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.
		
			
				
	
	
		
			201 lines
		
	
	
		
			No EOL
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			No EOL
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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:
 | |
| 1. Allow trainers to manage their own events using The Events Calendar
 | |
| 2. Restrict access to WordPress admin areas
 | |
| 3. Provide custom capabilities for HVAC-specific features
 | |
| 4. Integrate with The Events Calendar's event management capabilities
 | |
| 
 | |
| ## Implementation Architecture
 | |
| 
 | |
| ```mermaid
 | |
| 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:
 | |
| 
 | |
| ```php
 | |
| 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
 | |
| 
 | |
| ```php
 | |
| 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:
 | |
| 
 | |
| ```php
 | |
| 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:
 | |
| 1. Test role creation during plugin activation
 | |
| 2. Test trainer registration and role assignment
 | |
| 3. Verify trainer permissions with The Events Calendar
 | |
| 4. Test admin area restrictions
 | |
| 5. Test event creation, editing, and deletion capabilities
 | |
| 
 | |
| ## Considerations and Potential Issues
 | |
| 
 | |
| 1. **Plugin Dependencies**: The role's capabilities depend on The Events Calendar plugin. We should check if the plugin is active before adding its capabilities.
 | |
| 
 | |
| 2. **Role Migration**: If the capabilities change in a future update, we'll need a mechanism to update existing roles.
 | |
| 
 | |
| 3. **Role Conflict**: If a user already has the WordPress administrator role, adding the trainer role could cause confusion.
 | |
| 
 | |
| 4. **Backward Compatibility**: Ensure compatibility with existing registered trainers if the role didn't previously exist.
 | |
| 
 | |
| ## Implementation Timeline
 | |
| 
 | |
| 1. Create `class-hvac-roles.php` - 1 hour
 | |
| 2. Update main plugin class - 30 minutes
 | |
| 3. Add admin redirect - 30 minutes
 | |
| 4. Testing and debugging - 2 hours
 | |
| 
 | |
| Total estimated time: 4 hours |