Changed
- OAuth integration connect uses Plugin Kit
<pk-connect-oauth>; removed jQuery dirty-form glue. - Integration credentials connect uses Plugin Kit
<pk-connect>(declarative Twig + WC bundle) instead of the ReactIntegrationConnectAppmount. - Bump
verbb/authto^2.0.44(Salesforce/Pardot OAuth PKCE and session refresh). - Allow
dompdf/dompdf^3.0alongside v1/v2. - Add Theme setting for Friendly Captcha (light/dark/auto). (#2907)
Fixed
- Fix a security vulnerability with how permissions were handled for some submission actions.
- Fix sending an email notification and running an integration for a submission not requiring the “Save submissions” permission.
- Fix a security vulnerability with how submission redirect URLs were handled (guest Control Panel variants of anonymous front-end actions are rejected; front-end completion no longer renders posted
redirectvalues through Craft’s unsandboxed object-template Twig). - Fix email preview and test-send actions not enforcing Control Panel and Formie permissions.
- Fix required Multi-line Text fields with Rich Text enabled being skipped by client-side validation — the backing
<textarea>lives in adisplay: nonewrapper, so visibility is now judged from the rich-text editor host instead. (#2947) - Fix field validation errors relying on
aria-errormessagealone — also merge the error message id intoaria-describedby(keeping any instruction ids) so assistive tech with weakaria-errormessagesupport still announces the error. (#2946) - Fix redirect URLs merging request query string values in a way that could leave brace-bearing params available for later template interpretation. Query params are now appended after reference parsing as literal (encoded) values.
- Fix cached form CSRF refresh URLs generating a double subdomain when
CRAFT_BASE_CP_URLis set alongside per-site subdomains (e.g.my-project.staging.example.com). - Fix an error when sending an email notification for a submission that no longer exists.
- Fix Pardot form handler payloads sending option fields as indexed/
field.valuekeys instead of a single field value, and multi-option values with commas instead of Salesforce/Pardot semicolons. - Fix ActiveCampaign Email marketing contact payloads sending blank unmapped properties (now
array_filter’d like the CRM path). (#2934) - Fix User element integration silently skipping group assignment when a configured group UID no longer resolves. (#2909)
- Fix Phone country dropdown stuck disabled on multi-page forms (and when conditions re-enable the tel input).
- Fix Agree fields not appearing in the Calculations formula field picker.
- Fix filtering submissions by ID (and UID) in the All forms index view.
- Fix broken French translation encoding (
\\u{a0}literals). - Fix missing validator/payment translation keys.
- Fix Date field upgrade path for sub-field ordering and year range when migrating to Formie 4.
- Fix page and next-button conditions using nested/legacy field references not being migrated to
{field:…}syntax. - Fix Formie permissions such as “Access reports” never saving for a user group — some permission-seeding migrations inserted camel-cased names into
userpermissions, but Craft stores names lowercased and matches them case-sensitively, so the assignment could never be read back. Existing mixed-case rows are now normalised (and merged into their lowercase equivalents) by a new migration. - Fix Recent Submissions widget breaking the control panel because
WidgetsVendorAssetpublished from asrc/path that is not shipped in the package (#2939). - Fix opening dialogs adding a spurious gap under the trigger/content when the overlay was a sibling inside a Tailwind
space-y-*stack (:not(:last-child)treats in-treepk-dialoghosts as layout siblings). Notifications, Reports, Client Events, Calculations, and dynamic option “convert to static” now keep overlays outside those stacks (or usegapinstead).