- Fix AJAX 400 error on master dashboard by adding missing handler - Fix Google Sheets folder verification JSON parse error - Fix certificate reports permission check for master trainers - Update all navigation links to use new hierarchical URL structure - Remove 11 duplicate/legacy WordPress pages - Fix Google Sheets page redirect loop - Update profile edit link behavior - Document all URL mapping changes and fixes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			154 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			No EOL
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Master Trainer Permission & Navigation Fixes
 | |
| **Date**: June 17, 2025  
 | |
| **Developer**: Ben Reed (ben@tealmaker.com)
 | |
| 
 | |
| ## Overview
 | |
| This document summarizes the fixes applied to resolve Master Trainer permission issues, AJAX errors, and navigation problems reported by the user.
 | |
| 
 | |
| ## Issues Fixed
 | |
| 
 | |
| ### 1. Master Dashboard AJAX 400 Error ✅
 | |
| **Problem**: Master dashboard was making AJAX call to `hvac_master_dashboard_events` but no handler existed.
 | |
| 
 | |
| **Solution**: 
 | |
| - Added missing AJAX handler registration in `includes/class-hvac-community-events.php`
 | |
| - Added `ajax_master_dashboard_events()` method to handle the AJAX request
 | |
| - The handler properly checks permissions and returns events table data
 | |
| 
 | |
| **Files Modified**:
 | |
| - `includes/class-hvac-community-events.php`
 | |
| 
 | |
| ### 2. Google Sheets Folder Verification JSON Error ✅  
 | |
| **Problem**: AJAX call returned "JSON.parse: unexpected character" error.
 | |
| 
 | |
| **Solution**:
 | |
| - Fixed incorrect file path in `ajax_verify_folder_structure()` method
 | |
| - Added error handling and output buffering
 | |
| - Temporarily returns mock data until Google Sheets auth is configured
 | |
| - Prevents PHP errors from breaking JSON response
 | |
| 
 | |
| **Files Modified**:
 | |
| - `includes/google-sheets/class-google-sheets-admin.php`
 | |
| 
 | |
| ### 3. Certificate Reports Permission Error ✅
 | |
| **Problem**: Master trainers saw "You do not have permission to view certificate reports."
 | |
| 
 | |
| **Solution**:
 | |
| - Fixed capability check from `current_user_can('hvac_trainer')` to `current_user_can('manage_hvac_events')`
 | |
| - Master trainers have the `manage_hvac_events` capability
 | |
| 
 | |
| **Files Modified**:
 | |
| - `includes/class-hvac-community-events.php`
 | |
| 
 | |
| ### 4. Navigation Links to Old URLs ✅
 | |
| **Problem**: Links throughout the plugin pointed to old URLs like `/hvac-dashboard/` instead of new hierarchical URLs.
 | |
| 
 | |
| **Solution**:
 | |
| - Updated 44+ URL references in template files
 | |
| - Updated all URLs in includes directory
 | |
| - Fixed hardcoded links
 | |
| - Implemented proper URL mapping:
 | |
|   - `/hvac-dashboard/` → `/trainer/dashboard/`
 | |
|   - `/certificate-reports/` → `/trainer/certificate-reports/`
 | |
|   - `/generate-certificates/` → `/trainer/generate-certificates/`
 | |
|   - And many more...
 | |
| 
 | |
| **Files Modified**:
 | |
| - All template files in `templates/` directory
 | |
| - Multiple files in `includes/` directory
 | |
| - `clear-test-certificates.php`
 | |
| 
 | |
| ### 5. Duplicate/Legacy WordPress Pages ✅
 | |
| **Problem**: Multiple duplicate pages existed with old slugs causing confusion.
 | |
| 
 | |
| **Solution**:
 | |
| - Deleted 11 duplicate pages (IDs: 5297, 5298, 5299, 5300, 5502, 5503, 5504, 5505, 5517, 5518, 5519)
 | |
| - Kept only the properly structured hierarchical pages
 | |
