Gatilab Products

Release Notes

Improvements, fixes, and the details behind each release.

Core Forms

Build forms, collect submissions, and connect the actions your site needs.

View Product
← All Core Forms Releases
Beta

Core Forms 4.3.0-beta1

Pre-release. Real installs continue to update to 4.2.10 — opt in to this beta only on staging.

Polls rework

Schema migration (cf_db_version → 4.3.0), tabbed editor, Gutenberg block, REST API, analytics screen, CSV export, hourly auto-close cron, accessibility pass, and a full vote-integrity rewrite.

Editor

  • Tabbed editor (Question / Settings / Schedule / Embed / Results) replaces the metabox screen
  • Drag-to-reorder options, Duplicate row action, "Other" write-in toggle, dedicated type selector (single vs. multiple)

Vote integrity

  • Every vote now stores a voter_hash (poll + IP + UA + cookie + user) and dedupe queries against that single column regardless of mode
  • Cookie set on render with SameSite=Lax; Secure; HttpOnly; AJAX requests persist a fresh cookie too (was previously broken because admin-ajax doesn't fire send_headers)
  • vote_limit=user rejects anonymous voters at submit (was silently letting them vote unlimited times)
  • Honeypot field on by default; per-IP rate limit (12 votes/minute) covers both real submits and honeypot trips
  • Hourly cf_poll_auto_close cron flips status to closed once the end time passes

Frontend & block

  • core-forms/poll Gutenberg block (no-build, vanilla JS) — picker dropdown + display-mode (auto / results-only / form-only); server-render shares code with the shortcode
  • Result styles: bar (default), columns, percent-only
  • Optional live results polling (15 s, opt-in per poll; pauses while tab is hidden)
  • Optional change-vote window (per-poll, in minutes) — re-renders the form pre-checked
  • Accessible markup: <fieldset><legend>, role="progressbar" with aria-valuenow, role="status" aria-live="polite", focus moves to result heading on submit, respects prefers-reduced-motion

Results & analytics

  • REST: GET /cf/v1/polls/{id}/results (public), GET /cf/v1/polls and /polls/{id} and /polls/{id}/analytics (auth)
  • Per-poll analytics screen with totals, unique voters, 30-day SVG line chart, option breakdown
  • CSV export of raw votes (option label, value, voter_hash, IP, user, voted_at, referrer)

JS

  • Removed jQuery from the poll frontend and admin scripts

Schema migration

Adds type, starts_at, allow_other, post_close_behavior, redirect_url, enable_live_results, change_vote_window to wp_cf_polls. Adds option_value, voter_hash, referrer to wp_cf_poll_votes plus a (poll_id, voter_hash) composite index. Existing rows are backfilled so historical dedupe keeps working.

Known follow-ups for stable 4.3.0

  • Donut style currently falls back to bar rendering (CSS hook exists)
  • Image-option polls / NPS / rating types are deferred to 4.4.0