From cd14c36ccadd44efe1e96598e49ad66c01ec716d Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 19 May 2026 12:11:26 +1000 Subject: [PATCH 01/21] chore: bump version to 6.14.3 --- CHANGELOG.md | 6 ++++++ pdf.php | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91e05e2ca..b5f5091f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## Gravity PDF +### 6.14.3 +* ๐ŸžBug: Preserve the selected template when setting up a new PDF on a form +* ๐ŸžBug: Reset Gravity Wiz Nested Form field IDs after each group in PDFs +* ๐Ÿงน Housekeeping: Better screen-reader support for admin pages +* ๐Ÿงน Housekeeping: WordPress 7.0 Compatibility + ### 6.14.2 * ๐ŸžBug: Fix PHP warning caused by the GFCommon::get_lead_field_display() API change in Gravity Forms 2.9.29 * ๐ŸžBug: Fix merge tag rendering issue when switching between PDF templates diff --git a/pdf.php b/pdf.php index 5063b01c8..f6d7c07bc 100644 --- a/pdf.php +++ b/pdf.php @@ -1,8 +1,8 @@ Date: Mon, 18 May 2026 08:54:08 +1000 Subject: [PATCH 02/21] fix: settings, view, and SCSS tweaks for WP 7.0 / PHP 8.5 Preserve the chosen template across the new-PDF POST flow in Model_Form_Settings before the row is saved, reset the nested-form field id after each iteration in Field_Form so subsequent passes start from a clean state, wrap radio/multicheck/conditional_logic/ paper_size inputs in a fieldset/legend in the shared settings_field markup, add the missing gforms_edit_form class to the general and tools form wrappers, and apply the matching SCSS tweaks for WordPress 7.0 / PHP 8.5 compatibility. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/Helper/Fields/Field_Form.php | 6 +- src/Model/Model_Form_Settings.php | 6 +- src/View/html/GravityForms/settings_field.php | 53 +++-- src/View/html/Settings/general.php | 2 +- src/View/html/Settings/tools.php | 2 +- .../Component/FontManager/_font-manager.scss | 195 +++++++++--------- .../scss/Component/FontManager/_footer.scss | 13 ++ .../scss/Component/HelpTab/_help-tab.scss | 57 +++-- src/assets/scss/Component/_button.scss | 20 +- src/assets/scss/Component/_color-picker.scss | 6 +- src/assets/scss/Component/_core-fonts.scss | 13 ++ src/assets/scss/Component/_rich-text.scss | 19 -- .../scss/Component/_template-manager.scss | 4 + src/assets/scss/Pages/_pdf-settings.scss | 16 +- src/assets/scss/_base.scss | 12 +- src/assets/scss/_reset.scss | 10 +- src/assets/scss/gfpdf-styles.scss | 80 +++---- 17 files changed, 283 insertions(+), 231 deletions(-) diff --git a/src/Helper/Fields/Field_Form.php b/src/Helper/Fields/Field_Form.php index 1c2069294..d286221be 100644 --- a/src/Helper/Fields/Field_Form.php +++ b/src/Helper/Fields/Field_Form.php @@ -91,10 +91,10 @@ public function html( $value = '', $label = true ) { $this->field->id = "$field_id-$key"; $html .= parent::html( $markup ); - } - /* Reset the ID back to the original value */ - $this->field->id = $field_id; + /* Reset the ID back to the original value */ + $this->field->id = $field_id; + } return $html; } diff --git a/src/Model/Model_Form_Settings.php b/src/Model/Model_Form_Settings.php index 820e54657..2f490f5c6 100644 --- a/src/Model/Model_Form_Settings.php +++ b/src/Model/Model_Form_Settings.php @@ -627,6 +627,7 @@ public function get_template_name_from_current_page() { /* phpcs:enable */ /* If we don't have a specific PDF we'll use the defaults */ + $template = ''; if ( empty( $pid ) || empty( $form_id ) ) { $template = $this->options->get_option( 'default_template', 'zadani' ); } else { @@ -635,8 +636,9 @@ public function get_template_name_from_current_page() { if ( ! is_wp_error( $pdf ) ) { $template = $pdf['template']; - } else { - $template = ''; + } elseif ( ! empty( $_POST['gfpdf_settings']['template'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing + /* in the middle of creating a new PDF, and not yet saved in the DB. Grab from POST data */ + $template = sanitize_html_class( $_POST['gfpdf_settings']['template'] ); // phpcs:ignore WordPress.Security.NonceVerification.Missing } } diff --git a/src/View/html/GravityForms/settings_field.php b/src/View/html/GravityForms/settings_field.php index 37708a8f7..3ead3aa35 100644 --- a/src/View/html/GravityForms/settings_field.php +++ b/src/View/html/GravityForms/settings_field.php @@ -14,20 +14,43 @@ /** @var $args array */ +$for = $args['callback_args']['type'] !== 'rich_editor' ? + 'gfpdf_settings[' . $args['callback_args']['id'] . ']' : + 'gfpdf_settings_' . $args['callback_args']['id']; + +/* Group complex fields together into a fieldset */ ?> -
- -
- - - - - -
- - - -
+ +
+ +
+ + + + + +
+ + + +
+ +
+ +
+ + + + + + + +
+ + + +
+ diff --git a/src/View/html/Settings/general.php b/src/View/html/Settings/general.php index 968e176bd..2c47cbdd4 100644 --- a/src/View/html/Settings/general.php +++ b/src/View/html/Settings/general.php @@ -23,7 +23,7 @@
-
+ diff --git a/src/View/html/Settings/tools.php b/src/View/html/Settings/tools.php index 68060576c..8538af52a 100644 --- a/src/View/html/Settings/tools.php +++ b/src/View/html/Settings/tools.php @@ -23,7 +23,7 @@
- + diff --git a/src/assets/scss/Component/FontManager/_font-manager.scss b/src/assets/scss/Component/FontManager/_font-manager.scss index 0d3bfa07e..310c1d916 100644 --- a/src/assets/scss/Component/FontManager/_font-manager.scss +++ b/src/assets/scss/Component/FontManager/_font-manager.scss @@ -57,6 +57,19 @@ cursor: pointer; text-decoration: underline; } + + button.link { + background-color: unset; + border: unset; + box-shadow: unset; + text-decoration: underline; + color: base.$link-color; + padding: 0; + + &:hover { + cursor: pointer; + } + } } .font-list-header, @@ -163,127 +176,125 @@ } } - form { - h2 { - font-size: 1.8em; - margin: 0.5rem 0; + h2 { + font-size: 1.8em; + margin: 0.5rem 0; - & + p { - margin: 0; - } + & + p { + margin: 0; } + } - label { - display: block; - margin-top: 1rem; - font-size: 1rem; - font-weight: 600; + label { + display: block; + margin-top: 1rem; + font-size: 1rem; + font-weight: 600; - & + p { - margin: 0.325rem 0; - } + & + p { + margin: 0.325rem 0; } + } - .required { - color: base.$validation-error-color; - font-size: 0.8rem; - } + .required { + color: base.$validation-error-color; + font-size: 0.8rem; + } - #gfpdf-font-files-setting { - display: grid; - grid-template-columns: 50% 50%; - grid-template-rows: 1fr 1fr; - gap: 1rem; - margin: 0.75rem 0; - width: 96%; + #gfpdf-font-files-setting { + display: grid; + grid-template-columns: 50% 50%; + grid-template-rows: 1fr 1fr; + gap: 1rem; + margin: 0.75rem 0; + width: 96%; - a { - color: unset; + a { + color: unset; - &:focus { - box-shadow: unset; - } + &:focus { + box-shadow: unset; } + } - .drop-zone { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - border: 5px dashed base.$lighter-highlight-color; - height: 160px; - transition: all 0.3s ease-out; - - &:hover, - &.active { - background-color: base.$lighter-highlight-color; - border: 5px solid base.$lighter-highlight-color; + .drop-zone { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border: 5px dashed base.$lighter-highlight-color; + height: 160px; + transition: all 0.3s ease-out; - .dashicons { - background-color: #ffffff; - color: base.$highlight-color; - } - } + &:hover, + &.active { + background-color: base.$lighter-highlight-color; + border: 5px solid base.$lighter-highlight-color; - &:focus { - outline: none; - border: 5px dashed base.$default-text-color; + .dashicons { + background-color: #ffffff; + color: base.$highlight-color; } + } - &.required { - border: 5px dashed base.$error-color; - - .dashicons { - background-color: base.$error-color; - color: #ffffff; - } + &:focus { + outline: none; + border: 5px dashed base.$default-text-color; + } - &:focus { - border-color: base.$default-text-color; - } - } + &.required { + border: 5px dashed base.$error-color; - &.error { - background-color: base.$validation-error-color; - border-color: base.$validation-error-color; + .dashicons { + background-color: base.$error-color; color: #ffffff; } - input { - display: none; + &:focus { + border-color: base.$default-text-color; } + } - .gfpdf-font-filename { - overflow: hidden; - text-align: center; + &.error { + background-color: base.$validation-error-color; + border-color: base.$validation-error-color; + color: #ffffff; + } + + input { + display: none; + } - &.required { - color: base.$validation-error-color; - } + .gfpdf-font-filename { + overflow: hidden; + text-align: center; + + &.required { + color: base.$validation-error-color; } + } - .dashicons { - width: 70px; - height: 70px; - margin: 0.675rem; - background-color: base.$lighter-highlight-color; - border-radius: 50%; - font-size: 3.2rem; - color: base.$highlight-color; - cursor: pointer; + .dashicons { + width: 70px; + height: 70px; + margin: 0.675rem; + background-color: base.$lighter-highlight-color; + border-radius: 50%; + font-size: 3.2rem; + color: base.$highlight-color; + cursor: pointer; - &:before { - margin-left: -1px; - vertical-align: middle; - } + &:before { + margin-left: -1px; + vertical-align: middle; } + } - .dashicons-trash { - font-size: 2.9rem; + .dashicons-trash { + font-size: 2.9rem; - &:before { - margin-left: 3px; - } + &:before { + margin-left: 3px; } } } diff --git a/src/assets/scss/Component/FontManager/_footer.scss b/src/assets/scss/Component/FontManager/_footer.scss index d55a61859..09e21bc2f 100644 --- a/src/assets/scss/Component/FontManager/_footer.scss +++ b/src/assets/scss/Component/FontManager/_footer.scss @@ -110,6 +110,19 @@ } } + .template-usage-link__button { + background-color: unset; + border: unset; + box-shadow: unset; + text-decoration: underline; + color: base.$link-color; + padding: 0; + + &:hover { + cursor: pointer; + } + } + &.success { color: base.$success-color; } diff --git a/src/assets/scss/Component/HelpTab/_help-tab.scss b/src/assets/scss/Component/HelpTab/_help-tab.scss index 719c160fb..17340587d 100644 --- a/src/assets/scss/Component/HelpTab/_help-tab.scss +++ b/src/assets/scss/Component/HelpTab/_help-tab.scss @@ -47,14 +47,14 @@ text-align: center; .button-large { - background: #007cba; + background: var(--wp-admin-theme-color, '#007cba'); border: none; - height: 35px; - line-height: 33px; - padding: 0 17px 9px; + height: 40px; + line-height: 40px; + padding: 0 16px; &:hover { - background: #0071a1; + background: var(--wp-admin-theme-color-darker-10, '#0071a1'); } } } @@ -89,6 +89,8 @@ background: #fff; box-shadow: 0 1px 1px 0 rgba(85, 95, 110, .2); padding: 16px 16px 16px 46px; + min-height: 40px; + line-height: normal; vertical-align: middle; white-space: normal; font-size: inherit; @@ -130,7 +132,6 @@ border: 0; border-radius: 4px 0 0 4px; background-color: hsla(0, 0%, 100%, 0); - padding-top: 16px; width: 46px; height: 100%; vertical-align: middle; @@ -176,7 +177,6 @@ border: 0; background: none; cursor: pointer; - padding-top: 8px; font-size: inherit; -webkit-user-select: none; -moz-user-select: none; @@ -219,25 +219,22 @@ /* Search result */ .search-result:not(:empty) { - padding: 1rem 1rem 0.8rem 1rem; + padding-block: 1rem; .group-name { - color: #3E7DA6; + color: var(--wp-admin-theme-color-darker-20, '#2a31a3'); font-size: 0.85rem; font-weight: 600; line-height: 32px; - margin: 0 -4px; - padding: 8px 4px 0; - top: 0; - z-index: 10; } - ul { + ol { + margin: 0; + list-style: none; + li { border-radius: 4px; - display: flex; padding-bottom: 4px; - position: relative; a { background-color: #fff; @@ -247,8 +244,18 @@ width: 100%; text-decoration: none; + mark { + color: var(--wp-admin-theme-color-darker-20, '#2a31a3'); + background: none; + } + &:hover { - background-color: #3e7da6; + background-color: var(--wp-admin-theme-color-darker-20, '#2a31a3'); + + mark { + color: #fff; + text-decoration: underline; + } .hit-container { .hit-icon { @@ -263,11 +270,6 @@ text-overflow: ellipsis; } } - - .hit-action { - color: #fff; - display: flex; - } } } @@ -308,19 +310,10 @@ font-size: 0.75rem; } } - - .hit-action { - align-items: center; - color: rgb(150, 159, 175); - display: none; - height: 22px; - stroke-width: 1.4; - width: 22px; - } } } } } } } -} \ No newline at end of file +} diff --git a/src/assets/scss/Component/_button.scss b/src/assets/scss/Component/_button.scss index 50eab98e9..11c03f1db 100644 --- a/src/assets/scss/Component/_button.scss +++ b/src/assets/scss/Component/_button.scss @@ -2,14 +2,30 @@ #tab_PDF { + .button:not(.wp-editor-wrap .button):not(.wp-picker-container .button) { + @include button.reset; + line-height: 2.95; + + &:not(.primary):hover { + border-color: unset; + background-color: unset; + } + } + /* Template and Font Manager Advanced Button */ - #gpdf-advance-template-selector, #gpdf-advance-font-manager-selector { + #gfpdf-template-container, #gfpdf-font-manager-container { display: inline-block; vertical-align: top; button { @include button.reset; - line-height: 2.95; + min-height: 32px; + line-height: 2.30769231; + + &.primary:hover { + background: #242748; + border-color: #242748; + } } } } diff --git a/src/assets/scss/Component/_color-picker.scss b/src/assets/scss/Component/_color-picker.scss index b3f04c346..c036e716b 100644 --- a/src/assets/scss/Component/_color-picker.scss +++ b/src/assets/scss/Component/_color-picker.scss @@ -3,13 +3,14 @@ #tab_PDF { .wp-picker-container { - button { + .button { padding: 0 0 0 35px; border-width: 1px; border-style: solid; border-color: rgb(144, 146, 178); border-image: initial; height: auto; + line-height: 2.7; .wp-color-result-text { font-size: 0.875rem; @@ -24,7 +25,8 @@ input[type="text"] { width: 5.25rem; font-size: 1rem; + height: 42px; } } } -} \ No newline at end of file +} diff --git a/src/assets/scss/Component/_core-fonts.scss b/src/assets/scss/Component/_core-fonts.scss index fbb23b1f3..be51475aa 100644 --- a/src/assets/scss/Component/_core-fonts.scss +++ b/src/assets/scss/Component/_core-fonts.scss @@ -22,5 +22,18 @@ .gfpdf-core-font-status-error { color: base.$error-color; } + + .gfpdf-core-font-retry-link { + background-color: unset; + border: unset; + box-shadow: unset; + text-decoration: underline; + color: inherit; + padding: 0; + + &:hover { + cursor: pointer; + } + } } } diff --git a/src/assets/scss/Component/_rich-text.scss b/src/assets/scss/Component/_rich-text.scss index 983e4b305..bfa303248 100644 --- a/src/assets/scss/Component/_rich-text.scss +++ b/src/assets/scss/Component/_rich-text.scss @@ -1,5 +1,3 @@ -@use '../Mixins/button'; - #tab_PDF { /* Rich Text field */ @@ -12,21 +10,4 @@ top: 3rem; } } - - .wp-editor-wrap { - .wp-editor-tools { - button { - @include button.reset; - margin: 0; - } - - .wp-editor-tabs button { - margin-left: 5px; - } - } - - .quicktags-toolbar .button { - @include button.reset; - } - } } diff --git a/src/assets/scss/Component/_template-manager.scss b/src/assets/scss/Component/_template-manager.scss index ff7e00f85..5962c9607 100644 --- a/src/assets/scss/Component/_template-manager.scss +++ b/src/assets/scss/Component/_template-manager.scss @@ -26,6 +26,10 @@ display: block; } + &.active .theme-name { + background: #1d2327; + } + .theme-actions { opacity: 1; left: inherit; diff --git a/src/assets/scss/Pages/_pdf-settings.scss b/src/assets/scss/Pages/_pdf-settings.scss index b006e2bec..b5f697543 100644 --- a/src/assets/scss/Pages/_pdf-settings.scss +++ b/src/assets/scss/Pages/_pdf-settings.scss @@ -12,6 +12,10 @@ } /* Merge tag box */ + .gform-settings-input__container--with-merge-tag { + width: 100%; + } + .all-merge-tags { &.textarea { .tooltip-merge-tag { @@ -45,17 +49,7 @@ .gfpdf-gf-2-6 { .gfpdf-settings-field-wrapper { .wp-editor-wrap { - margin-right: 0rem; - } - } - - .wp-media-buttons { - .all-merge-tags { - top: -0.15rem; - } - - .gform-icon--merge-tag { - font-size: 2.25rem; + margin-right: 0; } } } diff --git a/src/assets/scss/_base.scss b/src/assets/scss/_base.scss index d9d1edf11..01eceb173 100644 --- a/src/assets/scss/_base.scss +++ b/src/assets/scss/_base.scss @@ -1,11 +1,11 @@ -$primary-color: #3E7DA6; +$primary-color: #3e7da6; $default-text-color: #242748; -$success-color: #22A753; -$error-color: #DD301D; -$validation-error-color: #B71F1F; +$success-color: #22a753; +$error-color: #dd301d; +$validation-error-color: #b71f1f; -$lighter-highlight-color: #D5D7E9; -$highlight-color: #5B5E80; +$lighter-highlight-color: #d5d7e9; +$highlight-color: #5b5e80; $link-color: #0073aa; diff --git a/src/assets/scss/_reset.scss b/src/assets/scss/_reset.scss index 552f951cf..b7ca76778 100644 --- a/src/assets/scss/_reset.scss +++ b/src/assets/scss/_reset.scss @@ -1,13 +1,13 @@ /* WP left sidebar */ div#adminmenuback { - z-index: 2; + z-index: 2; } -.wp-clearfix:after { - content: unset; +.wp-clearfix::after { + content: unset; } /* Always show up/down arrows for input (number) */ -input[type=number]::-webkit-inner-spin-button { - opacity: 1 +input[type="number"]::-webkit-inner-spin-button { + opacity: 1; } diff --git a/src/assets/scss/gfpdf-styles.scss b/src/assets/scss/gfpdf-styles.scss index 65a1af65e..45e757398 100644 --- a/src/assets/scss/gfpdf-styles.scss +++ b/src/assets/scss/gfpdf-styles.scss @@ -1,53 +1,53 @@ /* Reset default */ -@use 'reset'; +@use "reset"; /* Components */ -@use 'Component/alert'; -@use 'Component/button'; -@use 'Component/color-picker'; -@use 'Component/core-fonts'; -@use 'Component/FontManager/font-manager'; -@use 'Component/FontManager/footer'; -@use 'Component/FontManager/font-manager-skeleton'; -@use 'Component/HelpTab/help-tab'; -@use 'Component/gf-settings-containers'; -@use 'Component/license'; -@use 'Component/multicheck'; -@use 'Component/number'; -@use 'Component/popup'; -@use 'Component/rich-text'; -@use 'Component/search-bar'; -@use 'Component/spinner'; -@use 'Component/submit'; -@use 'Component/template-manager'; -@use 'Component/uninstaller'; -@use 'Component/upload'; -@use 'Component/hidden'; +@use "Component/alert"; +@use "Component/button"; +@use "Component/color-picker"; +@use "Component/core-fonts"; +@use "Component/FontManager/font-manager"; +@use "Component/FontManager/footer"; +@use "Component/FontManager/font-manager-skeleton"; +@use "Component/HelpTab/help-tab"; +@use "Component/gf-settings-containers"; +@use "Component/license"; +@use "Component/multicheck"; +@use "Component/number"; +@use "Component/popup"; +@use "Component/rich-text"; +@use "Component/search-bar"; +@use "Component/spinner"; +@use "Component/submit"; +@use "Component/template-manager"; +@use "Component/uninstaller"; +@use "Component/upload"; +@use "Component/hidden"; /* Pages */ -@use 'Pages/general-settings'; -@use 'Pages/entry-details'; -@use 'Pages/entry-list'; -@use 'Pages/pdf-list'; -@use 'Pages/pdf-settings'; +@use "Pages/general-settings"; +@use "Pages/entry-details"; +@use "Pages/entry-list"; +@use "Pages/pdf-list"; +@use "Pages/pdf-settings"; /* Media queries */ -@use 'MediaQueries/min-961'; -@use 'MediaQueries/min-1200'; +@use "MediaQueries/min-961"; +@use "MediaQueries/min-1200"; /* RTL Components */ -@use 'RTL/Component/FontManager/rtl-font-manager'; -@use 'RTL/Component/TemplateManager/rtl-template-manager'; -@use 'RTL/Component/rtl-spinner'; -@use 'RTL/Component/rtl-upload'; -@use 'RTL/Component/rtl-rich-text'; +@use "RTL/Component/FontManager/rtl-font-manager"; +@use "RTL/Component/TemplateManager/rtl-template-manager"; +@use "RTL/Component/rtl-spinner"; +@use "RTL/Component/rtl-upload"; +@use "RTL/Component/rtl-rich-text"; /* RTL Pages */ -@use 'RTL/rtl'; -@use 'RTL/Pages/rtl-general-settings'; -@use 'RTL/Pages/rtl-pdf-list'; -@use 'RTL/Pages/rtl-pdf-settings'; +@use "RTL/rtl"; +@use "RTL/Pages/rtl-general-settings"; +@use "RTL/Pages/rtl-pdf-list"; +@use "RTL/Pages/rtl-pdf-settings"; /* RTL Media queries */ -@use 'RTL/MediaQueries/rtl-min-961'; -@use 'RTL/MediaQueries/rtl-min-1200'; +@use "RTL/MediaQueries/rtl-min-961"; +@use "RTL/MediaQueries/rtl-min-1200"; From 22337907d9d04cdf561b22aee350d0014f0b7971 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 18 May 2026 11:23:44 +1000 Subject: [PATCH 03/21] fix: font manager footer icons on Tools tab and WP 7.0 sizing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hide the select-default-font tick in the AddUpdateFontFooter when the Font Manager is opened from the global Tools tab, matching the existing handleDisableSelectFields() pattern in FontListItems.js โ€” the tick is meaningless without a parent font dropdown to write the selection back into. Also pin font-size: 20px / line-height: 1 on the dashicons trash and tick buttons inside .select-delete-icons-container so they render at ~35px and match the adjacent .gfpdf-button on WordPress 7.0, where the inherited
- {id && ( + {id && !hideSelectFontButton && (