| - Legacy redirect system handles old URLs automatically
 | |
| 
 | |
| ### 6. Google Sheets Redirect Loop ✅
 | |
| **Problem**: `/master-trainer/google-sheets/` was causing infinite redirect loop.
 | |
| 
 | |
| **Solution**:
 | |
| - Added redirect loop prevention in `hvac_ce_handle_legacy_redirects()` function
 | |
| - Checks if already on target path before redirecting
 | |
| - Fixed OAuth callback redirect URLs
 | |
| 
 | |
| **Files Modified**:
 | |
| - `hvac-community-events.php`
 | |
| - `includes/google-sheets/class-google-sheets-auth.php`
 | |
| 
 | |
| ### 7. Profile Edit Link ✅  
 | |
| **Problem**: "Edit Profile" button opened wp-admin in new tab.
 | |
| 
 | |
| **Solution**:
 | |
| - Removed `target="_blank"` from edit profile link
 | |
| - Now opens in same tab for better UX
 | |
| 
 | |
| **Files Modified**:
 | |
| - `templates/template-trainer-profile.php`
 | |
| 
 | |
| ### 8. Master Dashboard Template Rendering ✅
 | |
| **Problem**: Master dashboard had jQuery undefined errors and Quirks Mode.
 | |
| 
 | |
| **Solution**:
 | |
| - Added missing `get_header()` call for authenticated users
 | |
| - Fixed template structure to include proper WordPress header
 | |
| 
 | |
| **Files Modified**:
 | |
| - `templates/template-hvac-master-dashboard.php`
 | |
| 
 | |
| ## Technical Details
 | |
| 
 | |
| ### AJAX Handler Implementation
 | |
| ```php
 | |
| public function ajax_master_dashboard_events() {
 | |
|     check_ajax_referer('hvac_master_dashboard_nonce', 'nonce');
 | |
|     
 | |
|     if (!current_user_can('view_master_dashboard')) {
 | |
|         wp_die('Insufficient permissions');
 | |
|     }
 | |
|     
 | |
|     // Load master dashboard data class
 | |
|     if (!class_exists('HVAC_Master_Dashboard_Data')) {
 | |
|         require_once HVAC_CE_PLUGIN_DIR . 'includes/class-hvac-master-dashboard-data.php';
 | |
|     }
 | |
|     
 | |
|     $dashboard_data = new HVAC_Master_Dashboard_Data();
 | |
|     $data = $dashboard_data->get_events_table_data($args);
 | |
|     
 | |
|     wp_send_json_success($data);
 | |
| }
 | |
| ```
 | |
| 
 | |
| ### Redirect Loop Prevention
 | |
| ```php
 | |
| // Get current URL path to prevent redirect loops
 | |
| $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
 | |
| $target_path = $legacy_redirects[$current_slug];
 | |
| 
 | |
| // Skip redirect if we are already on the target path
 | |
| if ($current_path === $target_path) {
 | |
|     return;
 | |
| }
 | |
| ```
 | |
| 
 | |
| ## Testing Recommendations
 | |
| 
 | |
| 1. **Master Dashboard**: Verify events table loads without AJAX errors
 | |
| 2. **Google Sheets**: Check that folder verification shows appropriate message
 | |
| 3. **Certificate Reports**: Confirm master trainers can access reports
 | |
| 4. **Navigation**: Test all navigation links go to correct hierarchical URLs
 | |
| 5. **Legacy URLs**: Verify old URLs redirect properly to new ones
 | |
| 
 | |
| ## Pending Issues
 | |
| 
 | |
| 1. **Trainer Documentation Login**: Still showing "Please log in to access the documentation" - may need further investigation
 | |
| 2. **Google Sheets Authentication**: Full folder verification will work once OAuth is configured
 | |
| 
 | |
| ## Deployment Notes
 | |
| 
 | |
| - All changes are live on staging server
 | |
| - WordPress cache has been flushed
 | |
| - No database schema changes required
 | |
| - Backward compatibility maintained through redirect system |