upskill-event-manager/includes/class-hvac-roles.php
Ben a74c273b1d feat: complete master trainer area audit and implementation
Systematic audit and implementation of missing Master Trainer functionality
with comprehensive WordPress best practices and security implementation.

## Features Implemented
- Master Events Overview (/master-trainer/events/) - KPI dashboard with filtering
- Import/Export Data Management (/master-trainer/import-export/) - CSV operations
- Communication Templates (/trainer/communication-templates/) - Professional templates
- Enhanced Announcements (/master-trainer/announcements/) - Dynamic shortcode integration
- Pending Approvals System (/master-trainer/pending-approvals/) - Workflow management

## Navigation & UX Improvements
- Removed redundant Events link from top-level navigation menu
- Reorganized administrative functions under Tools dropdown
- Enhanced navigation clarity and professional appearance
- Full responsive design with accessibility compliance

## Architecture & Security
- 5 new singleton manager classes following WordPress patterns
- Comprehensive role-based access control (hvac_master_trainer)
- Complete security implementation (nonces, sanitization, escaping)
- Performance optimizations with transient caching and conditional loading
- Professional error handling and user feedback systems

## Files Added (16 new files)
- 4 manager classes: Import/Export, Events Overview, Pending Approvals, Communication Templates
- 4 CSS files with responsive design and accessibility features
- 4 JavaScript files with AJAX functionality and error handling
- 2 new templates: Import/Export, Pending Approvals
- 2 enhanced templates: Events Overview, Communication Templates

## Files Modified (14 files)
- Core system integration in Plugin, Page Manager, Scripts/Styles classes
- Navigation system cleanup in Master Menu System
- Enhanced access control and role management
- Template updates for dynamic content integration

## Testing & Deployment
- Comprehensive testing with Playwright automation
- Successful staging deployment and verification
- All 5 missing pages now fully functional
- Navigation improvements verified working

Resolves master trainer area audit requirements with production-ready implementation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-23 09:56:42 -03:00

223 lines
No EOL
7.2 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')) {
// 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 = 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,
'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 = 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,
// 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);
}
}