upskill-event-manager/Status.md
ben 25bf5d98e1 feat(slack): Add Slack notifications for registrations, tickets, and events
Instant Slack alerts via Incoming Webhook with Block Kit rich formatting:
- New trainer registrations (name, role, org, business type, photo)
- Ticket purchases (purchaser, event, count, total, gateway)
- Events submitted by trainers via TEC Community Events form
- Events published by admins (draft/pending → publish)

Settings UI with webhook URL field, validation, and test button.
Non-blocking sends so Slack failures never affect user flows.
Atomic add_post_meta idempotency guards prevent duplicate sends.
Code reviewed by GPT-5 (Codex) — all 5 findings addressed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:50:08 -04:00

162 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# HVAC Community Events - Project Status
**Last Updated:** February 20, 2026
**Version:** 2.2.18 (Deployed to Production)
---
## NEXT SESSION - CAPTCHA IMPLEMENTATION
### Status: PLANNED
**Objective:** Add CAPTCHA to all user-facing forms to prevent spam and bot submissions.
**Forms to Update:**
- Training login form
- Trainer registration form
- Contact forms (trainer, venue)
- Any other public-facing forms
---
## CURRENT SESSION - SLACK NOTIFICATIONS (Feb 20, 2026)
### Status: COMPLETE - Deployed to Production
**Objective:** Add Slack notifications for trainer registrations, ticket purchases, and event submissions/publishes via Incoming Webhook with Block Kit rich formatting.
### Features
- **New Trainer Registration** — name, role, organization, business type, profile photo, "View in WordPress" button
- **Ticket Purchase** — purchaser, email, event, ticket count, total, payment gateway, "View Order" button
- **Event Submitted by Trainer** — event title, trainer, date, venue, "View Event" button
- **Event Published by Admin** — same fields, "View Event" + "Edit in WP" buttons
- **Settings UI** — Webhook URL field (password type), "Send Test Notification" button with AJAX feedback
- **Test message** includes environment (Staging/Production) and site URL
### Design Decisions
- Non-blocking `wp_remote_post` for all real notifications; blocking only for test button
- Atomic `add_post_meta(..., true)` for idempotency (prevents races and duplicate sends)
- Webhook URL validated at save-time and send-time: `https` + `hooks.slack.com` + `/services/` path
- Graceful degradation: empty webhook = disabled, missing meta = "N/A" fields, no exceptions surface to users
- Code reviewed by GPT-5 (Codex) — all 5 findings fixed before production deploy
### Files Modified
| File | Change |
|------|--------|
| `includes/class-hvac-slack-notifications.php` | **NEW** — static utility class with 4 notification types + test handler |
| `includes/class-hvac-settings.php` | Slack webhook URL setting + validation + test button |
| `includes/class-hvac-plugin.php` | Include file + `init()` call in `initializeSecondaryComponents()` |
| `includes/class-hvac-registration.php` | One-line call to `notify_new_registration()` after admin email |
---
## PREVIOUS SESSION - MARKER VISIBILITY TOGGLE CHECKBOX REFACTOR (Feb 9, 2026)
### Status: COMPLETE - Deployed to Production (v2.2.18)
**Objective:** Refactor the marker visibility toggles on the Find Training page from standalone colored dots into inline checkboxes beside each category tab heading.
### Changes Made
1. **Inline Checkboxes in Tab Buttons** (`templates/page-find-training.php`)
- Removed standalone `hvac-visibility-toggles` div with 3 colored dot toggles
- Moved each checkbox inline into its corresponding tab button (`Events`, `Trainers`, `Venues`)
- `onclick="event.stopPropagation()"` on labels prevents checkbox clicks from triggering tab switches
- Checkbox IDs unchanged — no JS changes needed
2. **Custom Checkbox Styling** (`assets/css/find-training-map.css`)
- 14x14px custom checkboxes with category-specific fill colors when checked
- Trainer checkbox uses explicit `#6aad1e` (CSS variable `--hvac-trainer-color` is too light)
- Tablet: 12px checkboxes; Mobile (<768px): hidden
3. **Version Bump** (`includes/class-hvac-plugin.php`) `2.2.17` `2.2.18`
### Files Modified
| File | Change |
|------|--------|
| `templates/page-find-training.php` | Removed visibility toggles div, added inline checkboxes in tab buttons |
| `assets/css/find-training-map.css` | Replaced dot toggle CSS with checkbox styles, responsive adjustments |
| `includes/class-hvac-plugin.php` | Version bump `2.2.17` `2.2.18` |
### Git Commit
- `95382ac3` - feat(find-training): Refactor marker visibility dots into inline tab checkboxes
---
## PREVIOUS SESSIONS (Reverse Chronological)
### Find Training Tab Reorder, Marker Highlighting & Map Reset — Feb 9, 2026 (v2.2.17)
Reordered tabs to Events first (default), added marker highlighting on tab switch (larger/brighter icons, zIndex 100), added map reset button, fixed mobile overflow from long event titles. `9dbe472c`
### Mobile Find Training Scroll Fix — Feb 9, 2026 (v2.2.14)
Fixed mobile scrolling: switched from fixed-viewport (`100vh; overflow: hidden`) to natural page scrolling on screens 991px. Sticky filter bar. `4104c806`
### Map Tile Drift Fix & Event Cost Display — Feb 9, 2026 (v2.2.13)
Fixed Google Maps tile/marker drift at zoom 1-2 by setting `minZoom: 3`. Fixed event cost HTML entities (`&#x24;50` `$50`) via `html_entity_decode()`. `f123c7a5`
### Zoho CRM Sync Production Fix — Feb 6, 2026 (v2.2.11)
Fixed silent sync failure: search criteria not sent to Zoho API (GET ignores `$data`), error reporting priority, phone validation, Last_Name fallback. Result: 64/64 trainers syncing. `4c22b9db`
### Zoho CRM Sync Architecture Fix — Feb 6, 2026
Fixed "silent failure" architecture: added `validate_api_response()`, hash-only-on-success for all 5 sync methods, staging mode detection via hostname parsing, admin hash reset button. `03b9bce5`
### Near Me Button Mobile Fix — Feb 6, 2026
Fixed `.hvac-btn-text` wrapper missing from Near Me button state changes (5 locations). Added empty results notification for Near Me filter.
### Champion Differentiation on Find Training — Feb 2, 2026
Added `is_champion` flag, distinct white-outline marker icon, non-clickable sidebar cards (state only), sorted to end of list. 18 champions differentiated from trainers.
### Tabbed Interface for Find Training — Feb 1, 2026
Refactored sidebar from single trainer list to Trainers | Venues | Events tabs with ARIA accessibility, venue/event cards, info modal, context-aware search, visibility toggle dots.
### measureQuick Approved Training Labs — Feb 1, 2026
Created venue taxonomies (`venue_type`, `venue_equipment`, `venue_amenities`), configured 9 approved labs, filtered map data by taxonomy, enhanced venue modal with equipment/amenities badges and contact form.
### Find Training Page Enhancements — Feb 1, 2026
Added viewport sync (sidebar shows only visible-in-map trainers), marker hover info windows, legacy URL redirects (`/find-a-trainer/` `/find-training/`).
### Find Training Page Implementation — Jan 31Feb 1, 2026
Built `/find-training` from scratch with Google Maps API replacing buggy MapGeo. 8 new files. Features: markers, clustering, filters, geolocation, modals, contact form, auto-geocoding. Multi-model code review fixed 6 issues (1 critical, 1 high).
### E2E Testing & Bug Fixes — Feb 1, 2026
Deployed 12 security fixes, ran E2E tests, fixed empty trainers table (SQL rewrite) and blank event pages (template path mismatch). Added staging email filter.
### Multi-Model Security Code Review — Jan 31, 2026
4-model review (GPT-5, Gemini 3, Kimi K2.5, Zen MCP) across 11 files. Found and fixed 12 issues: 2 critical (password transients, O(3600) DoS loop), 4 high, 4 medium, 2 low.
### Master Trainer Profile Edit Enhancement — Jan 9, 2026
Fixed button styling, added all 6 profile field sections, added password reset button with AJAX handler.
### TEC Community Events Dependency Analysis — Jan 5, 2026
Plugin still relies on TEC CE for event creation. Removal estimated 9-14 days. Deferred as technical debt.
### Zoho Scheduled Sync, Batch Sync, Attendee Sync — Dec 17-20, 2025
WP-Cron scheduled sync with configurable intervals, batch pagination with progress bar, attendee/RSVP sync to Zoho Contacts + Campaign Members. 64/64 trainers, 50/50 attendees syncing.
### Earlier Sessions (Nov-Dec 2025)
Nonce fix (v2.1.7), technical debt cleanup (v2.1.6), z-index fix (v2.1.5), Gemini environment setup, PHP 8+ compatibility, nav dropdown fix, MapGeo interceptor strategy.
---
## ENVIRONMENTS
| Environment | URL | Version |
|-------------|-----|---------|
| **Production** | https://upskillhvac.com | 2.2.18 |
| **Staging** | https://upskill-staging.measurequick.com | 2.2.18 |
**Deploy:** `./scripts/deploy.sh staging` or `./scripts/deploy.sh production`
---
## KNOWN ISSUES (Minor)
1. Playwright headless login requires headed mode with correct selectors
2. Brief "jQuery is not defined" console error on page load (non-blocking)
3. Minor responsive layout issue on dashboard (cosmetic)
---
*For detailed session history, see git log and previous Status.md versions.*