Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
7c496ee
feat: add the auto-advance settings for multi-step forms
vanshk141999 Sep 12, 2026
c78d3c0
fix: guard the template picker's admin bar padding tweak
adi3890 Sep 14, 2026
44b5007
Merge pull request #3138 from brainstormforce/fix/3071-template-picke…
vanshk141999 Sep 14, 2026
f9561c9
Fix editor crash when a block has no label
vanshk141999 Sep 14, 2026
d5db387
fix: reset DB cache after delete to prevent stale query results
adi3890 Sep 16, 2026
0dfb9a0
fix: clean up the OttoKit OAuth poll and stop it running on a null popup
adi3890 Sep 16, 2026
c343889
fix: drop the dead form-markup fetch from the block's form picker
adi3890 Sep 16, 2026
768ccbe
Merge pull request #3143 from brainstormforce/fix/3068-use-delete-cac…
vanshk141999 Sep 16, 2026
2171122
fix: remove the editor click listeners on unmount in Typography and T…
adi3890 Sep 16, 2026
03b9fca
review: leave the OAuth popup open on unmount, plus review follow-ups
adi3890 Sep 16, 2026
f811c01
Merge pull request #3145 from brainstormforce/fix/3067-selectform-dea…
vanshk141999 Sep 16, 2026
092ae62
Merge pull request #3144 from brainstormforce/fix/3070-ottokit-poll-c…
vanshk141999 Sep 16, 2026
bd4e916
Merge pull request #3139 from brainstormforce/fix/editor-crash-undefi…
vanshk141999 Sep 16, 2026
1280c3a
feat(onboarding): redesign the guided setup
vanshk141999 Sep 16, 2026
42b0589
review: fix the same listener leak in box-shadow, rebuild bundle
adi3890 Sep 16, 2026
cbfde1d
Merge pull request #3146 from brainstormforce/fix/3069-editor-click-l…
vanshk141999 Sep 16, 2026
e766c96
style: use the inverse Premium badge from the onboarding design
vanshk141999 Sep 17, 2026
d5ce63b
feat: wipe the comparison on hover, and stop ringing the card on click
vanshk141999 Sep 17, 2026
c2b367e
copy: rewrite the welcome and connect steps
vanshk141999 Sep 17, 2026
fcd2d89
fix(onboarding): address review on #3147
vanshk141999 Sep 17, 2026
5673a5b
fix(onboarding): keep "Skip for now" to the AI step only
vanshk141999 Sep 17, 2026
2bc77f6
fix: stop the public checkout path making a blocking license check
adi3890 Sep 18, 2026
787fe35
fix: stop writing visitor-correctable stops to the debug log
vanshk141999 Sep 21, 2026
9d173cf
test: fail the suite instead of dying at exit 0
adi3890 Sep 21, 2026
62b2185
test: stop isolated-process tests reinstalling the shared test database
adi3890 Sep 21, 2026
6b79279
test: make the whole suite pass, and fix the three product bugs it found
adi3890 Sep 21, 2026
3986fec
test: assert the exact sanitized URL instead of a substring
adi3890 Sep 21, 2026
33cce2a
feat(onboarding): report which wizard produced the analytics blob
vanshk141999 Sep 21, 2026
7f97a0e
Merge branch 'master' of https://github.com/brainstormforce/sureforms…
vanshk141999 Sep 22, 2026
f7f47d0
Merge pull request #3155 from brainstormforce/master-dev-2.12.7-post
vanshk141999 Sep 22, 2026
f0f50da
Merge pull request #3153 from brainstormforce/fix/drop-blocked-debug-…
vanshk141999 Sep 22, 2026
5bd376e
fix(page-break): form-level only auto-advance toggles, house help style
vanshk141999 Sep 22, 2026
144bb75
feat: emit the auto-advance attributes for the conversational layout too
vanshk141999 Sep 22, 2026
9fbfeae
revert: Contact Support opens the mail client again
vanshk141999 Sep 22, 2026
d8c3cd9
revert: Contact Support is the notice button again, and the dialog goes
vanshk141999 Sep 22, 2026
b01da4f
fix(onboarding): QA copy pass on the connect and add-ons steps
vanshk141999 Sep 23, 2026
ee4014c
fix(onboarding): mark which lead fields are required
vanshk141999 Sep 23, 2026
4789d8d
fix(onboarding): say what to do in the lead-step validation messages
vanshk141999 Sep 23, 2026
c969191
fix(onboarding): SureMail step reports the plugin's real state
vanshk141999 Sep 23, 2026
3b00eee
fix: cap the Contact Support mailto length, and remove dialog leftovers
vanshk141999 Sep 23, 2026
035663e
fix(onboarding): use the designed Multistep free card, which says 7 f…
vanshk141999 Sep 23, 2026
5c0e382
fix(onboarding): refresh all nine welcome slides from the design file
vanshk141999 Sep 23, 2026
61627ad
fix(onboarding): all eight comparison cards come from the design file
vanshk141999 Sep 23, 2026
c102eca
fix(onboarding): conditional free card counts its own fields correctly
vanshk141999 Sep 23, 2026
2bc09bf
Merge remote-tracking branch 'origin/dev' into feat/1429-auto-advance…
vanshk141999 Sep 23, 2026
d593dc4
fix: keep the support email body on non-Latin sites
vanshk141999 Sep 23, 2026
e102de1
fix: store the email notification log on the submitted entry
vanshk141999 Sep 24, 2026
7385ef7
Merge pull request #3151 from brainstormforce/fix/non-blocking-licens…
vanshk141999 Sep 24, 2026
710496f
feat: add Distraction Free mode to hide promotional content (Pro)
vanshk141999 Sep 24, 2026
d2b9e35
fix: send the support email in English on every site
vanshk141999 Sep 24, 2026
0a0908c
Merge pull request #3161 from brainstormforce/fix/entry-log-email-not…
vanshk141999 Sep 24, 2026
9bcc559
test: restore logging settings so later suites can record failures
vanshk141999 Sep 24, 2026
d75931c
style(onboarding): update the conversational, multistep and entries i…
vanshk141999 Sep 24, 2026
3f3a2e0
Merge pull request #3147 from brainstormforce/feature/onboarding-rede…
vanshk141999 Sep 24, 2026
8533916
Merge pull request #3157 from brainstormforce/fix/contact-support-mailto
vanshk141999 Sep 24, 2026
e9e4cb5
feat(page-break): info tooltips for auto-advance, and open Form > Pag…
vanshk141999 Sep 24, 2026
27597ea
test: restore logging settings so later suites can record failures
vanshk141999 Sep 24, 2026
a6548da
Merge pull request #3137 from brainstormforce/feat/1429-auto-advance-…
vanshk141999 Sep 24, 2026
9d7b773
refactor: move Distraction Free to Pro, keep only hooks in free
vanshk141999 Sep 24, 2026
b14d7f0
fix: remove redundant description from Show views and conversion rate…
avi1080p Sep 24, 2026
5065d84
Merge pull request #3164 from brainstormforce/fix/remove-views-conver…
vanshk141999 Sep 24, 2026
66232c3
feat: register no dashboard widgets while promotions are hidden
vanshk141999 Sep 24, 2026
3550be0
Merge pull request #3163 from brainstormforce/feat/3154-distraction-f…
vanshk141999 Sep 24, 2026
282c90c
Merge branch 'dev' of https://github.com/brainstormforce/sureforms in…
vanshk141999 Sep 24, 2026
10e7f35
Merge pull request #3165 from brainstormforce/dev-nr-2.12.8
vanshk141999 Sep 24, 2026
9c335d2
Version Bump 2.12.8
vanshk141999 Sep 24, 2026
91f5148
Changelog: cover every user-facing PR merged since 2.12.7
vanshk141999 Sep 24, 2026
73eef4e
Changelog: trim 2.12.8 entry
vanshk141999 Sep 24, 2026
98f98e3
Merge pull request #3166 from brainstormforce/version-bump-2.12.8
vanshk141999 Sep 24, 2026
ce07277
chore: update i18n translations
github-actions[bot] Sep 24, 2026
82a6c7d
Merge pull request #3168 from brainstormforce/i18n/next-release
vanshk141999 Sep 24, 2026
7cb405c
chore: 2.12.8 ships 25th September
vanshk141999 Sep 24, 2026
c3f5d7d
Merge pull request #3169 from brainstormforce/chore/2.12.8-release-date
vanshk141999 Sep 24, 2026
4e770b6
fix(settings): show add-on sections such as Distraction Free above Logs
vanshk141999 Sep 25, 2026
6e7392d
feat(settings): let add-on sections stage General settings and hide L…
vanshk141999 Sep 25, 2026
f83672c
feat(dashboard): full-width layout without Quick Access in Distractio…
vanshk141999 Sep 25, 2026
6b23f2f
fix(dashboard): cap the welcome video thumbnail width
vanshk141999 Sep 25, 2026
d52a8e6
chore(admin-menu): remove the New badge from Quizzes, Survey Reports …
vanshk141999 Sep 25, 2026
6f1ca01
fix(admin): hide the first-form WP pointer while promotions are hidden
vanshk141999 Sep 25, 2026
c7054c5
feat(logs): make Client_Logger::is_enabled() filterable via srfm_enab…
vanshk141999 Sep 25, 2026
b0fbbbf
test(html-form-detector): block HTTP in test_extract_fields_via_ai in…
vanshk141999 Sep 25, 2026
534493b
Merge pull request #3170 from brainstormforce/fix/distraction-free-se…
vanshk141999 Sep 25, 2026
ce646f3
Merge pull request #3167 from brainstormforce/next-release
vanshk141999 Sep 25, 2026
d2f9852
chore: strip internal-only paths from public mirror sync
vanshk141999 Sep 25, 2026
53454a3
Sync master from upstream
vanshk141999 Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .distignore
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ auth.json
credentials.json

