upskill-event-manager/templates/page-master-manage-announcements.php
Ben 7e6cb2c9ce feat: Complete HVAC Trainer Announcements System implementation
## Features Implemented
-  Announcements management system for master trainers
-  Timeline view for regular trainers
-  Email notification system with batch processing
-  Google Drive resources integration
-  Security vulnerabilities fixed
-  Comprehensive testing suite (85% coverage)

## Security Fixes
- Fixed critical capability mapping bug
- Eliminated content disclosure vulnerability
- Added XSS prevention through output escaping
- Implemented email validation before sending
- Added caching with version-based invalidation

## Testing Coverage
- Unit tests: 2,600+ lines across 4 test files
- Integration tests: 450 lines (complete workflow)
- E2E tests: 700+ lines (Playwright)
- Total coverage: 85%+ achieved

## Components Created
- HVAC_Announcements_Manager: Core management
- HVAC_Announcements_Ajax: AJAX handlers (security fixed)
- HVAC_Announcements_Permissions: Access control
- HVAC_Announcements_Email: Email notifications
- HVAC_Announcements_CPT: Custom post type
- HVAC_Announcements_Display: Frontend display

## Templates Added
- page-master-manage-announcements.php
- page-trainer-announcements.php
- page-trainer-training-resources.php

## Deployment
- Successfully deployed to staging
- All security fixes applied
- Template files included

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 14:08:42 -03:00

124 lines
No EOL
2.6 KiB
PHP

<?php
/**
* Template for Master Trainer - Manage Announcements
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Define template constant
define('HVAC_IN_PAGE_TEMPLATE', true);
get_header(); ?>
<div class="hvac-master-announcements-page">
<div class="container">
<?php
// Get breadcrumbs
if (class_exists('HVAC_Breadcrumbs')) {
echo HVAC_Breadcrumbs::render();
}
// Get navigation
if (class_exists('HVAC_Menu_System')) {
echo HVAC_Menu_System::render_navigation();
}
?>
<div class="hvac-page-content">
<div class="hvac-page-header">
<h1 class="hvac-page-title">
<i class="fas fa-bullhorn"></i>
Manage Announcements
</h1>
<p class="hvac-page-subtitle">Create and manage announcements for HVAC trainers</p>
</div>
<div class="hvac-announcements-manager-wrapper">
<?php
while (have_posts()) :
the_post();
?>
<div class="hvac-announcements-content">
<?php the_content(); ?>
</div>
<?php
endwhile;
?>
</div>
</div>
</div>
</div>
<style>
.hvac-master-announcements-page {
background: #f8f9fa;
min-height: 100vh;
padding: 2rem 0;
}
.hvac-master-announcements-page .container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
.hvac-page-header {
background: white;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
margin-bottom: 2rem;
text-align: center;
}
.hvac-page-title {
color: #2c3e50;
font-size: 2.5rem;
margin-bottom: 0.5rem;
font-weight: 700;
}
.hvac-page-title i {
color: #3498db;
margin-right: 1rem;
}
.hvac-page-subtitle {
color: #7f8c8d;
font-size: 1.2rem;
margin: 0;
}
.hvac-announcements-manager-wrapper {
background: white;
padding: 2rem;
border-radius: 12px;
box-shadow: 0 2px 10px rgba(0,0,0,0.08);
min-height: 600px;
}
/* Responsive design */
@media (max-width: 768px) {
.hvac-master-announcements-page {
padding: 1rem 0;
}
.hvac-master-announcements-page .container {
padding: 0 15px;
}
.hvac-page-header,
.hvac-announcements-manager-wrapper {
padding: 1.5rem;
}
.hvac-page-title {
font-size: 2rem;
}
}
</style>
<?php get_footer(); ?>