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>
162 lines
8.3 KiB
Markdown
162 lines
8.3 KiB
Markdown
# 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 (`$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 31–Feb 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.*
|