- Added explicit checks to prevent authentication redirects on registration page - Added ensure_registration_page_public() method with priority 1 to run before other auth checks - Included registration-pending and training-login pages in public pages list - Added fallback function in main plugin file to remove auth hooks on registration page This ensures that users can access /trainer/registration/ without being logged in, as intended for new trainer signups.
		
			
				
	
	
		
			181 lines
		
	
	
		
			No EOL
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			No EOL
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Handles custom roles and capabilities for the HVAC Community Events plugin
 | |
|  */
 | |
| 
 | |
| if (!defined('ABSPATH')) {
 | |
|     exit;
 | |
| }
 | |
| 
 | |
| class HVAC_Roles {
 | |
|     /**
 | |
|      * Create the hvac_trainer role with all required capabilities
 | |
|      */
 | |
|     public function create_trainer_role() {
 | |
|         // Check if role already exists
 | |
|         if (get_role('hvac_trainer')) {
 | |
|             return true;
 | |
|         }
 | |
|         
 | |
|         // Add the role with capabilities
 | |
|         $result = add_role(
 | |
|             'hvac_trainer',
 | |
|             __('HVAC Trainer', 'hvac-community-events'),
 | |
|             $this->get_trainer_capabilities()
 | |
|         );
 | |
|         
 | |
|         return $result !== null;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Create the hvac_master_trainer role with all required capabilities
 | |
|      */
 | |
|     public function create_master_trainer_role() {
 | |
|         // Check if role already exists
 | |
|         if (get_role('hvac_master_trainer')) {
 | |
|             return true;
 | |
|         }
 | |
|         
 | |
|         // Add the role with capabilities
 | |
|         $result = add_role(
 | |
|             'hvac_master_trainer',
 | |
|             __('HVAC Master Trainer', 'hvac-community-events'),
 | |
|             $this->get_master_trainer_capabilities()
 | |
|         );
 | |
|         
 | |
|         return $result !== null;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Remove the hvac_trainer role
 | |
|      */
 | |
|     public function remove_trainer_role() {
 | |
|         remove_role('hvac_trainer');
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Remove the hvac_master_trainer role
 | |
|      */
 | |
|     public function remove_master_trainer_role() {
 | |
|         remove_role('hvac_master_trainer');
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Get all capabilities for the trainer role
 | |
|      */
 | |
|     public function get_trainer_capabilities() {
 | |
|         $caps = array(
 | |
|             // Basic WordPress capabilities
 | |
|             '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,
 | |
|             
 | |
|             // The 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,
 | |
|         );
 | |
|         
 | |
|         // Explicitly deny admin capabilities
 | |
|         $denied_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 ($denied_caps as $cap) {
 | |
|             $caps[$cap] = false;
 | |
|         }
 | |
|         
 | |
|         return $caps;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Get all capabilities for the master trainer role
 | |
|      */
 | |
|     public function get_master_trainer_capabilities() {
 | |
|         // Start with all trainer capabilities
 | |
|         $caps = $this->get_trainer_capabilities();
 | |
|         
 | |
|         // Add master trainer specific capabilities
 | |
|         $master_caps = array(
 | |
|             'view_master_dashboard' => true,
 | |
|             'view_all_trainer_data' => true,
 | |
|             'manage_google_sheets_integration' => true,
 | |
|             'view_global_analytics' => true,
 | |
|             'manage_communication_templates' => true,
 | |
|             'manage_communication_schedules' => true,
 | |
|         );
 | |
|         
 | |
|         // Merge with trainer capabilities
 | |
|         $caps = array_merge($caps, $master_caps);
 | |
|         
 | |
|         return $caps;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Grant administrators access to HVAC dashboard capabilities
 | |
|      * This prevents redirect loops when admins try to access the dashboard
 | |
|      */
 | |
|     public function grant_admin_dashboard_access() {
 | |
|         $admin_role = get_role('administrator');
 | |
|         if ($admin_role) {
 | |
|             $admin_role->add_cap('view_hvac_dashboard');
 | |
|             $admin_role->add_cap('manage_hvac_events');
 | |
|             $admin_role->add_cap('view_master_dashboard');
 | |
|             $admin_role->add_cap('view_all_trainer_data');
 | |
|             $admin_role->add_cap('manage_google_sheets_integration');
 | |
|             $admin_role->add_cap('view_global_analytics');
 | |
|             $admin_role->add_cap('manage_communication_templates');
 | |
|             $admin_role->add_cap('manage_communication_schedules');
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Remove HVAC dashboard capabilities from administrators
 | |
|      */
 | |
|     public function revoke_admin_dashboard_access() {
 | |
|         $admin_role = get_role('administrator');
 | |
|         if ($admin_role) {
 | |
|             $admin_role->remove_cap('view_hvac_dashboard');
 | |
|             $admin_role->remove_cap('manage_hvac_events');
 | |
|             $admin_role->remove_cap('view_master_dashboard');
 | |
|             $admin_role->remove_cap('view_all_trainer_data');
 | |
|             $admin_role->remove_cap('manage_google_sheets_integration');
 | |
|             $admin_role->remove_cap('view_global_analytics');
 | |
|             $admin_role->remove_cap('manage_communication_templates');
 | |
|             $admin_role->remove_cap('manage_communication_schedules');
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Check if current user has a specific HVAC trainer capability
 | |
|      */
 | |
|     public static function check_trainer_capability($capability) {
 | |
|         return current_user_can($capability);
 | |
|     }
 | |
| } |