upskill-event-manager/docs/TRAINER-ANNOUNCEMENTS-SPEC.md
Ben c20b461e7d feat: Implement secure Trainer Announcements system with comprehensive features
This commit introduces a complete announcement management system for HVAC trainers
with enterprise-grade security, performance optimization, and email notifications.

## Core Features
- Custom post type for trainer announcements with categories and tags
- Role-based permissions (master trainers can create/edit, all trainers can read)
- AJAX-powered admin interface with real-time updates
- Modal popup viewing for announcements on frontend
- Automated email notifications when announcements are published
- Google Drive integration for training resources

## Security Enhancements
- Fixed critical capability mapping bug preventing proper permission checks
- Added content disclosure protection for draft/private announcements
- Fixed XSS vulnerabilities with proper output escaping and sanitization
- Implemented permission checks on all AJAX endpoints
- Added rate limiting to prevent abuse (30 requests/minute)
- Email validation before sending notifications

## Performance Optimizations
- Implemented intelligent caching for user queries (5-minute TTL)
- Added cache versioning for announcement lists (2-minute TTL)
- Automatic cache invalidation on content changes
- Batch email processing to prevent timeouts (50 emails per batch)
- Retry mechanism for failed email sends (max 3 attempts)

## Technical Implementation
- Singleton pattern for all manager classes
- WordPress coding standards compliance
- Proper nonce verification on all AJAX requests
- Comprehensive error handling and logging
- Mobile-responsive UI with smooth animations
- WCAG accessibility compliance

## Components Added
- 6 PHP classes for modular architecture
- 2 page templates (master announcements, trainer resources)
- Admin and frontend JavaScript with jQuery integration
- Comprehensive CSS for both admin and frontend
- Email notification system with HTML templates
- Complete documentation and implementation plans

This system provides a secure, scalable foundation for trainer communications
while following WordPress best practices and maintaining high code quality.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-20 13:34:15 -03:00

300 lines
No EOL
9.1 KiB
Markdown

