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

8.3 KiB
Raw Blame History

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.172.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.172.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.