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); } }