- Added support for dynamically populating File Upload fields with file URLs. Note: the URL is saved to the entry; the file itself is not saved in the form uploads folder.
- Added the [gform_submission_files_pre_save_field_value](https://docs.gravityforms.com/gform_submission_files_pre_save_field_value/) filter, so files can be modified (e.g. renamed) just before they are saved to the form folder and entry.
- Updated the Checkboxes and Radio Buttons fields to show more choices in the form editor when the "Display in columns" setting is enabled for a more accurate preview.
- Updated the block editor Advanced settings tab for better visibility and consistency.
- Fixed an issue where the values of legacy post fields aren't saved on form submission if the page query string includes the `view` parameter with a value of `entry`. Credit: The Gravity PDF team.
- Fixed the formatting of the Time field in RTL languages.
- Fixed an issue where the submitted values of some fields with conditional logic based on a Consent field are not saved if the Consent field was the first field on the form when the conditional logic rule was configured.
- Fixed an issue where the Honeypot field can be removed when paging through a multipage form and the new AJAX submission method is in use.
- Fixed an issue where the value saved is truncated when the selected choice of a Dropdown field contains '<'.
- Fixed an issue where an Email field with confirmation enabled passes validation when the first input is empty and the confirmation input is not empty.
- Fixed an issue where two instances of the gform variable (hooks script) can be output with some themes.
- Fixed an issue where Option field choices HTML tags are displayed as text in the order summary.
- Fixed a PHP fatal error that occurs when editing an entry and the existing value of a multi-file enabled File Upload field JSON decodes to `null`.
- Fixed an issue where the calculation field type uses an incorrect markup tag.
- Fixed a bug that prevented the search box from showing on the Entries screen.
- API: Fixed an issue where REST API form submissions don't validate or save files submitted using array-based input names (e.g. input_1[]) for multi-file enabled File Upload fields.
- API: Added several new functions to `GF_Field_FileUpload` including: `get_tmp_file_details()`, `get_submission_files()`, `set_submission_files()`, `populate_file_urls_from_value()`, and `populate_file_url()`.
- API: Deprecated `GFFormsModel::get_temp_filename()`, use `$file_upload_field->get_tmp_file_details( $file_or_name )` instead.
- AF: Added support for enabling Post Payment actions by default via the GFFeedAddon::get_post_payment_actions_config() method.
- AF: Fixed an issue where the add-on tabs on the settings page are not sorted alphabetically.
- Fixed an issue where the values of legacy post fields aren't saved on form submission if the page query string includes the `view` parameter with a value of `entry`. Credit: The Gravity PDF team.
- Fixed an issue where the time field is formatted incorrectly in RTL.
- Fixed an issue where some fields with conditional logic based on a Consent field are not saved if the Consent field was the first field on the form when the conditional logic rule was configured.
- Fixed an issue where the honeypot field can be removed when paging through a multipage form and the new AJAX submission method is in use.
- Fixed an issue where the value saved is truncated when the selected choice of a Dropdown field contains '<'.
- Fixed an issue where an Email field with confirmation enabled does not fail validation when the first input is empty and the confirmation input is not empty.
- Fixed a PHP fatal error and warnings that can occur if an empty batch is returned during background processing.
- Fixed an issue where the values of hidden and readonly inputs for fields that have failed state validation (e.g. single product field) are repopulated with the invalid submitted values instead of reverting to their original values.
- Fixed an issue that prevents forms with legacy markup from being able to disable legacy markup in Form Settings.
- Added full text of the form name when hovering over a title in the form dropdown.
- Added settings to the Radio and Checkbox fields to replace the list column Ready Classes.
- Added sanitization to the enableEnhancedUI property in GF_Field_Select to be consistent with GF_Field_Multiselect.
- Added the [gform_entries_filter_count_queries](https://docs.gravityforms.com/gform_entries_filter_count_queries/) filter, which can be used to add queries for custom filter links for the entries list page.
- Added the [gform_honeypot_input_name](https://docs.gravityforms.com/gform_honeypot_input_name/) filter, so the input name used by the honeypot input can be customized.
- Updated the [gform_filter_links_entry_list](https://docs.gravityforms.com/gform_filter_links_entry_list/) filter, so the entry counts are passed as the 4th param.
- Fixed a JavaScript error that can occur on form render when themes and plugins output unexpected content in the admin-ajax.php response.
- Fixed a PHP warning that occurs on third-party admin pages that use the id query argument when a script that requires the gf_vars variable has been enqueued.
- Fixed a bug that causes the reset button on the field map setting to sometimes display on top of other elements.
- Fixed an issue that can cause ACF fields to trigger form submissions when editing a post.
- Fixed an issue where all the rows of a List type field can be deleted if the delete row buttons are clicked in quick succession.
- Fixed the entry detail page to display an error message if the entry id query argument is invalid. Credit: The Gravity Wiz Team.
- Fixed an issue where data is not saved when conditional rules match against empty Consent field.
- Fixed an issue where required indicator is displayed for Consent field in entry edit view when field label is hidden.
- Fixed an issue where the results page is not displaying the charts correctly in RTL languages.
- Fixed an issue with the legacy post creation feature that impacted the performance of all form submissions.
- Fixed class attribute being declared twice for single product base price input when quantity field is disabled.
- AF: Fixed an issue where the wp_inline_script_attributes filter is not impacting the script tag for the JavaScript gform.extensions variable.
- AF: Updated the entries list page to include filter links for the various payment statuses.
- API: Updated the $step attribute used with the text $input_type settings field to be public.
- API: Fixed issue where the placeholder attribute was not working correctly in the Settings API.
- Added sanitization to the enableEnhancedUI property in GF_Field_Select to be consistent with GF_Field_Multiselect.
- Fixed issue with Placeholder attribute not working properly.
- Added a setting to replace the list column ready classes.
- Fixed an issue where data is not saved when conditional rules match against empty Consent field.
- AF: Fixed an issue where the wp_inline_script_attributes filter is not impacting the script tag for the JavaScript gform.extensions variable.
- API: Updated the $step attribute used with the text $input_type settings field to be public.
- Fixed a bug that causes the reset button on the field map setting to sometimes appear on top of other elements.
- Added the [gform_entries_filter_count_queries](https://docs.gravityforms.com/gform_entries_filter_count_queries/) filter, which can be used to add queries for custom filter links for the entries list page.
- Updated the [gform_filter_links_entry_list](https://docs.gravityforms.com/gform_filter_links_entry_list/) filter, so the entry counts are passed as the 4th param.
- AF: Updated the entries list page to include filter links for the various payment statuses.
- Fixed an issue where an error message is not displayed when linking to the entry detail page with an invalid lid query argument. Credit: The Gravity Wiz Team.
- Fixed a PHP warning that occurs on third-party admin pages that use the id query argument when a script that requires the gf_vars variable has been enqueued.
- Added the [gform_enable_download_nocache_headers](https://docs.gravityforms.com/gform_enable_download_nocache_headers/) filter to allow developers to enable or disable the no-cache headers for file downloads. Credit: The GravityKit Team.
- Added the [gform_email_field_rejectable_values](https://docs.gravityforms.com/gform_email_field_rejectable_values/) filter, which can be used to provide an array of values or partial values that the email field should reject during validation.
- Added security enhancements.
- Fixed the time field value not being saved and PHP notices on submission if a form contains administrative time field with dynamic population enabled.
- Fixed a PHP fatal error that can occur in some hosting environments when the form is saved via Ajax in the form editor.
- Updated the message displayed when the user has exceeded the license verification rate limit to be more informative.
- Updated messages in the form editor and form settings page to provide more information about the upcoming deprecation of Ready Classes in version 3.1.0.
- Updated the UI of dialogs and flyouts.
- Updated background processor error handler priority to increase chances of fatal errors being logged.
- Removed notifications from form templates.
- API: Added inline documentation for the Theme Framework CSS API.
- API: Fixed an issue with the JS gform.product.getPaymentAmount() method that returns the wrong payment amount in certain situations.
- Added the constant [GF_ENABLE_NOTIFICATION_EMAIL_HEADER](https://docs.gravityforms.com/gf_enable_notification_email_header) and filter [gform_notification_email_header](https://docs.gravityforms.com/gform_notification_email_header) to allow enabling and setting of `X-Gravity-Forms-Source` email header.
- Added alt attribute to the checked indicator image in the consent field for improved accessibility.
- Fixed an issue where the "Subscription Created" notification is not sent in some situations.
- Fixed setting of default value for email confirmation input when field has conditional logic enabled.
- Fixed an issue where the "Select All" choice for Multiple Choice fields is rendered incorrectly.
- Fixed an issue where forms can't be saved in the form editor when third-party add-ons introduce invalid JSON syntax to the form object.
- AF: Fixed an issue where the save success message can be displayed when the edit feed page is redirected to from another add-on.
- API: Updated `GF_Field::get_value_entry_detail()` to display an inline error message on the entry detail page when the field uses an array-based value and the add-on that includes the field is inactive or hasn't defined it's own `get_value_entry_detail` method.
- API: Fixed a display issue with checkbox type setting choice labels.
- Updated the image choice file upload UI to account for file upload component updates.
- Updated the help page to be more accessible.