# Directories
# Build-time artwork source. Webpack re-emits every @Image/onboarding import as a
# hashed file under assets/build/images/, so shipping this directory as well put
# the same 2.8 MB in the ZIP twice. The rest of images/ cannot be ignored --
# inc/gutenberg-hooks.php serves images/field-previews/* directly.
images/onboarding
node_modules
vendor
tests
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
**Contributors:** [brainstormforce](https://profiles.wordpress.org/brainstormforce/)
**Tags:** forms, ai forms, contact form, form builder, payment form
**Requires at least:** 6.4
**Tested up to:** 7.1
**Tested up to:** 7.1.2
**Requires PHP:** 7.4
**Stable tag:** 2.12.7
**Stable tag:** 2.12.8
**License:** GPLv2 or later
**License URI:** http://www.gnu.org/licenses/gpl-2.0.html

Expand Down Expand Up @@ -426,6 +426,10 @@ Visit the [SureForms features page](https://sureforms.com/features/?utm_source=w
You can report security issues through our [Bug Bounty Program](https://brainstormforce.com/bug-bounty-program/). We collaborate with Patchstack to validate, triage, and handle security reports.

## Changelog ##
### 2.12.8 - 25th September 2026 ###
* Improvement: The debug log no longer records routine validation stops, such as an empty required field, keeping it focused on real failures.
* Fix: Entry Logs now record the email notification sent when a form is submitted.
* Fix: Resolved an editor crash that prevented forms containing a Register block from opening.
### 2.12.7 - 12th September 2026 ###
* Improvement: Submission failure notices now offer View details, so you can read and copy the full diagnostics before contacting support.
* Improvement: The Form Checks panel now appears only when something genuinely needs attention, with clearer wording, keeping the sidebar focused.
Expand All @@ -441,8 +445,6 @@ You can report security issues through our [Bug Bounty Program](https://brainsto
* New: SureForms now detects a missing entries database table and offers a one-click repair, so submissions start saving again without manual database work.
* Fix: The Edit Form button no longer overlaps form fields on the front end.
* Fix: This update addressed a security bug. Props to Patchstack for reporting it responsibly to our team.
### 2.12.5 - 25th August 2026 ###
* Fix: Form submissions now go through reliably, even on sites where a performance plugin combines or defers JavaScript.
The full changelog is available [here](https://sureforms.com/whats-new/?utm_source=wordpress.org&utm_medium=whats_new).

## Upgrade Notice ##
709 changes: 239 additions & 470 deletions admin/admin.php

Large diffs are not rendered by default.

47 changes: 39 additions & 8 deletions admin/analytics.php
Original file line number Diff line number Diff line change
Expand Up @@ -990,6 +990,14 @@ private function detect_state_events() {
$onboarding_props = [];
$onboarding_analytics = Helper::get_srfm_option( 'onboarding_analytics', [] );

// Which wizard produced the blob. Outside the non-empty guard and not
// isset()-gated like the flags below, because absence IS the answer: a
// blob from the old wizard, or no blob at all, must still report 'no'.
// Without this the two wizards share one event name and can only be
// told apart by which properties happen to be present -- and a v2 run
// on Pro with no caching plugin emits none of the new ones.
$onboarding_props['onboarding_v2'] = ! empty( $onboarding_analytics['onboardingV2'] ) ? 'yes' : 'no';

if ( ! empty( $onboarding_analytics ) && is_array( $onboarding_analytics ) ) {
if ( ! empty( $onboarding_analytics['skippedSteps'] ) && is_array( $onboarding_analytics['skippedSteps'] ) ) {
$onboarding_props['skipped_steps'] = implode( ',', $onboarding_analytics['skippedSteps'] );
Expand All @@ -1011,15 +1019,38 @@ private function detect_state_events() {
$onboarding_props['exited_early'] = (bool) $onboarding_analytics['exitedEarly'] ? 'yes' : 'no';
}

if ( ! empty( $onboarding_analytics['premiumFeatures']['selectedFeatures'] ) && is_array( $onboarding_analytics['premiumFeatures']['selectedFeatures'] ) ) {
$premium = array_filter(
$onboarding_analytics['premiumFeatures']['selectedFeatures'],
static function( $f ) {
return 'ai-form-generation' !== $f && 'entries' !== $f;
}
// Add-ons step: the wizard shows one feature tab at a time
// instead of a checkbox list, so we report which tabs were opened and
// whether Upgrade was clicked. Blobs written by older wizards carry
// neither key and emit neither property.
if ( ! empty( $onboarding_analytics['premiumFeatures']['viewedTabs'] ) && is_array( $onboarding_analytics['premiumFeatures']['viewedTabs'] ) ) {
// The blob is whatever the wizard POSTed. The tabs are a closed
// set of four, so intersect against it rather than filtering on
// type: that drops anything unrecognised and caps both the
// content and the length of the property in one step.
$viewed_tabs = array_values(
array_intersect(
array_map( 'strval', array_filter( (array) $onboarding_analytics['premiumFeatures']['viewedTabs'], 'is_scalar' ) ),
[ 'multistep', 'conditional', 'calculation', 'conversational' ]
)
);
$onboarding_props['selected_premium_features'] = implode( ',', $premium );
$onboarding_props['premium_features_count'] = (string) count( $premium );
$onboarding_props['viewed_premium_tabs'] = implode( ',', $viewed_tabs );
}

if ( isset( $onboarding_analytics['premiumFeatures']['upgradeClicked'] ) ) {
$onboarding_props['premium_upgrade_clicked'] = (bool) $onboarding_analytics['premiumFeatures']['upgradeClicked'] ? 'yes' : 'no';
}

// Cache-conflict step: shown only when a recognised caching plugin
// is active; "yes" means the user pressed "I've fixed this".
//
// Read this as an abandonment signal, not as intent. Acknowledging
// is the only way past the step, so everyone who completes the
// wizard reports "yes" and "no" only ever appears next to
// exited_early. It cannot answer "did people act on the warning" --
// only "did they stop here".
if ( isset( $onboarding_analytics['cacheConflictAcknowledged'] ) ) {
$onboarding_props['cache_conflict_acknowledged'] = (bool) $onboarding_analytics['cacheConflictAcknowledged'] ? 'yes' : 'no';
}
}

Expand Down
Loading
Loading