Patriot Platform Members 1.05 — Event attendance management

INSTALL
Back up the plugin and database. Upload patriot-platform-1.05.zip through
WordPress > Plugins > Add New > Upload Plugin and replace the current plugin.
The full package includes previous dashboards, RSVPs, event emails and header.
No reactivation is required. The next WordPress init adds attendance state,
marking administrator ID and UTC marking time to the existing RSVP table.
Existing registrations default to Not marked.

EVENT ATTENDANCE PAGE
Open Patriot Platform > Event attendance.
- Search by event title.
- Filter by region, publication status, From and To dates.
- Dates use the WordPress site's configured timezone; displayed start times
  retain the event's own timezone.
- Includes published, pending, draft, private and trashed events.
- Results are paginated, 25 events per page.
- Each row links to its Attendance list and Edit event screen.
- Published events have Open/Close registrations controls and an expandable
  Cancel event action. Cancellation queues notices through the existing worker.
  Closing registrations alone does not cancel the event or send notices.

INSIDE AN EVENT
- Save maximum attendees and registration closure as before.
- Filter registrations: Registered, Cancelled or All.
- Filter attendance: Not marked, Attended or No-show.
- Set attendance for each active registration and save it.
- Expand Remove registration, then select Remove and notify member to release
  the place and queue the existing cancellation confirmation to that account.
- Removal retains the cancelled registration and its attendance history; it is
  not a permanent ban. The member can re-register if the activity permits it.
- A fresh registration resets previous attendance to Not marked.
- Attendance can be marked before or after the activity; organisers decide when
  the roll is final. Cancelled registrations cannot receive new attendance marks.
- Attendee lists are paginated, 50 per page.

CSV EXPORT
Export matching attendees to CSV applies the current registration and attendance
filters, across all pages. Includes registration/member IDs, permitted names and
emails, registration status, volunteer choice, attendance and UTC record times.
The CSV downloads directly; no public export file is stored on the server.
Potential spreadsheet formulas in exported text are prefixed with an apostrophe.
Treat downloaded lists as private membership records.

PERMISSIONS
National administrators can manage events across regions, edit activities and
inspect registration identities. Approved coordinators have equivalent attendance
controls for their assigned region through the existing regional dashboard and
published event page, but do not gain WordPress activity-editor permissions.
Coordinator exports hide identities when a member is no longer eligible for the
event, following the directory restrictions. Coordinator filters cannot override
the assigned region. All writes and exports require authenticated POSTs, event-
specific WordPress nonces and server-side organiser authorization. Changes and
exports are recorded using the existing audit mechanism.

EMAILS
Registration removal queues a cancellation email. Event cancellation queues
registered-attendee withdrawal notices. These use the existing email queue/retry
rules and require WP-Cron/SMTP to work. Closing/opening registrations and marking
attendance do not send emails. No live emails were sent during development.

VALIDATION
88 isolated combined behaviour/render checks passed with WordPress/database
boundaries stubbed, including existing RSVP/email/change behaviour, coordinator
scope, invalid IDs/states, attendance audit/database failures, removal email hook,
new-registration reset, unchanged capacity when toggling registration closure,
CSV formula handling/visibility, date handling and the new page/form output.
All 22 PHP files passed PHP runtime lint and PHP 8.0 syntax parsing.
ZIP CRC integrity checked. Browser layout, actual WordPress schema migration,
SQL/CSV streaming and SMTP have not been exercised on a running WordPress site.

CHECK ON YOUR TEST SITE
1. Install and open Event attendance. Confirm header shows Version 1.05.
2. Test all event filters, dates, pagination and Reset.
3. Open an event; change capacity and registration closure.
4. Register two test members; mark one attended and one no-show.
5. Filter attendee states and export; verify the CSV in a spreadsheet.
6. Remove a registration and confirm its cancellation email is queued/received.
7. Check the cancelled record and re-register; attendance should reset.
8. Test as a coordinator from the correct and a different region.
9. Test Edit event and Cancel event, then check the event notification queue.
10. Confirm your caching exclusions and WordPress cron configuration remain set.