# Trainer Announcements System Specification
## Overview
A comprehensive announcement system enabling Master Trainers to communicate important updates to all HVAC Trainers through a dedicated post type, management interface, and automated email notifications.
## 1. Custom Post Type: Trainer Announcements
### Post Type Configuration
- **Name**: `hvac_announcement`
- **Labels**: Trainer Announcements (plural), Trainer Announcement (singular)
- **Capabilities**: Custom capability set to restrict access
- **Public**: False (not publicly queryable)
- **Show in REST**: True (for Gutenberg support)
- **Menu Icon**: `dashicons-megaphone`
### Post Type Features
- Title
- Editor (rich content with Gutenberg blocks)
- Featured Image
- Author
- Publish Date/Time
- Post Status (draft, published, private)
- Custom Taxonomies:
- Announcement Categories (`hvac_announcement_category`)
- Announcement Tags (`hvac_announcement_tag`)
### Permissions Model
- **Create/Edit/Delete**: Only users with `hvac_master_trainer` role
- **Read**: Users with `hvac_trainer` OR `hvac_master_trainer` roles
- **Custom Capabilities**:
- `create_hvac_announcements`
- `edit_hvac_announcements`
- `delete_hvac_announcements`
- `read_hvac_announcements`
- `publish_hvac_announcements`
## 2. Master Trainer Announcements Management Page
### URL Structure
- **Path**: `/master-trainer/announcements/`
- **Template**: `templates/page-master-announcements.php`
- **Page Slug**: `master-announcements`
### Interface Components
#### Announcements Table
- **Columns**:
- Title (linked to edit modal)
- Status (Draft/Published/Private)
- Categories
- Author
- Date Published
- Actions (Edit, Delete, View)
- **Features**:
- Sortable columns
- Status filters (All, Published, Draft)
- Bulk actions
- Pagination (20 per page)
- Search functionality
#### Add Announcement Modal
- **Trigger**: "Add New Announcement" button
- **Form Fields**:
- Title (required, text input)
- Content (TinyMCE editor with Gutenberg blocks)
- Publish Date/Time (datetime picker, defaults to now)
- Status (dropdown: draft, published, private)
- Categories (multi-select or checkboxes)
- Tags (comma-separated text input)
- Featured Image (WordPress media uploader)
- **Actions**:
- Save as Draft
- Publish
- Cancel
#### Edit Announcement Modal
- **Trigger**: Edit action in table or title click
- **Form Fields**: Same as Add modal, pre-populated with existing data
- **Additional Actions**:
- Update
- Move to Trash
- Cancel
### AJAX Implementation
- **Endpoints**:
- `hvac_get_announcements` - Fetch paginated announcements
- `hvac_create_announcement` - Create new announcement
- `hvac_update_announcement` - Update existing announcement
- `hvac_delete_announcement` - Delete announcement
- `hvac_get_announcement` - Get single announcement for editing
- **Security**: Nonce verification, capability checks
## 3. Trainer Resources Page
### URL Structure
- **Path**: `/trainer/resources/`
- **Template**: `templates/page-trainer-resources.php`
- **Page Slug**: `trainer-resources`
### Page Components
#### Announcements Section
- **Block Type**: UAGB Post Timeline block
- **Configuration**:
```
<!-- wp:uagb/post-timeline {
"timelinAlignmentTablet":"left",
"timelinAlignmentMobile":"left",
"dateFontSizeType":"px",
"dateFontSize":12,
"block_id":"d9c6878e",
"post_type":"hvac_announcement",
"posts_per_page":10,
"order":"desc",
"orderby":"date"
} /-->
```
- **Display**: Latest 10 announcements with load more functionality
- **Fields Shown**: Title, excerpt, date, featured image thumbnail
#### Google Drive Section
- **Title**: "Training Resources Library"
- **Implementation**: Embedded iframe
- **URL**: `https://drive.google.com/drive/folders/16uDRkFcaEqKUxfBek9VbfbAIeFV77nZG?usp=drive_link`
- **Iframe Attributes**:
- Width: 100%
- Height: 600px minimum
- Responsive sizing
- Border: none
- Allow: fullscreen
### Access Control
- Verify user has `hvac_trainer` or `hvac_master_trainer` role
- Redirect unauthorized users to login
## 4. Navigation Menu Updates
### Master Trainer Navigation
- **Parent Menu**: Trainer Management (existing)
- **New Item**: "Announcements"
- Position: After "Trainer Performance"
- URL: `/master-trainer/announcements/`
- Icon: megaphone or announcement icon
### Trainer Navigation
- **Parent Menu**: Main navigation
- **New Item**: "Resources"
- Position: After "Training Leads" (under Profile)
- URL: `/trainer/resources/`
- Icon: folder or resource icon
### Implementation
- Update `HVAC_Menu_System::get_trainer_menu_items()`
- Update `HVAC_Menu_System::get_master_trainer_menu_items()`
- Maintain existing dropdown structure and mobile responsiveness
## 5. Email Notification System
### Trigger
- On announcement status change to "published"
- Only for new publications (not updates to published posts)
### Recipients
- All users with `hvac_trainer` OR `hvac_master_trainer` roles
- Exclude users with status: disabled, deactivated, or pending
- Use batch processing for large recipient lists (50 per batch)
### Email Template
#### Subject Line
```
Upskill HVAC Trainer Announcement: [announcement_title]
```
#### HTML Template Structure
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Trainer Announcement</title>
</head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;">
<div style="max-width: 600px; margin: 0 auto; padding: 20px;">
<!-- Header -->
<div style="background: #003366; color: white; padding: 20px; text-align: center;">
<h1>Upskill HVAC Trainer Announcement</h1>
</div>
<!-- Content -->
<div style="padding: 30px; background: #ffffff; border: 1px solid #e0e0e0;">
<h2>[announcement_title]</h2>
<p style="color: #666; font-size: 14px;">Posted on [publish_date]</p>
<!-- Featured Image (if exists) -->
[featured_image]
<!-- Announcement Content -->
<div style="margin-top: 20px;">
[announcement_content]
</div>
<!-- Categories/Tags (if exists) -->
<div style="margin-top: 20px; padding-top: 20px; border-top: 1px solid #e0e0e0;">
[categories_tags]
</div>
</div>
<!-- Footer -->
<div style="padding: 20px; background: #f5f5f5; text-align: center; font-size: 12px; color: #666;">
<p>You received this email because you are registered as an HVAC Trainer.</p>
<p><a href="[site_url]/trainer/resources/">View all announcements</a></p>
</div>
</div>
</body>
</html>
```
### Implementation Details
- Use WordPress `wp_mail()` with HTML headers
- Queue emails using Action Scheduler or WP-Cron
- Log email sends for audit trail
- Handle failures with retry mechanism (max 3 attempts)
- Provide admin interface to view email send status
## 6. Database Schema
### Custom Tables
None required - uses WordPress post and postmeta tables
### Meta Keys
- `_hvac_announcement_email_sent` - Boolean, tracks if email was sent
- `_hvac_announcement_email_recipients` - Serialized array of recipient IDs
- `_hvac_announcement_email_send_date` - Timestamp of email send
## 7. Security Considerations
- All AJAX endpoints require nonce verification
- Strict capability checks before any CRUD operations
- Sanitize all user inputs (title, content, tags)
- Escape all outputs
- Validate featured image uploads
- Rate limiting on email sends (max 1 per minute per announcement)
- XSS protection in rich content editor
## 8. Performance Optimizations
- Cache announcement queries using WordPress transients
- Lazy load announcements in timeline
- Paginate announcement lists (20 per page)
- Queue email sends asynchronously
- Optimize featured images (max 1200px width)
- Use WordPress REST API for modal operations
## 9. Testing Requirements
### Unit Tests
- Custom post type registration
- Capability assignments
- AJAX endpoint security
- Email queue processing
- Menu item visibility
### E2E Tests (Playwright)
- Create announcement as master trainer
- Edit existing announcement
- Delete announcement
- View announcements as trainer
- Access control (non-trainer rejection)
- Email notification delivery
- Navigation menu updates
- Resources page Google Drive embed
## 10. Migration & Deployment
### Activation Steps
1. Register custom post type
2. Add capabilities to roles
3. Create required pages
4. Flush rewrite rules
5. Initialize email queue tables
### Rollback Plan
1. Deactivate announcement features
2. Hide menu items
3. Preserve announcement data
4. Stop email queue processing
## 11. Future Enhancements
- Announcement scheduling (auto-publish at future date)
- Email open/click tracking
- Announcement comments/feedback system
- Rich media attachments (PDFs, videos)
- Announcement importance levels (urgent, normal, low)
- Trainer preferences for email frequency
- Mobile app push notifications
- Multi-language support
- Announcement templates for common topics