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')) { // Role exists, update it with new capabilities return $this->update_master_trainer_role(); } // 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; } /** * Update existing hvac_master_trainer role with new capabilities */ public function update_master_trainer_role() { $role = get_role('hvac_master_trainer'); if (!$role) { return false; } // Get all required capabilities $required_caps = $this->get_master_trainer_capabilities(); // Add any missing capabilities foreach ($required_caps as $cap => $grant) { if ($grant && !$role->has_cap($cap)) { $role->add_cap($cap); } } return true; } /** * 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 = [ // 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, 'hvac_trainer_templates_view' => 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 = [ '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 = [ '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, // Missing capabilities that were causing menu filtering 'view_all_events' => true, 'hvac_master_events_view' => true, 'approve_trainers' => true, 'manage_announcements' => true, 'import_export_data' => 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'); $admin_role->add_cap('view_all_events'); $admin_role->add_cap('hvac_master_events_view'); $admin_role->add_cap('approve_trainers'); $admin_role->add_cap('manage_announcements'); $admin_role->add_cap('import_export_data'); $admin_role->add_cap('hvac_trainer_templates_view'); 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'); $admin_role->remove_cap('view_all_events'); $admin_role->remove_cap('approve_trainers'); $admin_role->remove_cap('manage_announcements'); $admin_role->remove_cap('import_export_data'); $admin_role->remove_cap('hvac_trainer_templates_view'); } } /** * Check if current user has a specific HVAC trainer capability */ public static function check_trainer_capability($capability) { return current_user_can($capability); } }