2.2.0 - March 15, 2026
- PHP 7.4 through 8.x compatibility fixes, including PHP 8.3 admin-side static closure compatibility work and various nullable signature adjustments.
- Fixes for form state handling, scanner state reuse, and preservation of submitted values such as
0.
- Improved deserialization and import handling for saved forms and CGBetterForms data.
- Fixes for file validation, field conversion string checks, frontend date-check handling, and template validation edge cases.
- Additional fixes for optional empty date fields, file upload value handling, accepted file type matching, invalid upload script markup, and preserving inline and async upload admin settings when saving forms.
- Fixed multiselect output for grouped
<select> options inside <optgroup> elements.
- Minor hardening improvements, thanks to Jocelyn: safer legacy form data detection in
FormDAO and ignoring empty keys in smtfm_set prerender assignments.
- Improved admin-side edit form behavior: template modification warnings now reappear correctly after template edits, apply/save messaging is more consistent, and non-save validation or handler actions are no longer blocked by browser-required fields in the main form tab.
- Reduced noisy HTML5/custom-element scan warnings from PHP's legacy libxml HTML parser.
- Added safe Smarty response-template variables for original field names:
{$fields['field-name']} and {$raw_fields['field-name']}.
- Built-in email and file disposition template resets now use the safe array syntax so field names with dashes or other special characters no longer generate unsafe Smarty expressions.
- Reorganized and expanded the module help into clearer topic-based tabs covering quick start, template rules, validations, handlers, Smarty/UDT usage, hooks, and API details.
- Upgrade note: Re-scanning refreshes field metadata only. Existing saved disposition, validation, computed-value, redirect, webhook, and final-message templates are not rewritten automatically. If an older form still fails with an error such as
Unsupported operand types: null - string, reset or manually update the affected Smarty template.