Skip to content

Bring stored entries across from Gravity Forms and WPForms too - #13

Merged
AllTerrainDeveloper merged 2 commits into
mainfrom
importer/entries-everywhere
Aug 19, 2026
Merged

AllTerrainDeveloper merged 2 commits into
mainfrom
importer/entries-everywhere

Conversation

@AllTerrainDeveloper

Copy link
Copy Markdown
Owner

Note: stacked on #12 — merge that first; this diff then shrinks to just the GF/WPForms work.

What

#12 landed the generic entry-migration contract with only Contact Form 7 behind it. This completes the story: all three built-in importers now migrate stored submissions, not just forms.

Gravity Forms

  • Entries read straight from gf_entry / gf_entry_meta — no GFAPI, so it works with the plugin deactivated.
  • Input-id meta (5, 5.3, 5.6) assembled into the shape each converted field stores: name parts and address lines onto composites, one ticked box per dotted row onto checkbox arrays, JSON/comma multiselects, and a List's serialized rows onto the repeater it became.
  • atf_gf_map() recomputes the field map with the same mint-then-drop passes the converter runs (pinned by a test that ids keep counting past a dropped captcha).
  • active + spam come across; trash stays where somebody put it.

WPForms

  • Entries read from the wpforms_entries table WPForms Pro writes; a Lite site (which stores nothing) is accurately offered nothing.
  • Composites read from sibling keys (first/last, address1/postal/…), choice groups split from their newline-joined value.
  • partial and abandoned stay behind — nobody ever sent them; payment statuses like completed come across as ordinary entries.
  • Likert deliberately unmapped rather than guess-parsed — a wrong answer is worse than a visibly blank one.

Both reuse the whole generic layer from #12 unchanged: chunked passes, original dates, spam-as-spam, idempotent re-runs, sources never modified.

Tests

  • 589 PHPUnit ✓ (11 new across two files, fixtures built as the source plugins write their storage)
  • PHPCS: 0 errors
  • docs/hooks-reference.md + readme.txt updated in the same change

🤖 Generated with Claude Code

https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp

AllTerrainDeveloper and others added 2 commits August 19, 2026 13:27
Importing a form is the half of a migration somebody does immediately;
the years of submissions sitting in Flamingo are the half they think of
a week later. Forms now remember where they came from and how their
fields map, entries import in chunks with their original dates, spam
arrives as spam, and running it twice imports nothing twice.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp
The registry contract landed with only Contact Form 7 behind it; now all
three built-in importers implement the pair. Gravity's entries are read
straight from its gf_entry tables, input-id meta assembled into the shape
each converted field stores — name parts, address lines, ticked boxes,
a List's rows onto the repeater it became. WPForms Pro's entries come out
of its fields JSON the same way, and a Lite site, which stores nothing,
is accurately offered nothing. Half-typed partial and abandoned entries
stay behind: nobody ever sent them.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0119U4sRRWGcTQdwYreTwpAp
@AllTerrainDeveloper
AllTerrainDeveloper merged commit 0d61083 into main Aug 19, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant