From 67bc3ce355a9682b6b5194015dce151987143245 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 13 Nov 2024 10:13:07 +1100 Subject: [PATCH 001/110] Fix IF condition regression --- src/Helper/Helper_Misc.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Helper/Helper_Misc.php b/src/Helper/Helper_Misc.php index 225b2bc1b..437bc97e4 100644 --- a/src/Helper/Helper_Misc.php +++ b/src/Helper/Helper_Misc.php @@ -445,8 +445,7 @@ public function copyr( $source, $destination ) { foreach ( $files as $fileinfo ) { if ( $fileinfo->isDir() && ! file_exists( $destination . $files->getSubPathName() ) ) { - /* phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged */ - if ( wp_mkdir_p( $destination . $files->getSubPathName() ) ) { + if ( ! wp_mkdir_p( $destination . $files->getSubPathName() ) ) { $this->log->error( 'Failed Creating Folder', [ From b9ca0d15a3d5fb1ed0e5b4ae1ddf99deae5be5c1 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 13 Nov 2024 10:19:39 +1100 Subject: [PATCH 002/110] Update changelog --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index e50c047a4..a64251456 100644 --- a/readme.txt +++ b/readme.txt @@ -123,6 +123,7 @@ No. Gravity PDF can only be used with Gravity Forms. It cannot generate PDFs for == Changelog == = 6.12.4 = +* Security: Escape variables in PHP Exceptions * Bug: Improve PDF column support when Gravity Forms includes a spacer * Bug: Fix display of Website field when it isn't filled in and *Show Empty Fields* is enabled * Housekeeping: Mark as compatible with WP 6.7 From cefcc936fc7bcaa2e714e765b998270be1d7ec21 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 15 Apr 2025 09:19:09 +1000 Subject: [PATCH 003/110] Update WP tested version (cherry picked from commit 996e527b5cdde25ac44e4ca4c81406568dbfe4f3) --- readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index a64251456..34c943842 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Plugin URI: https://gravitypdf.com/ Donate link: https://gravitypdf.com/donate-to-plugin/ Tags: gravity forms, form, contact form, pdf, email Requires at least: 5.3 -Tested up to: 6.7 +Tested up to: 6.8 Stable tag: 6.12.4 Requires PHP: 7.3 License: GPLv2 or later From 48f4d944a4b6f299c4ff21f328e67551e611ac44 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 28 Apr 2025 15:10:07 +1000 Subject: [PATCH 004/110] Fix GitHub Actions error due to missing svg command (cherry picked from commit cf026bf611276bb544f5b8b500d431fc7fa42ad9) --- .github/workflows/deployment.yml | 3 +++ .github/workflows/end-to-end-tests.yml | 1 - .github/workflows/phpunit.tests.yml | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index c114062a6..1afbdceae 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -9,6 +9,9 @@ jobs: pdf-build: runs-on: ubuntu-latest steps: + - name: Install Subversion + run: sudo apt-get update && sudo apt-get install -y subversion + - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/end-to-end-tests.yml b/.github/workflows/end-to-end-tests.yml index d07660a94..2a3614860 100644 --- a/.github/workflows/end-to-end-tests.yml +++ b/.github/workflows/end-to-end-tests.yml @@ -76,7 +76,6 @@ jobs: node --version curl --version git --version - svn --version php --version php -i locale -a diff --git a/.github/workflows/phpunit.tests.yml b/.github/workflows/phpunit.tests.yml index 6c5afcd54..985379d53 100644 --- a/.github/workflows/phpunit.tests.yml +++ b/.github/workflows/phpunit.tests.yml @@ -98,7 +98,6 @@ jobs: node --version curl --version git --version - svn --version php --version php -i locale -a From ba2dec0656e84cf50b477990ec2b18cc55fedf50 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 20 May 2025 09:38:03 +1000 Subject: [PATCH 005/110] Update copyright notice --- api.php | 2 +- gravity-pdf-updater.php | 2 +- pdf.php | 2 +- src/Controller/Controller_Actions.php | 2 +- src/Controller/Controller_Activation.php | 2 +- src/Controller/Controller_Custom_Fonts.php | 2 +- src/Controller/Controller_Debug.php | 2 +- src/Controller/Controller_Export_Entries.php | 2 +- src/Controller/Controller_Form_Settings.php | 2 +- src/Controller/Controller_Install.php | 2 +- src/Controller/Controller_Mergetags.php | 2 +- src/Controller/Controller_PDF.php | 2 +- src/Controller/Controller_Pdf_Queue.php | 2 +- src/Controller/Controller_Save_Core_Fonts.php | 2 +- src/Controller/Controller_Settings.php | 2 +- src/Controller/Controller_Shortcodes.php | 2 +- src/Controller/Controller_System_Report.php | 2 +- src/Controller/Controller_Templates.php | 2 +- src/Controller/Controller_Uninstaller.php | 2 +- src/Controller/Controller_Upgrade_Routines.php | 2 +- src/Controller/Controller_Webhooks.php | 2 +- src/Controller/Controller_Zapier.php | 2 +- src/Exceptions/GravityPdfDatabaseUpdateException.php | 2 +- src/Exceptions/GravityPdfDomainException.php | 2 +- src/Exceptions/GravityPdfException.php | 2 +- src/Exceptions/GravityPdfFontNotFoundException.php | 2 +- src/Exceptions/GravityPdfIdException.php | 2 +- src/Exceptions/GravityPdfModelNotUpdatedException.php | 2 +- src/Exceptions/GravityPdfRuntimeException.php | 2 +- src/Exceptions/GravityPdfShortcodeEntryIdException.php | 2 +- .../GravityPdfShortcodePdfConditionalLogicFailedException.php | 2 +- .../GravityPdfShortcodePdfConfigNotFoundException.php | 2 +- src/Exceptions/GravityPdfShortcodePdfInactiveException.php | 2 +- src/Helper/Fields/Field_Address.php | 2 +- src/Helper/Fields/Field_Chainedselect.php | 2 +- src/Helper/Fields/Field_Checkbox.php | 2 +- src/Helper/Fields/Field_Consent.php | 2 +- src/Helper/Fields/Field_Coupon.php | 2 +- src/Helper/Fields/Field_Creditcard.php | 2 +- src/Helper/Fields/Field_Date.php | 2 +- src/Helper/Fields/Field_Default.php | 2 +- src/Helper/Fields/Field_Discount.php | 2 +- src/Helper/Fields/Field_Email.php | 2 +- src/Helper/Fields/Field_Fg_Ls_Consent.php | 2 +- src/Helper/Fields/Field_Fg_Ls_Signature.php | 2 +- src/Helper/Fields/Field_Fileupload.php | 2 +- src/Helper/Fields/Field_Form.php | 2 +- src/Helper/Fields/Field_Hidden.php | 2 +- src/Helper/Fields/Field_Html.php | 2 +- src/Helper/Fields/Field_Image_Choice.php | 2 +- src/Helper/Fields/Field_Likert.php | 2 +- src/Helper/Fields/Field_List.php | 2 +- src/Helper/Fields/Field_Multi_Choice.php | 2 +- src/Helper/Fields/Field_Multiselect.php | 2 +- src/Helper/Fields/Field_Name.php | 2 +- src/Helper/Fields/Field_Number.php | 2 +- src/Helper/Fields/Field_Option.php | 2 +- src/Helper/Fields/Field_Page.php | 2 +- src/Helper/Fields/Field_Phone.php | 2 +- src/Helper/Fields/Field_Poll.php | 2 +- src/Helper/Fields/Field_Post_Category.php | 2 +- src/Helper/Fields/Field_Post_Content.php | 2 +- src/Helper/Fields/Field_Post_Custom_Field.php | 2 +- src/Helper/Fields/Field_Post_Excerpt.php | 2 +- src/Helper/Fields/Field_Post_Image.php | 2 +- src/Helper/Fields/Field_Post_Tags.php | 2 +- src/Helper/Fields/Field_Post_Title.php | 2 +- src/Helper/Fields/Field_Product.php | 2 +- src/Helper/Fields/Field_Products.php | 2 +- src/Helper/Fields/Field_Quantity.php | 2 +- src/Helper/Fields/Field_Quiz.php | 2 +- src/Helper/Fields/Field_Radio.php | 2 +- src/Helper/Fields/Field_Rank.php | 2 +- src/Helper/Fields/Field_Rating.php | 2 +- src/Helper/Fields/Field_Repeater.php | 2 +- src/Helper/Fields/Field_Section.php | 2 +- src/Helper/Fields/Field_Select.php | 2 +- src/Helper/Fields/Field_Shipping.php | 2 +- src/Helper/Fields/Field_Signature.php | 2 +- src/Helper/Fields/Field_Slim.php | 2 +- src/Helper/Fields/Field_Slim_Post.php | 2 +- src/Helper/Fields/Field_Subtotal.php | 2 +- src/Helper/Fields/Field_Survey.php | 2 +- src/Helper/Fields/Field_Tax.php | 2 +- src/Helper/Fields/Field_Text.php | 2 +- src/Helper/Fields/Field_Textarea.php | 2 +- src/Helper/Fields/Field_Time.php | 2 +- src/Helper/Fields/Field_Tos.php | 2 +- src/Helper/Fields/Field_Total.php | 2 +- src/Helper/Fields/Field_V3_List.php | 2 +- src/Helper/Fields/Field_V3_Products.php | 2 +- src/Helper/Fields/Field_V3_Section.php | 2 +- src/Helper/Fields/Field_Website.php | 2 +- src/Helper/Fonts/FlushCache.php | 2 +- src/Helper/Fonts/LocalFile.php | 2 +- src/Helper/Fonts/LocalFilesystem.php | 2 +- src/Helper/Fonts/SupportsOtl.php | 2 +- src/Helper/Fonts/TtfFontValidation.php | 2 +- src/Helper/Helper_Abstract_Addon.php | 2 +- src/Helper/Helper_Abstract_Config_Settings.php | 2 +- src/Helper/Helper_Abstract_Controller.php | 2 +- src/Helper/Helper_Abstract_Field_Products.php | 2 +- src/Helper/Helper_Abstract_Fields.php | 2 +- src/Helper/Helper_Abstract_Fields_Input_Type.php | 2 +- src/Helper/Helper_Abstract_Form.php | 2 +- src/Helper/Helper_Abstract_Model.php | 2 +- src/Helper/Helper_Abstract_Options.php | 2 +- src/Helper/Helper_Abstract_Pdf_Shortcode.php | 2 +- src/Helper/Helper_Abstract_View.php | 2 +- src/Helper/Helper_Data.php | 2 +- src/Helper/Helper_Field_Container.php | 2 +- src/Helper/Helper_Field_Container_Gf25.php | 2 +- src/Helper/Helper_Field_Container_Void.php | 2 +- src/Helper/Helper_Form.php | 2 +- src/Helper/Helper_Interface_Actions.php | 2 +- src/Helper/Helper_Interface_Config.php | 2 +- src/Helper/Helper_Interface_Config_Settings.php | 2 +- src/Helper/Helper_Interface_Extension_Settings.php | 2 +- src/Helper/Helper_Interface_Field_Pdf_Config.php | 2 +- src/Helper/Helper_Interface_Filters.php | 2 +- src/Helper/Helper_Interface_Setup_TearDown.php | 2 +- src/Helper/Helper_Interface_Url_Signer.php | 2 +- src/Helper/Helper_Logger.php | 2 +- src/Helper/Helper_Misc.php | 2 +- src/Helper/Helper_Mpdf.php | 2 +- src/Helper/Helper_Notices.php | 2 +- src/Helper/Helper_Options_Fields.php | 2 +- src/Helper/Helper_PDF.php | 2 +- src/Helper/Helper_PDF_List_Table.php | 2 +- src/Helper/Helper_Pdf_Queue.php | 2 +- src/Helper/Helper_QueryPath.php | 2 +- src/Helper/Helper_Sha256_Url_Signer.php | 2 +- src/Helper/Helper_Singleton.php | 2 +- src/Helper/Helper_Templates.php | 2 +- src/Helper/Helper_Trait_Logger.php | 2 +- src/Helper/Helper_Url_Signer.php | 2 +- src/Model/Model_Actions.php | 2 +- src/Model/Model_Custom_Fonts.php | 2 +- src/Model/Model_Form_Settings.php | 2 +- src/Model/Model_Install.php | 2 +- src/Model/Model_Mergetags.php | 2 +- src/Model/Model_PDF.php | 2 +- src/Model/Model_Settings.php | 2 +- src/Model/Model_Shortcodes.php | 2 +- src/Model/Model_System_Report.php | 2 +- src/Model/Model_Templates.php | 2 +- src/Model/Model_Uninstall.php | 2 +- src/Statics/Kses.php | 2 +- src/Statics/Queue_Callbacks.php | 2 +- src/View/View_Actions.php | 2 +- src/View/View_Form_Settings.php | 2 +- src/View/View_GravityForm_Settings_Markup.php | 2 +- src/View/View_PDF.php | 2 +- src/View/View_Settings.php | 2 +- src/View/View_Shortcodes.php | 2 +- src/View/View_System_Report.php | 2 +- src/View/View_Uninstaller.php | 2 +- src/View/html/Actions/action_buttons.php | 2 +- src/View/html/Actions/core_font.php | 2 +- src/View/html/FormSettings/add_edit.php | 2 +- src/View/html/FormSettings/list.php | 2 +- src/View/html/GravityForms/fieldset.php | 2 +- src/View/html/GravityForms/settings_field.php | 2 +- src/View/html/PDF/add_legalsigning_styles.php | 2 +- src/View/html/PDF/core_template_styles.php | 2 +- src/View/html/PDF/entry_detailed_pdf.php | 2 +- src/View/html/PDF/entry_list_pdf_multiple.php | 2 +- src/View/html/PDF/entry_list_pdf_single.php | 2 +- src/View/html/PDF/entry_no_valid_pdf.php | 2 +- src/View/html/PDF/form_title.php | 2 +- src/View/html/PDF/page_title.php | 2 +- src/View/html/Settings/extensions.php | 2 +- src/View/html/Settings/general.php | 2 +- src/View/html/Settings/help.php | 2 +- src/View/html/Settings/licence-info.php | 2 +- src/View/html/Settings/licence.php | 2 +- src/View/html/Settings/tabs.php | 2 +- src/View/html/Settings/tools.php | 2 +- src/View/html/Shortcodes/conditional_logic_not_met.php | 2 +- src/View/html/Shortcodes/gravitypdf.php | 2 +- src/View/html/Shortcodes/invalid_pdf_config.php | 2 +- src/View/html/Shortcodes/no_entry_id.php | 2 +- src/View/html/Shortcodes/pdf_not_active.php | 2 +- src/View/html/Uninstaller/uninstall_button.php | 2 +- src/assets/js/react/actions/coreFonts.js | 2 +- src/assets/js/react/actions/fontManager.js | 2 +- src/assets/js/react/actions/templates.js | 2 +- src/assets/js/react/api/api.js | 2 +- src/assets/js/react/api/coreFonts.js | 2 +- src/assets/js/react/api/fontManager.js | 2 +- src/assets/js/react/api/help.js | 2 +- src/assets/js/react/api/templates.js | 2 +- src/assets/js/react/bootstrap/coreFontBootstrap.js | 2 +- src/assets/js/react/bootstrap/fontManagerBootstrap.js | 2 +- src/assets/js/react/bootstrap/helpBootstrap.js | 2 +- src/assets/js/react/bootstrap/templateBootstrap.js | 2 +- src/assets/js/react/components/Alert/Alert.js | 2 +- src/assets/js/react/components/CoreFonts/CoreFontContainer.js | 2 +- src/assets/js/react/components/CoreFonts/CoreFontCounter.js | 2 +- src/assets/js/react/components/CoreFonts/CoreFontListResults.js | 2 +- src/assets/js/react/components/CoreFonts/CoreFontListSpacer.js | 2 +- src/assets/js/react/components/Empty.js | 2 +- src/assets/js/react/components/FontManager/AddFont.js | 2 +- .../js/react/components/FontManager/AddUpdateFontFooter.js | 2 +- src/assets/js/react/components/FontManager/AdvancedButton.js | 2 +- src/assets/js/react/components/FontManager/FontList.js | 2 +- .../js/react/components/FontManager/FontListAlertMessage.js | 2 +- src/assets/js/react/components/FontManager/FontListHeader.js | 2 +- src/assets/js/react/components/FontManager/FontListIcon.js | 2 +- src/assets/js/react/components/FontManager/FontListItems.js | 2 +- src/assets/js/react/components/FontManager/FontListSkeleton.js | 2 +- src/assets/js/react/components/FontManager/FontManager.js | 2 +- src/assets/js/react/components/FontManager/FontManagerBody.js | 2 +- src/assets/js/react/components/FontManager/FontManagerHeader.js | 2 +- src/assets/js/react/components/FontManager/FontVariant.js | 2 +- src/assets/js/react/components/FontManager/FontVariantLabel.js | 2 +- .../js/react/components/FontManager/InitialAddUpdateState.js | 2 +- src/assets/js/react/components/FontManager/SearchBox.js | 2 +- src/assets/js/react/components/FontManager/TemplateTooltip.js | 2 +- src/assets/js/react/components/FontManager/UpdateFont.js | 2 +- src/assets/js/react/components/Help/DisplayResultContainer.js | 2 +- src/assets/js/react/components/Help/HelpContainer.js | 2 +- src/assets/js/react/components/Modal/CloseDialog.js | 2 +- src/assets/js/react/components/ShowMessage.js | 2 +- src/assets/js/react/components/Spinner.js | 2 +- .../js/react/components/Template/TemplateActivateButton.js | 2 +- src/assets/js/react/components/Template/TemplateButton.js | 2 +- src/assets/js/react/components/Template/TemplateContainer.js | 2 +- src/assets/js/react/components/Template/TemplateDeleteButton.js | 2 +- .../js/react/components/Template/TemplateFooterActions.js | 2 +- .../js/react/components/Template/TemplateHeaderNavigation.js | 2 +- src/assets/js/react/components/Template/TemplateHeaderTitle.js | 2 +- src/assets/js/react/components/Template/TemplateList.js | 2 +- src/assets/js/react/components/Template/TemplateListItem.js | 2 +- .../js/react/components/Template/TemplateListItemComponents.js | 2 +- src/assets/js/react/components/Template/TemplateScreenshot.js | 2 +- src/assets/js/react/components/Template/TemplateScreenshots.js | 2 +- src/assets/js/react/components/Template/TemplateSearch.js | 2 +- src/assets/js/react/components/Template/TemplateSingle.js | 2 +- .../js/react/components/Template/TemplateSingleComponents.js | 2 +- src/assets/js/react/components/Template/TemplateUploader.js | 2 +- src/assets/js/react/gfpdf-main.js | 2 +- src/assets/js/react/reducers/coreFontReducer.js | 2 +- src/assets/js/react/reducers/fontManagerReducer.js | 2 +- src/assets/js/react/reducers/templateReducer.js | 2 +- src/assets/js/react/router/coreFontRouter.js | 2 +- src/assets/js/react/router/fontManagerRouter.js | 2 +- src/assets/js/react/router/templateRouter.js | 2 +- src/assets/js/react/sagas/coreFonts.js | 2 +- src/assets/js/react/sagas/fontManager.js | 2 +- src/assets/js/react/sagas/index.js | 2 +- src/assets/js/react/sagas/templates.js | 2 +- src/assets/js/react/selectors/getTemplates.js | 2 +- src/assets/js/react/store/index.js | 2 +- .../js/react/utilities/FontManager/adjustFontListHeight.js | 2 +- .../utilities/FontManager/associatedFontManagerSelectBox.js | 2 +- src/assets/js/react/utilities/FontManager/fontManagerReducer.js | 2 +- src/assets/js/react/utilities/FontManager/toggleUpdateFont.js | 2 +- src/assets/js/react/utilities/promiseReflect.js | 2 +- src/autoload.php | 2 +- src/bootstrap.php | 2 +- src/deprecated.php | 2 +- src/templates/config/blank-slate.php | 2 +- src/templates/config/focus-gravity.php | 2 +- .../unit-tests/Controller/Test_Controller_Custom_Fonts.php | 2 +- .../unit-tests/Controller/Test_Controller_Export_Entries.php | 2 +- .../phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php | 2 +- .../unit-tests/Controller/Test_Controller_System_Report.php | 2 +- .../unit-tests/Controller/Test_Controller_Upgrade_Routines.php | 2 +- .../phpunit/unit-tests/Controller/Test_Controller_Webhooks.php | 2 +- tests/phpunit/unit-tests/Controller/Test_Controller_Zapier.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Consent.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Form.php | 2 +- .../unit-tests/Helper/Fields/Test_Field_Image_Choice.php | 2 +- .../unit-tests/Helper/Fields/Test_Field_Multi_Choice.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php | 2 +- .../unit-tests/Helper/Fields/Test_Field_Post_Category.php | 2 +- .../unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php | 2 +- .../phpunit/unit-tests/Helper/Fields/Test_Field_Post_Image.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Radio.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Repeater.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Section.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Select.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Signature.php | 2 +- tests/phpunit/unit-tests/Helper/Fields/Test_Field_Survey.php | 2 +- tests/phpunit/unit-tests/Helper/Fonts/Test_FlushCache.php | 2 +- .../unit-tests/Helper/Test_Helper_Field_Container_Gf25.php | 2 +- tests/phpunit/unit-tests/Mocks/zapier-mock.php | 2 +- tests/phpunit/unit-tests/Model/Test_Model_Custom_Fonts.php | 2 +- tests/phpunit/unit-tests/Model/Test_Model_Mergetags.php | 2 +- tests/phpunit/unit-tests/Model/Test_Model_Pdf.php | 2 +- tests/phpunit/unit-tests/Model/Test_Model_Pdf_Meta_Box.php | 2 +- tests/phpunit/unit-tests/Model/Test_Model_System_Report.php | 2 +- tests/phpunit/unit-tests/Statics/Test_kses.php | 2 +- tests/phpunit/unit-tests/View/Test_View_System_Report.php | 2 +- tests/phpunit/unit-tests/test-actions.php | 2 +- tests/phpunit/unit-tests/test-addon.php | 2 +- tests/phpunit/unit-tests/test-ajax.php | 2 +- tests/phpunit/unit-tests/test-api.php | 2 +- tests/phpunit/unit-tests/test-autoloader.php | 2 +- tests/phpunit/unit-tests/test-bootstrap.php | 2 +- tests/phpunit/unit-tests/test-deprecated.php | 2 +- tests/phpunit/unit-tests/test-field-container.php | 2 +- tests/phpunit/unit-tests/test-field-markup.php | 2 +- tests/phpunit/unit-tests/test-form-data.php | 2 +- tests/phpunit/unit-tests/test-form-settings.php | 2 +- tests/phpunit/unit-tests/test-gravity-forms.php | 2 +- tests/phpunit/unit-tests/test-helper-data.php | 2 +- tests/phpunit/unit-tests/test-helper-misc.php | 2 +- tests/phpunit/unit-tests/test-helper-mpdf.php | 2 +- tests/phpunit/unit-tests/test-helper-templates.php | 2 +- tests/phpunit/unit-tests/test-installer.php | 2 +- tests/phpunit/unit-tests/test-interfaces.php | 2 +- tests/phpunit/unit-tests/test-logger.php | 2 +- tests/phpunit/unit-tests/test-mvc-abstracts.php | 2 +- tests/phpunit/unit-tests/test-notices.php | 2 +- tests/phpunit/unit-tests/test-options-api.php | 2 +- tests/phpunit/unit-tests/test-pdf.php | 2 +- tests/phpunit/unit-tests/test-pre-checks.php | 2 +- tests/phpunit/unit-tests/test-query-path.php | 2 +- tests/phpunit/unit-tests/test-settings.php | 2 +- tests/phpunit/unit-tests/test-shortcodes.php | 2 +- tests/phpunit/unit-tests/test-singleton.php | 2 +- tests/phpunit/unit-tests/test-slow-pdf-processes.php | 2 +- tests/phpunit/unit-tests/test-templates.php | 2 +- tests/phpunit/unit-tests/test-uninstaller.php | 2 +- tests/phpunit/unit-tests/test-url-signer.php | 2 +- 327 files changed, 327 insertions(+), 327 deletions(-) diff --git a/api.php b/api.php index 6045c4452..0edc80a78 100644 --- a/api.php +++ b/api.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/gravity-pdf-updater.php b/gravity-pdf-updater.php index daf2bb410..157c6e016 100644 --- a/gravity-pdf-updater.php +++ b/gravity-pdf-updater.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/pdf.php b/pdf.php index f0b4906ff..942ea396a 100644 --- a/pdf.php +++ b/pdf.php @@ -17,7 +17,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Actions.php b/src/Controller/Controller_Actions.php index 5b19e126f..bf95fd37c 100644 --- a/src/Controller/Controller_Actions.php +++ b/src/Controller/Controller_Actions.php @@ -15,7 +15,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Activation.php b/src/Controller/Controller_Activation.php index d6fc8b0e8..91d82f4ed 100644 --- a/src/Controller/Controller_Activation.php +++ b/src/Controller/Controller_Activation.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Custom_Fonts.php b/src/Controller/Controller_Custom_Fonts.php index 4b7040855..b889c4b62 100644 --- a/src/Controller/Controller_Custom_Fonts.php +++ b/src/Controller/Controller_Custom_Fonts.php @@ -27,7 +27,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Debug.php b/src/Controller/Controller_Debug.php index 0ae1a3814..d670e0aa2 100644 --- a/src/Controller/Controller_Debug.php +++ b/src/Controller/Controller_Debug.php @@ -13,7 +13,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Export_Entries.php b/src/Controller/Controller_Export_Entries.php index cd4405aed..8a8064250 100644 --- a/src/Controller/Controller_Export_Entries.php +++ b/src/Controller/Controller_Export_Entries.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Form_Settings.php b/src/Controller/Controller_Form_Settings.php index 16ec2aad7..8360ce33d 100644 --- a/src/Controller/Controller_Form_Settings.php +++ b/src/Controller/Controller_Form_Settings.php @@ -17,7 +17,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Install.php b/src/Controller/Controller_Install.php index 8dfca8a50..e60f8244d 100644 --- a/src/Controller/Controller_Install.php +++ b/src/Controller/Controller_Install.php @@ -17,7 +17,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Mergetags.php b/src/Controller/Controller_Mergetags.php index 2b05b02df..342ff3206 100644 --- a/src/Controller/Controller_Mergetags.php +++ b/src/Controller/Controller_Mergetags.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_PDF.php b/src/Controller/Controller_PDF.php index 4329ed42c..a9c89de52 100644 --- a/src/Controller/Controller_PDF.php +++ b/src/Controller/Controller_PDF.php @@ -17,7 +17,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Pdf_Queue.php b/src/Controller/Controller_Pdf_Queue.php index 9799d9f7a..12ba6e23a 100644 --- a/src/Controller/Controller_Pdf_Queue.php +++ b/src/Controller/Controller_Pdf_Queue.php @@ -13,7 +13,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Save_Core_Fonts.php b/src/Controller/Controller_Save_Core_Fonts.php index cb5dac333..07fff5f29 100644 --- a/src/Controller/Controller_Save_Core_Fonts.php +++ b/src/Controller/Controller_Save_Core_Fonts.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Settings.php b/src/Controller/Controller_Settings.php index a15f70936..f5727277d 100644 --- a/src/Controller/Controller_Settings.php +++ b/src/Controller/Controller_Settings.php @@ -19,7 +19,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Shortcodes.php b/src/Controller/Controller_Shortcodes.php index 6ab50fb17..2d423b424 100644 --- a/src/Controller/Controller_Shortcodes.php +++ b/src/Controller/Controller_Shortcodes.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_System_Report.php b/src/Controller/Controller_System_Report.php index 91def91f5..7f1d7a5ab 100644 --- a/src/Controller/Controller_System_Report.php +++ b/src/Controller/Controller_System_Report.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Templates.php b/src/Controller/Controller_Templates.php index 6b88786a9..24534cbf0 100644 --- a/src/Controller/Controller_Templates.php +++ b/src/Controller/Controller_Templates.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Uninstaller.php b/src/Controller/Controller_Uninstaller.php index 9ba195101..483d5522d 100644 --- a/src/Controller/Controller_Uninstaller.php +++ b/src/Controller/Controller_Uninstaller.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Upgrade_Routines.php b/src/Controller/Controller_Upgrade_Routines.php index 0d5db43ae..7c8f137cb 100644 --- a/src/Controller/Controller_Upgrade_Routines.php +++ b/src/Controller/Controller_Upgrade_Routines.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Webhooks.php b/src/Controller/Controller_Webhooks.php index 053d6a11f..3d8e9af52 100644 --- a/src/Controller/Controller_Webhooks.php +++ b/src/Controller/Controller_Webhooks.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Controller/Controller_Zapier.php b/src/Controller/Controller_Zapier.php index 9fe0d601e..16ee01713 100644 --- a/src/Controller/Controller_Zapier.php +++ b/src/Controller/Controller_Zapier.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfDatabaseUpdateException.php b/src/Exceptions/GravityPdfDatabaseUpdateException.php index 1fbf5b28b..ad679d11e 100644 --- a/src/Exceptions/GravityPdfDatabaseUpdateException.php +++ b/src/Exceptions/GravityPdfDatabaseUpdateException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfDomainException.php b/src/Exceptions/GravityPdfDomainException.php index 3829a194d..4fed1037a 100644 --- a/src/Exceptions/GravityPdfDomainException.php +++ b/src/Exceptions/GravityPdfDomainException.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfException.php b/src/Exceptions/GravityPdfException.php index a24c41f22..07719f24e 100644 --- a/src/Exceptions/GravityPdfException.php +++ b/src/Exceptions/GravityPdfException.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfFontNotFoundException.php b/src/Exceptions/GravityPdfFontNotFoundException.php index 3869bcd15..4f8a93b9a 100644 --- a/src/Exceptions/GravityPdfFontNotFoundException.php +++ b/src/Exceptions/GravityPdfFontNotFoundException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfIdException.php b/src/Exceptions/GravityPdfIdException.php index 32ae20823..de85a3e49 100644 --- a/src/Exceptions/GravityPdfIdException.php +++ b/src/Exceptions/GravityPdfIdException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfModelNotUpdatedException.php b/src/Exceptions/GravityPdfModelNotUpdatedException.php index 6c2045c22..a522bbee5 100644 --- a/src/Exceptions/GravityPdfModelNotUpdatedException.php +++ b/src/Exceptions/GravityPdfModelNotUpdatedException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfRuntimeException.php b/src/Exceptions/GravityPdfRuntimeException.php index 9db484759..36c43bf1e 100644 --- a/src/Exceptions/GravityPdfRuntimeException.php +++ b/src/Exceptions/GravityPdfRuntimeException.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfShortcodeEntryIdException.php b/src/Exceptions/GravityPdfShortcodeEntryIdException.php index c2c333102..658f70bf9 100644 --- a/src/Exceptions/GravityPdfShortcodeEntryIdException.php +++ b/src/Exceptions/GravityPdfShortcodeEntryIdException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfShortcodePdfConditionalLogicFailedException.php b/src/Exceptions/GravityPdfShortcodePdfConditionalLogicFailedException.php index 3efc48667..67f448307 100644 --- a/src/Exceptions/GravityPdfShortcodePdfConditionalLogicFailedException.php +++ b/src/Exceptions/GravityPdfShortcodePdfConditionalLogicFailedException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfShortcodePdfConfigNotFoundException.php b/src/Exceptions/GravityPdfShortcodePdfConfigNotFoundException.php index 4a573150f..bdcb3ee5a 100644 --- a/src/Exceptions/GravityPdfShortcodePdfConfigNotFoundException.php +++ b/src/Exceptions/GravityPdfShortcodePdfConfigNotFoundException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Exceptions/GravityPdfShortcodePdfInactiveException.php b/src/Exceptions/GravityPdfShortcodePdfInactiveException.php index ed532a2d5..8d25080f4 100644 --- a/src/Exceptions/GravityPdfShortcodePdfInactiveException.php +++ b/src/Exceptions/GravityPdfShortcodePdfInactiveException.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Address.php b/src/Helper/Fields/Field_Address.php index 3480ed0fe..3abf35f79 100644 --- a/src/Helper/Fields/Field_Address.php +++ b/src/Helper/Fields/Field_Address.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Chainedselect.php b/src/Helper/Fields/Field_Chainedselect.php index 5811c83d9..f8f2bb6e2 100644 --- a/src/Helper/Fields/Field_Chainedselect.php +++ b/src/Helper/Fields/Field_Chainedselect.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Checkbox.php b/src/Helper/Fields/Field_Checkbox.php index 704a78c70..be45eaef9 100644 --- a/src/Helper/Fields/Field_Checkbox.php +++ b/src/Helper/Fields/Field_Checkbox.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Consent.php b/src/Helper/Fields/Field_Consent.php index 5972df240..5a8f6e552 100644 --- a/src/Helper/Fields/Field_Consent.php +++ b/src/Helper/Fields/Field_Consent.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Coupon.php b/src/Helper/Fields/Field_Coupon.php index e86ff389b..513b10c9a 100644 --- a/src/Helper/Fields/Field_Coupon.php +++ b/src/Helper/Fields/Field_Coupon.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Creditcard.php b/src/Helper/Fields/Field_Creditcard.php index 08cc2922a..f975411cd 100644 --- a/src/Helper/Fields/Field_Creditcard.php +++ b/src/Helper/Fields/Field_Creditcard.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Date.php b/src/Helper/Fields/Field_Date.php index 6cfca11c6..4202befbe 100644 --- a/src/Helper/Fields/Field_Date.php +++ b/src/Helper/Fields/Field_Date.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Default.php b/src/Helper/Fields/Field_Default.php index 0f10ba2d5..3cb298ece 100644 --- a/src/Helper/Fields/Field_Default.php +++ b/src/Helper/Fields/Field_Default.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Discount.php b/src/Helper/Fields/Field_Discount.php index 883750bda..b62bd923b 100644 --- a/src/Helper/Fields/Field_Discount.php +++ b/src/Helper/Fields/Field_Discount.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Email.php b/src/Helper/Fields/Field_Email.php index 7c623710d..4ec98d097 100644 --- a/src/Helper/Fields/Field_Email.php +++ b/src/Helper/Fields/Field_Email.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Fg_Ls_Consent.php b/src/Helper/Fields/Field_Fg_Ls_Consent.php index 6d49d670e..8e9a3ce60 100644 --- a/src/Helper/Fields/Field_Fg_Ls_Consent.php +++ b/src/Helper/Fields/Field_Fg_Ls_Consent.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Fg_Ls_Signature.php b/src/Helper/Fields/Field_Fg_Ls_Signature.php index 81a574c5f..bebfc318e 100644 --- a/src/Helper/Fields/Field_Fg_Ls_Signature.php +++ b/src/Helper/Fields/Field_Fg_Ls_Signature.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Fileupload.php b/src/Helper/Fields/Field_Fileupload.php index 4cfe83913..a2f5ad5ab 100644 --- a/src/Helper/Fields/Field_Fileupload.php +++ b/src/Helper/Fields/Field_Fileupload.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Form.php b/src/Helper/Fields/Field_Form.php index caaae8a8c..b2175d42f 100644 --- a/src/Helper/Fields/Field_Form.php +++ b/src/Helper/Fields/Field_Form.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Hidden.php b/src/Helper/Fields/Field_Hidden.php index 75bd46928..9269fe2ab 100644 --- a/src/Helper/Fields/Field_Hidden.php +++ b/src/Helper/Fields/Field_Hidden.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Html.php b/src/Helper/Fields/Field_Html.php index 8518bd167..3eacee65f 100644 --- a/src/Helper/Fields/Field_Html.php +++ b/src/Helper/Fields/Field_Html.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Image_Choice.php b/src/Helper/Fields/Field_Image_Choice.php index 61f1be8f1..c8cc68cdf 100644 --- a/src/Helper/Fields/Field_Image_Choice.php +++ b/src/Helper/Fields/Field_Image_Choice.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Likert.php b/src/Helper/Fields/Field_Likert.php index 64980a8bd..f97aed428 100644 --- a/src/Helper/Fields/Field_Likert.php +++ b/src/Helper/Fields/Field_Likert.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_List.php b/src/Helper/Fields/Field_List.php index b2158a554..9f05be8b4 100644 --- a/src/Helper/Fields/Field_List.php +++ b/src/Helper/Fields/Field_List.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Multi_Choice.php b/src/Helper/Fields/Field_Multi_Choice.php index 552899784..63f55ee01 100644 --- a/src/Helper/Fields/Field_Multi_Choice.php +++ b/src/Helper/Fields/Field_Multi_Choice.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Multiselect.php b/src/Helper/Fields/Field_Multiselect.php index b2c330dee..82a8fcd1f 100644 --- a/src/Helper/Fields/Field_Multiselect.php +++ b/src/Helper/Fields/Field_Multiselect.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Name.php b/src/Helper/Fields/Field_Name.php index 9190d5fe9..3bca8280a 100644 --- a/src/Helper/Fields/Field_Name.php +++ b/src/Helper/Fields/Field_Name.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Number.php b/src/Helper/Fields/Field_Number.php index aedc065c5..a9e7041ee 100644 --- a/src/Helper/Fields/Field_Number.php +++ b/src/Helper/Fields/Field_Number.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Option.php b/src/Helper/Fields/Field_Option.php index e9d6395d4..163ff745c 100644 --- a/src/Helper/Fields/Field_Option.php +++ b/src/Helper/Fields/Field_Option.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Page.php b/src/Helper/Fields/Field_Page.php index b95cbb9b2..0e2b0300e 100644 --- a/src/Helper/Fields/Field_Page.php +++ b/src/Helper/Fields/Field_Page.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Phone.php b/src/Helper/Fields/Field_Phone.php index a5ae804a7..9d7d1cfd5 100644 --- a/src/Helper/Fields/Field_Phone.php +++ b/src/Helper/Fields/Field_Phone.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Poll.php b/src/Helper/Fields/Field_Poll.php index b4722ab1f..fff0dd300 100644 --- a/src/Helper/Fields/Field_Poll.php +++ b/src/Helper/Fields/Field_Poll.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Category.php b/src/Helper/Fields/Field_Post_Category.php index a2681af62..fc8c873ce 100644 --- a/src/Helper/Fields/Field_Post_Category.php +++ b/src/Helper/Fields/Field_Post_Category.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Content.php b/src/Helper/Fields/Field_Post_Content.php index 4aef6ccae..460a13cd4 100644 --- a/src/Helper/Fields/Field_Post_Content.php +++ b/src/Helper/Fields/Field_Post_Content.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Custom_Field.php b/src/Helper/Fields/Field_Post_Custom_Field.php index 14f7bf3f5..b6bb83ecb 100644 --- a/src/Helper/Fields/Field_Post_Custom_Field.php +++ b/src/Helper/Fields/Field_Post_Custom_Field.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Excerpt.php b/src/Helper/Fields/Field_Post_Excerpt.php index ebecb344c..cb09a1ef4 100644 --- a/src/Helper/Fields/Field_Post_Excerpt.php +++ b/src/Helper/Fields/Field_Post_Excerpt.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Image.php b/src/Helper/Fields/Field_Post_Image.php index 4f290f895..d889d6800 100644 --- a/src/Helper/Fields/Field_Post_Image.php +++ b/src/Helper/Fields/Field_Post_Image.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Tags.php b/src/Helper/Fields/Field_Post_Tags.php index 8841b580a..d9ede612d 100644 --- a/src/Helper/Fields/Field_Post_Tags.php +++ b/src/Helper/Fields/Field_Post_Tags.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Post_Title.php b/src/Helper/Fields/Field_Post_Title.php index 5c92323e8..ebc475901 100644 --- a/src/Helper/Fields/Field_Post_Title.php +++ b/src/Helper/Fields/Field_Post_Title.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Product.php b/src/Helper/Fields/Field_Product.php index d0fbd7868..e0fd69015 100644 --- a/src/Helper/Fields/Field_Product.php +++ b/src/Helper/Fields/Field_Product.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Products.php b/src/Helper/Fields/Field_Products.php index 358884b8e..c12c0f4fc 100644 --- a/src/Helper/Fields/Field_Products.php +++ b/src/Helper/Fields/Field_Products.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Quantity.php b/src/Helper/Fields/Field_Quantity.php index bf7d6f433..3a8f60130 100644 --- a/src/Helper/Fields/Field_Quantity.php +++ b/src/Helper/Fields/Field_Quantity.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Quiz.php b/src/Helper/Fields/Field_Quiz.php index e6622e830..084d41de2 100644 --- a/src/Helper/Fields/Field_Quiz.php +++ b/src/Helper/Fields/Field_Quiz.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Radio.php b/src/Helper/Fields/Field_Radio.php index 79551fbc3..8eaf3cad8 100644 --- a/src/Helper/Fields/Field_Radio.php +++ b/src/Helper/Fields/Field_Radio.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Rank.php b/src/Helper/Fields/Field_Rank.php index ae0c5508a..04401efe8 100644 --- a/src/Helper/Fields/Field_Rank.php +++ b/src/Helper/Fields/Field_Rank.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Rating.php b/src/Helper/Fields/Field_Rating.php index 813e3a988..0a169073f 100644 --- a/src/Helper/Fields/Field_Rating.php +++ b/src/Helper/Fields/Field_Rating.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Repeater.php b/src/Helper/Fields/Field_Repeater.php index 5eb2cf778..b7661a21e 100644 --- a/src/Helper/Fields/Field_Repeater.php +++ b/src/Helper/Fields/Field_Repeater.php @@ -15,7 +15,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Section.php b/src/Helper/Fields/Field_Section.php index d8d87d760..acce9971d 100644 --- a/src/Helper/Fields/Field_Section.php +++ b/src/Helper/Fields/Field_Section.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Select.php b/src/Helper/Fields/Field_Select.php index 07782af5e..a41f0d582 100644 --- a/src/Helper/Fields/Field_Select.php +++ b/src/Helper/Fields/Field_Select.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Shipping.php b/src/Helper/Fields/Field_Shipping.php index 6a8dde939..df178369b 100644 --- a/src/Helper/Fields/Field_Shipping.php +++ b/src/Helper/Fields/Field_Shipping.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Signature.php b/src/Helper/Fields/Field_Signature.php index 1625cbf45..febc33ae4 100644 --- a/src/Helper/Fields/Field_Signature.php +++ b/src/Helper/Fields/Field_Signature.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Slim.php b/src/Helper/Fields/Field_Slim.php index 28832f13a..701f86b43 100644 --- a/src/Helper/Fields/Field_Slim.php +++ b/src/Helper/Fields/Field_Slim.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Slim_Post.php b/src/Helper/Fields/Field_Slim_Post.php index e86296777..c585b0e99 100644 --- a/src/Helper/Fields/Field_Slim_Post.php +++ b/src/Helper/Fields/Field_Slim_Post.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Subtotal.php b/src/Helper/Fields/Field_Subtotal.php index 07bfd1bc5..7b07bafa2 100644 --- a/src/Helper/Fields/Field_Subtotal.php +++ b/src/Helper/Fields/Field_Subtotal.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Survey.php b/src/Helper/Fields/Field_Survey.php index ee19e751c..4a07fb5ef 100644 --- a/src/Helper/Fields/Field_Survey.php +++ b/src/Helper/Fields/Field_Survey.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Tax.php b/src/Helper/Fields/Field_Tax.php index 4a7801f1c..08365af26 100644 --- a/src/Helper/Fields/Field_Tax.php +++ b/src/Helper/Fields/Field_Tax.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Text.php b/src/Helper/Fields/Field_Text.php index 12a6ec902..0d93bb6d5 100644 --- a/src/Helper/Fields/Field_Text.php +++ b/src/Helper/Fields/Field_Text.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Textarea.php b/src/Helper/Fields/Field_Textarea.php index 1ff2b782b..bd3507549 100644 --- a/src/Helper/Fields/Field_Textarea.php +++ b/src/Helper/Fields/Field_Textarea.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Time.php b/src/Helper/Fields/Field_Time.php index df6ddfc70..5b331e90d 100644 --- a/src/Helper/Fields/Field_Time.php +++ b/src/Helper/Fields/Field_Time.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Tos.php b/src/Helper/Fields/Field_Tos.php index ab8f7c235..53b0ecf01 100644 --- a/src/Helper/Fields/Field_Tos.php +++ b/src/Helper/Fields/Field_Tos.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Total.php b/src/Helper/Fields/Field_Total.php index ab157b64c..e49a708bb 100644 --- a/src/Helper/Fields/Field_Total.php +++ b/src/Helper/Fields/Field_Total.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_V3_List.php b/src/Helper/Fields/Field_V3_List.php index cc0f92223..b476910c4 100644 --- a/src/Helper/Fields/Field_V3_List.php +++ b/src/Helper/Fields/Field_V3_List.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_V3_Products.php b/src/Helper/Fields/Field_V3_Products.php index 4d056c626..93f0e0226 100644 --- a/src/Helper/Fields/Field_V3_Products.php +++ b/src/Helper/Fields/Field_V3_Products.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_V3_Section.php b/src/Helper/Fields/Field_V3_Section.php index 9d318782d..96c6e6047 100644 --- a/src/Helper/Fields/Field_V3_Section.php +++ b/src/Helper/Fields/Field_V3_Section.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fields/Field_Website.php b/src/Helper/Fields/Field_Website.php index 7c8dcccfe..7af55a203 100644 --- a/src/Helper/Fields/Field_Website.php +++ b/src/Helper/Fields/Field_Website.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fonts/FlushCache.php b/src/Helper/Fonts/FlushCache.php index dbf2c97f9..d5e386af0 100644 --- a/src/Helper/Fonts/FlushCache.php +++ b/src/Helper/Fonts/FlushCache.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fonts/LocalFile.php b/src/Helper/Fonts/LocalFile.php index cb086b2f1..b09fd0e84 100644 --- a/src/Helper/Fonts/LocalFile.php +++ b/src/Helper/Fonts/LocalFile.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fonts/LocalFilesystem.php b/src/Helper/Fonts/LocalFilesystem.php index 26f469141..c0b3bd690 100644 --- a/src/Helper/Fonts/LocalFilesystem.php +++ b/src/Helper/Fonts/LocalFilesystem.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fonts/SupportsOtl.php b/src/Helper/Fonts/SupportsOtl.php index 6ad0f0e77..0fe96ce01 100644 --- a/src/Helper/Fonts/SupportsOtl.php +++ b/src/Helper/Fonts/SupportsOtl.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Fonts/TtfFontValidation.php b/src/Helper/Fonts/TtfFontValidation.php index c70bfcfa6..2175362d8 100644 --- a/src/Helper/Fonts/TtfFontValidation.php +++ b/src/Helper/Fonts/TtfFontValidation.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Addon.php b/src/Helper/Helper_Abstract_Addon.php index fc2433abe..1fa30e2e2 100644 --- a/src/Helper/Helper_Abstract_Addon.php +++ b/src/Helper/Helper_Abstract_Addon.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Config_Settings.php b/src/Helper/Helper_Abstract_Config_Settings.php index f653ff8bb..918fa858a 100644 --- a/src/Helper/Helper_Abstract_Config_Settings.php +++ b/src/Helper/Helper_Abstract_Config_Settings.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Controller.php b/src/Helper/Helper_Abstract_Controller.php index 94b6fa81e..01ddf0e44 100644 --- a/src/Helper/Helper_Abstract_Controller.php +++ b/src/Helper/Helper_Abstract_Controller.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Field_Products.php b/src/Helper/Helper_Abstract_Field_Products.php index c9385de66..5c7bdb482 100644 --- a/src/Helper/Helper_Abstract_Field_Products.php +++ b/src/Helper/Helper_Abstract_Field_Products.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Fields.php b/src/Helper/Helper_Abstract_Fields.php index 6289fd563..093fb1146 100644 --- a/src/Helper/Helper_Abstract_Fields.php +++ b/src/Helper/Helper_Abstract_Fields.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Fields_Input_Type.php b/src/Helper/Helper_Abstract_Fields_Input_Type.php index dc7e715c0..45e3da7e4 100644 --- a/src/Helper/Helper_Abstract_Fields_Input_Type.php +++ b/src/Helper/Helper_Abstract_Fields_Input_Type.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Form.php b/src/Helper/Helper_Abstract_Form.php index 00d321d71..a202f5206 100644 --- a/src/Helper/Helper_Abstract_Form.php +++ b/src/Helper/Helper_Abstract_Form.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Model.php b/src/Helper/Helper_Abstract_Model.php index ef9d7d375..1365c6191 100644 --- a/src/Helper/Helper_Abstract_Model.php +++ b/src/Helper/Helper_Abstract_Model.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Options.php b/src/Helper/Helper_Abstract_Options.php index 24872e2a5..2e6981f3e 100644 --- a/src/Helper/Helper_Abstract_Options.php +++ b/src/Helper/Helper_Abstract_Options.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_Pdf_Shortcode.php b/src/Helper/Helper_Abstract_Pdf_Shortcode.php index 3c3559cf8..e318df43f 100644 --- a/src/Helper/Helper_Abstract_Pdf_Shortcode.php +++ b/src/Helper/Helper_Abstract_Pdf_Shortcode.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Abstract_View.php b/src/Helper/Helper_Abstract_View.php index a23806107..dfb97ca16 100644 --- a/src/Helper/Helper_Abstract_View.php +++ b/src/Helper/Helper_Abstract_View.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Data.php b/src/Helper/Helper_Data.php index 5abd69964..2950828db 100644 --- a/src/Helper/Helper_Data.php +++ b/src/Helper/Helper_Data.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Field_Container.php b/src/Helper/Helper_Field_Container.php index 9c1876952..d3cb3c2c8 100644 --- a/src/Helper/Helper_Field_Container.php +++ b/src/Helper/Helper_Field_Container.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Field_Container_Gf25.php b/src/Helper/Helper_Field_Container_Gf25.php index 933a53739..728e73eb6 100644 --- a/src/Helper/Helper_Field_Container_Gf25.php +++ b/src/Helper/Helper_Field_Container_Gf25.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Field_Container_Void.php b/src/Helper/Helper_Field_Container_Void.php index 563a47282..756e0cf0f 100644 --- a/src/Helper/Helper_Field_Container_Void.php +++ b/src/Helper/Helper_Field_Container_Void.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Form.php b/src/Helper/Helper_Form.php index 2f7c13f39..a5b632b77 100644 --- a/src/Helper/Helper_Form.php +++ b/src/Helper/Helper_Form.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Actions.php b/src/Helper/Helper_Interface_Actions.php index ab523c0a6..23cddc2c5 100644 --- a/src/Helper/Helper_Interface_Actions.php +++ b/src/Helper/Helper_Interface_Actions.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Config.php b/src/Helper/Helper_Interface_Config.php index d10221891..4575e6846 100644 --- a/src/Helper/Helper_Interface_Config.php +++ b/src/Helper/Helper_Interface_Config.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Config_Settings.php b/src/Helper/Helper_Interface_Config_Settings.php index 16ce73cc7..e817befdb 100644 --- a/src/Helper/Helper_Interface_Config_Settings.php +++ b/src/Helper/Helper_Interface_Config_Settings.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Extension_Settings.php b/src/Helper/Helper_Interface_Extension_Settings.php index f3500dda3..fd8a25060 100644 --- a/src/Helper/Helper_Interface_Extension_Settings.php +++ b/src/Helper/Helper_Interface_Extension_Settings.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Field_Pdf_Config.php b/src/Helper/Helper_Interface_Field_Pdf_Config.php index 843e10e44..ad3e771b2 100644 --- a/src/Helper/Helper_Interface_Field_Pdf_Config.php +++ b/src/Helper/Helper_Interface_Field_Pdf_Config.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Filters.php b/src/Helper/Helper_Interface_Filters.php index 4eda6e2fe..7b9f7f622 100644 --- a/src/Helper/Helper_Interface_Filters.php +++ b/src/Helper/Helper_Interface_Filters.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Setup_TearDown.php b/src/Helper/Helper_Interface_Setup_TearDown.php index 5f3c51aba..e20dd830a 100644 --- a/src/Helper/Helper_Interface_Setup_TearDown.php +++ b/src/Helper/Helper_Interface_Setup_TearDown.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Interface_Url_Signer.php b/src/Helper/Helper_Interface_Url_Signer.php index bb7a96639..3d300021f 100644 --- a/src/Helper/Helper_Interface_Url_Signer.php +++ b/src/Helper/Helper_Interface_Url_Signer.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Logger.php b/src/Helper/Helper_Logger.php index 6b0c840c9..d2976e532 100644 --- a/src/Helper/Helper_Logger.php +++ b/src/Helper/Helper_Logger.php @@ -15,7 +15,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Misc.php b/src/Helper/Helper_Misc.php index 437bc97e4..c8c39de03 100644 --- a/src/Helper/Helper_Misc.php +++ b/src/Helper/Helper_Misc.php @@ -13,7 +13,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Mpdf.php b/src/Helper/Helper_Mpdf.php index f0d1893cb..5ba9228a9 100644 --- a/src/Helper/Helper_Mpdf.php +++ b/src/Helper/Helper_Mpdf.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Notices.php b/src/Helper/Helper_Notices.php index f862b1a16..2361363c7 100644 --- a/src/Helper/Helper_Notices.php +++ b/src/Helper/Helper_Notices.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Options_Fields.php b/src/Helper/Helper_Options_Fields.php index da5b0e20c..9c812b868 100644 --- a/src/Helper/Helper_Options_Fields.php +++ b/src/Helper/Helper_Options_Fields.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_PDF.php b/src/Helper/Helper_PDF.php index 52c83d28f..4dd33abb0 100644 --- a/src/Helper/Helper_PDF.php +++ b/src/Helper/Helper_PDF.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_PDF_List_Table.php b/src/Helper/Helper_PDF_List_Table.php index 3f2915e94..7c2c373e9 100644 --- a/src/Helper/Helper_PDF_List_Table.php +++ b/src/Helper/Helper_PDF_List_Table.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Pdf_Queue.php b/src/Helper/Helper_Pdf_Queue.php index 9bf186b13..b7bb8227a 100644 --- a/src/Helper/Helper_Pdf_Queue.php +++ b/src/Helper/Helper_Pdf_Queue.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_QueryPath.php b/src/Helper/Helper_QueryPath.php index e92772e35..50efba20c 100644 --- a/src/Helper/Helper_QueryPath.php +++ b/src/Helper/Helper_QueryPath.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Sha256_Url_Signer.php b/src/Helper/Helper_Sha256_Url_Signer.php index 381ce0bc4..794945747 100644 --- a/src/Helper/Helper_Sha256_Url_Signer.php +++ b/src/Helper/Helper_Sha256_Url_Signer.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Singleton.php b/src/Helper/Helper_Singleton.php index dabe5082f..1738d0023 100644 --- a/src/Helper/Helper_Singleton.php +++ b/src/Helper/Helper_Singleton.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Templates.php b/src/Helper/Helper_Templates.php index abdecbd62..322c2196a 100644 --- a/src/Helper/Helper_Templates.php +++ b/src/Helper/Helper_Templates.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Trait_Logger.php b/src/Helper/Helper_Trait_Logger.php index d0d6506f7..ac4f86ac3 100644 --- a/src/Helper/Helper_Trait_Logger.php +++ b/src/Helper/Helper_Trait_Logger.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Helper/Helper_Url_Signer.php b/src/Helper/Helper_Url_Signer.php index 1702a4a81..663944b98 100644 --- a/src/Helper/Helper_Url_Signer.php +++ b/src/Helper/Helper_Url_Signer.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Actions.php b/src/Model/Model_Actions.php index a12060d94..8e5f79daa 100644 --- a/src/Model/Model_Actions.php +++ b/src/Model/Model_Actions.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Custom_Fonts.php b/src/Model/Model_Custom_Fonts.php index b1368b33b..cd40c88fe 100644 --- a/src/Model/Model_Custom_Fonts.php +++ b/src/Model/Model_Custom_Fonts.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Form_Settings.php b/src/Model/Model_Form_Settings.php index 5e16a7e11..fd06f95e7 100644 --- a/src/Model/Model_Form_Settings.php +++ b/src/Model/Model_Form_Settings.php @@ -20,7 +20,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Install.php b/src/Model/Model_Install.php index 2835e27a7..ebf6ff224 100644 --- a/src/Model/Model_Install.php +++ b/src/Model/Model_Install.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Mergetags.php b/src/Model/Model_Mergetags.php index c821f054c..f9bbcefd3 100644 --- a/src/Model/Model_Mergetags.php +++ b/src/Model/Model_Mergetags.php @@ -11,7 +11,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_PDF.php b/src/Model/Model_PDF.php index 5357603c7..f0f24a9d0 100644 --- a/src/Model/Model_PDF.php +++ b/src/Model/Model_PDF.php @@ -34,7 +34,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Settings.php b/src/Model/Model_Settings.php index 538c5afd8..fb6c52205 100644 --- a/src/Model/Model_Settings.php +++ b/src/Model/Model_Settings.php @@ -16,7 +16,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Shortcodes.php b/src/Model/Model_Shortcodes.php index a08a1a473..8b7ff913e 100644 --- a/src/Model/Model_Shortcodes.php +++ b/src/Model/Model_Shortcodes.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_System_Report.php b/src/Model/Model_System_Report.php index b3d72b4c9..f4a52553b 100644 --- a/src/Model/Model_System_Report.php +++ b/src/Model/Model_System_Report.php @@ -14,7 +14,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Templates.php b/src/Model/Model_Templates.php index e03510538..1f05e94c3 100644 --- a/src/Model/Model_Templates.php +++ b/src/Model/Model_Templates.php @@ -17,7 +17,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Model/Model_Uninstall.php b/src/Model/Model_Uninstall.php index 6a90d2f17..81bff086e 100644 --- a/src/Model/Model_Uninstall.php +++ b/src/Model/Model_Uninstall.php @@ -13,7 +13,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Statics/Kses.php b/src/Statics/Kses.php index b2b8831a6..659fe59ab 100644 --- a/src/Statics/Kses.php +++ b/src/Statics/Kses.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/Statics/Queue_Callbacks.php b/src/Statics/Queue_Callbacks.php index eb89b1b45..6da3b20ee 100644 --- a/src/Statics/Queue_Callbacks.php +++ b/src/Statics/Queue_Callbacks.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_Actions.php b/src/View/View_Actions.php index 54f0b7704..cd9f8023d 100644 --- a/src/View/View_Actions.php +++ b/src/View/View_Actions.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_Form_Settings.php b/src/View/View_Form_Settings.php index 5cb208bda..7771db220 100644 --- a/src/View/View_Form_Settings.php +++ b/src/View/View_Form_Settings.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_GravityForm_Settings_Markup.php b/src/View/View_GravityForm_Settings_Markup.php index 476ea4971..ddf840675 100644 --- a/src/View/View_GravityForm_Settings_Markup.php +++ b/src/View/View_GravityForm_Settings_Markup.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_PDF.php b/src/View/View_PDF.php index d6c1bfbe4..c9b71408d 100644 --- a/src/View/View_PDF.php +++ b/src/View/View_PDF.php @@ -27,7 +27,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_Settings.php b/src/View/View_Settings.php index cc20f94ce..39264e336 100644 --- a/src/View/View_Settings.php +++ b/src/View/View_Settings.php @@ -16,7 +16,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_Shortcodes.php b/src/View/View_Shortcodes.php index 2a109396c..c73a64366 100644 --- a/src/View/View_Shortcodes.php +++ b/src/View/View_Shortcodes.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_System_Report.php b/src/View/View_System_Report.php index baf353548..86e1b6fd2 100644 --- a/src/View/View_System_Report.php +++ b/src/View/View_System_Report.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/View_Uninstaller.php b/src/View/View_Uninstaller.php index 4f6e84966..d92e656db 100644 --- a/src/View/View_Uninstaller.php +++ b/src/View/View_Uninstaller.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/View/html/Actions/action_buttons.php b/src/View/html/Actions/action_buttons.php index 8b335a1ca..c81164827 100644 --- a/src/View/html/Actions/action_buttons.php +++ b/src/View/html/Actions/action_buttons.php @@ -4,7 +4,7 @@ * The Dismissal Button * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Actions/core_font.php b/src/View/html/Actions/core_font.php index 4e3c69162..5dcde9cf0 100644 --- a/src/View/html/Actions/core_font.php +++ b/src/View/html/Actions/core_font.php @@ -4,7 +4,7 @@ * The Review Plugin Notice * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/FormSettings/add_edit.php b/src/View/html/FormSettings/add_edit.php index 97af59a58..5a617e028 100644 --- a/src/View/html/FormSettings/add_edit.php +++ b/src/View/html/FormSettings/add_edit.php @@ -4,7 +4,7 @@ * The Add/Edit Form Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/FormSettings/list.php b/src/View/html/FormSettings/list.php index 37e4ba25c..e0159a5da 100644 --- a/src/View/html/FormSettings/list.php +++ b/src/View/html/FormSettings/list.php @@ -4,7 +4,7 @@ * List of Form Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/GravityForms/fieldset.php b/src/View/html/GravityForms/fieldset.php index d558797f7..283fb314b 100644 --- a/src/View/html/GravityForms/fieldset.php +++ b/src/View/html/GravityForms/fieldset.php @@ -2,7 +2,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/View/html/GravityForms/settings_field.php b/src/View/html/GravityForms/settings_field.php index 70aacfc64..c0a22bb85 100644 --- a/src/View/html/GravityForms/settings_field.php +++ b/src/View/html/GravityForms/settings_field.php @@ -2,7 +2,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/View/html/PDF/add_legalsigning_styles.php b/src/View/html/PDF/add_legalsigning_styles.php index f906f1e98..c267f5957 100644 --- a/src/View/html/PDF/add_legalsigning_styles.php +++ b/src/View/html/PDF/add_legalsigning_styles.php @@ -4,7 +4,7 @@ * The styles needed to display the Legal Signing for Gravity Forms plugin fields * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.10 */ diff --git a/src/View/html/PDF/core_template_styles.php b/src/View/html/PDF/core_template_styles.php index 1af0723ed..2c02fe444 100644 --- a/src/View/html/PDF/core_template_styles.php +++ b/src/View/html/PDF/core_template_styles.php @@ -4,7 +4,7 @@ * The styles needed to display our core PDF styles like header, footer, font and colour * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/PDF/entry_detailed_pdf.php b/src/View/html/PDF/entry_detailed_pdf.php index ba5134048..5d0732578 100644 --- a/src/View/html/PDF/entry_detailed_pdf.php +++ b/src/View/html/PDF/entry_detailed_pdf.php @@ -4,7 +4,7 @@ * The "View PDF" link for the entry list page * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/PDF/entry_list_pdf_multiple.php b/src/View/html/PDF/entry_list_pdf_multiple.php index 4ad19a26a..6b145c05b 100644 --- a/src/View/html/PDF/entry_list_pdf_multiple.php +++ b/src/View/html/PDF/entry_list_pdf_multiple.php @@ -4,7 +4,7 @@ * The "View PDF" link for the entry list page * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/PDF/entry_list_pdf_single.php b/src/View/html/PDF/entry_list_pdf_single.php index 8da18c672..87f1de728 100644 --- a/src/View/html/PDF/entry_list_pdf_single.php +++ b/src/View/html/PDF/entry_list_pdf_single.php @@ -4,7 +4,7 @@ * The "View PDF" link for the entry list page * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/PDF/entry_no_valid_pdf.php b/src/View/html/PDF/entry_no_valid_pdf.php index fc02f2a9c..603708aff 100644 --- a/src/View/html/PDF/entry_no_valid_pdf.php +++ b/src/View/html/PDF/entry_no_valid_pdf.php @@ -4,7 +4,7 @@ * Shows a warning message when all the PDF conditional logic doesn't pass for the current entry * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/View/html/PDF/form_title.php b/src/View/html/PDF/form_title.php index d9c35fd5d..fce7c079b 100644 --- a/src/View/html/PDF/form_title.php +++ b/src/View/html/PDF/form_title.php @@ -4,7 +4,7 @@ * The HTML mark-up needed to display our core PDF title * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/PDF/page_title.php b/src/View/html/PDF/page_title.php index 88c891871..66ac0f432 100644 --- a/src/View/html/PDF/page_title.php +++ b/src/View/html/PDF/page_title.php @@ -4,7 +4,7 @@ * The HTML mark-up to display our core PDF page * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Settings/extensions.php b/src/View/html/Settings/extensions.php index 06c6b35f2..0dd856e0d 100644 --- a/src/View/html/Settings/extensions.php +++ b/src/View/html/Settings/extensions.php @@ -4,7 +4,7 @@ * Extensions Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Settings/general.php b/src/View/html/Settings/general.php index 6c71ee365..958575a32 100644 --- a/src/View/html/Settings/general.php +++ b/src/View/html/Settings/general.php @@ -4,7 +4,7 @@ * General Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Settings/help.php b/src/View/html/Settings/help.php index 11180385f..c407eca99 100644 --- a/src/View/html/Settings/help.php +++ b/src/View/html/Settings/help.php @@ -4,7 +4,7 @@ * Help Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Settings/licence-info.php b/src/View/html/Settings/licence-info.php index 7f8f2d8e8..ab262f6be 100644 --- a/src/View/html/Settings/licence-info.php +++ b/src/View/html/Settings/licence-info.php @@ -4,7 +4,7 @@ * License Info * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.2 */ diff --git a/src/View/html/Settings/licence.php b/src/View/html/Settings/licence.php index 557a654ee..b97ed3fa5 100644 --- a/src/View/html/Settings/licence.php +++ b/src/View/html/Settings/licence.php @@ -4,7 +4,7 @@ * License Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.2 */ diff --git a/src/View/html/Settings/tabs.php b/src/View/html/Settings/tabs.php index 74b1a861f..8948cbd43 100644 --- a/src/View/html/Settings/tabs.php +++ b/src/View/html/Settings/tabs.php @@ -4,7 +4,7 @@ * Navigation Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Settings/tools.php b/src/View/html/Settings/tools.php index 41fd7ef70..348ff4a0d 100644 --- a/src/View/html/Settings/tools.php +++ b/src/View/html/Settings/tools.php @@ -4,7 +4,7 @@ * Tools Settings View * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Shortcodes/conditional_logic_not_met.php b/src/View/html/Shortcodes/conditional_logic_not_met.php index b2a28e860..e29d5d785 100644 --- a/src/View/html/Shortcodes/conditional_logic_not_met.php +++ b/src/View/html/Shortcodes/conditional_logic_not_met.php @@ -4,7 +4,7 @@ * PDF Conditional Logic not met * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Shortcodes/gravitypdf.php b/src/View/html/Shortcodes/gravitypdf.php index ae14c0469..c45347ab4 100644 --- a/src/View/html/Shortcodes/gravitypdf.php +++ b/src/View/html/Shortcodes/gravitypdf.php @@ -4,7 +4,7 @@ * The [gravitypdf] shortcode output * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Shortcodes/invalid_pdf_config.php b/src/View/html/Shortcodes/invalid_pdf_config.php index 8bd66b750..35218cca1 100644 --- a/src/View/html/Shortcodes/invalid_pdf_config.php +++ b/src/View/html/Shortcodes/invalid_pdf_config.php @@ -4,7 +4,7 @@ * No Entry ID for Shortcode * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Shortcodes/no_entry_id.php b/src/View/html/Shortcodes/no_entry_id.php index a06bb64b2..fb289f919 100644 --- a/src/View/html/Shortcodes/no_entry_id.php +++ b/src/View/html/Shortcodes/no_entry_id.php @@ -4,7 +4,7 @@ * No Entry ID for Shortcode * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Shortcodes/pdf_not_active.php b/src/View/html/Shortcodes/pdf_not_active.php index 83116f7e1..a7d0984bc 100644 --- a/src/View/html/Shortcodes/pdf_not_active.php +++ b/src/View/html/Shortcodes/pdf_not_active.php @@ -4,7 +4,7 @@ * PDF is not active. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/src/View/html/Uninstaller/uninstall_button.php b/src/View/html/Uninstaller/uninstall_button.php index eed89ca70..e311c5b45 100644 --- a/src/View/html/Uninstaller/uninstall_button.php +++ b/src/View/html/Uninstaller/uninstall_button.php @@ -2,7 +2,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/actions/coreFonts.js b/src/assets/js/react/actions/coreFonts.js index 5c283e416..8caeffd1c 100644 --- a/src/assets/js/react/actions/coreFonts.js +++ b/src/assets/js/react/actions/coreFonts.js @@ -14,7 +14,7 @@ export const CLEAR_REQUEST_REMAINING_DATA = 'CLEAR_REQUEST_REMAINING_DATA' * Redux Actions - payloads of information that send data from your application to your store * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/actions/fontManager.js b/src/assets/js/react/actions/fontManager.js index 547f7417b..67222ad3f 100644 --- a/src/assets/js/react/actions/fontManager.js +++ b/src/assets/js/react/actions/fontManager.js @@ -22,7 +22,7 @@ export const MOVE_SELECTED_FONT_TO_TOP = 'MOVE_SELECTED_FONT_TO_TOP' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/actions/templates.js b/src/assets/js/react/actions/templates.js index 562952bc3..ac1265e51 100644 --- a/src/assets/js/react/actions/templates.js +++ b/src/assets/js/react/actions/templates.js @@ -20,7 +20,7 @@ export const CLEAR_TEMPLATE_UPLOAD_PROCESSING = 'CLEAR_TEMPLATE_UPLOAD_PROCESSIN * Redux Actions - payloads of information that send data from your application to your store * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/api/api.js b/src/assets/js/react/api/api.js index fd95f25e6..d87293268 100644 --- a/src/assets/js/react/api/api.js +++ b/src/assets/js/react/api/api.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/api/coreFonts.js b/src/assets/js/react/api/coreFonts.js index a50b6348d..53e00f260 100644 --- a/src/assets/js/react/api/coreFonts.js +++ b/src/assets/js/react/api/coreFonts.js @@ -3,7 +3,7 @@ import request from 'superagent/dist/superagent.min' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/api/fontManager.js b/src/assets/js/react/api/fontManager.js index 5e9aa7793..e8a8bb266 100644 --- a/src/assets/js/react/api/fontManager.js +++ b/src/assets/js/react/api/fontManager.js @@ -5,7 +5,7 @@ import { api } from './api' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/api/help.js b/src/assets/js/react/api/help.js index 6f8ecce92..5377b9679 100644 --- a/src/assets/js/react/api/help.js +++ b/src/assets/js/react/api/help.js @@ -3,7 +3,7 @@ import request from 'superagent/dist/superagent.min' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/api/templates.js b/src/assets/js/react/api/templates.js index 7ab78c112..8660833cc 100644 --- a/src/assets/js/react/api/templates.js +++ b/src/assets/js/react/api/templates.js @@ -3,7 +3,7 @@ import request from 'superagent/dist/superagent.min' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/bootstrap/coreFontBootstrap.js b/src/assets/js/react/bootstrap/coreFontBootstrap.js index 06add16ab..2637faafe 100644 --- a/src/assets/js/react/bootstrap/coreFontBootstrap.js +++ b/src/assets/js/react/bootstrap/coreFontBootstrap.js @@ -11,7 +11,7 @@ const Routes = lazy(() => import('../router/coreFontRouter')) * Core Font Downloader Bootstrap * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/bootstrap/fontManagerBootstrap.js b/src/assets/js/react/bootstrap/fontManagerBootstrap.js index deb6b9d81..7f3dfd601 100644 --- a/src/assets/js/react/bootstrap/fontManagerBootstrap.js +++ b/src/assets/js/react/bootstrap/fontManagerBootstrap.js @@ -11,7 +11,7 @@ const AdvancedButton = lazy(() => import('../components/FontManager/AdvancedButt /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/bootstrap/helpBootstrap.js b/src/assets/js/react/bootstrap/helpBootstrap.js index 4c9fb3ea4..c7d18863b 100644 --- a/src/assets/js/react/bootstrap/helpBootstrap.js +++ b/src/assets/js/react/bootstrap/helpBootstrap.js @@ -9,7 +9,7 @@ const HelpContainer = lazy(() => import('../components/Help/HelpContainer')) /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/bootstrap/templateBootstrap.js b/src/assets/js/react/bootstrap/templateBootstrap.js index e7b9e93bc..e5813bd44 100644 --- a/src/assets/js/react/bootstrap/templateBootstrap.js +++ b/src/assets/js/react/bootstrap/templateBootstrap.js @@ -16,7 +16,7 @@ const TemplateButton = lazy(() => import('../components/Template/TemplateButton' * Advanced Template Selector Bootstrap * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Alert/Alert.js b/src/assets/js/react/components/Alert/Alert.js index 0a09b5464..b18b35bfd 100644 --- a/src/assets/js/react/components/Alert/Alert.js +++ b/src/assets/js/react/components/Alert/Alert.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/CoreFonts/CoreFontContainer.js b/src/assets/js/react/components/CoreFonts/CoreFontContainer.js index ebcf7fdbb..fdb9c40db 100644 --- a/src/assets/js/react/components/CoreFonts/CoreFontContainer.js +++ b/src/assets/js/react/components/CoreFonts/CoreFontContainer.js @@ -18,7 +18,7 @@ import { /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/components/CoreFonts/CoreFontCounter.js b/src/assets/js/react/components/CoreFonts/CoreFontCounter.js index 3991b0e8f..fe336a71d 100644 --- a/src/assets/js/react/components/CoreFonts/CoreFontCounter.js +++ b/src/assets/js/react/components/CoreFonts/CoreFontCounter.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/components/CoreFonts/CoreFontListResults.js b/src/assets/js/react/components/CoreFonts/CoreFontListResults.js index fd943a22b..43076b384 100644 --- a/src/assets/js/react/components/CoreFonts/CoreFontListResults.js +++ b/src/assets/js/react/components/CoreFonts/CoreFontListResults.js @@ -6,7 +6,7 @@ import ListSpacer from './CoreFontListSpacer' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/components/CoreFonts/CoreFontListSpacer.js b/src/assets/js/react/components/CoreFonts/CoreFontListSpacer.js index f1693413c..f5a1f99c7 100644 --- a/src/assets/js/react/components/CoreFonts/CoreFontListSpacer.js +++ b/src/assets/js/react/components/CoreFonts/CoreFontListSpacer.js @@ -3,7 +3,7 @@ import React from 'react' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/components/Empty.js b/src/assets/js/react/components/Empty.js index 6576599b8..21921f8d0 100644 --- a/src/assets/js/react/components/Empty.js +++ b/src/assets/js/react/components/Empty.js @@ -2,7 +2,7 @@ * Render a blank component for use with React Router's default route * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/FontManager/AddFont.js b/src/assets/js/react/components/FontManager/AddFont.js index 29c349bd7..7ddf07bf6 100644 --- a/src/assets/js/react/components/FontManager/AddFont.js +++ b/src/assets/js/react/components/FontManager/AddFont.js @@ -8,7 +8,7 @@ import AddUpdateFontFooter from './AddUpdateFontFooter' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/AddUpdateFontFooter.js b/src/assets/js/react/components/FontManager/AddUpdateFontFooter.js index 9c98074f0..9ccca6f49 100644 --- a/src/assets/js/react/components/FontManager/AddUpdateFontFooter.js +++ b/src/assets/js/react/components/FontManager/AddUpdateFontFooter.js @@ -11,7 +11,7 @@ import TemplateTooltip from './TemplateTooltip' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/AdvancedButton.js b/src/assets/js/react/components/FontManager/AdvancedButton.js index 8b733c271..aee33695d 100644 --- a/src/assets/js/react/components/FontManager/AdvancedButton.js +++ b/src/assets/js/react/components/FontManager/AdvancedButton.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontList.js b/src/assets/js/react/components/FontManager/FontList.js index 7251e8436..86c3511ce 100644 --- a/src/assets/js/react/components/FontManager/FontList.js +++ b/src/assets/js/react/components/FontManager/FontList.js @@ -10,7 +10,7 @@ import FontListAlertMessage from './FontListAlertMessage' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontListAlertMessage.js b/src/assets/js/react/components/FontManager/FontListAlertMessage.js index fda93e78b..1aedf295f 100644 --- a/src/assets/js/react/components/FontManager/FontListAlertMessage.js +++ b/src/assets/js/react/components/FontManager/FontListAlertMessage.js @@ -7,7 +7,7 @@ import { getCustomFontList, resetSearchResult } from '../../actions/fontManager' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontListHeader.js b/src/assets/js/react/components/FontManager/FontListHeader.js index 903954477..f18eb35df 100644 --- a/src/assets/js/react/components/FontManager/FontListHeader.js +++ b/src/assets/js/react/components/FontManager/FontListHeader.js @@ -3,7 +3,7 @@ import React from 'react' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontListIcon.js b/src/assets/js/react/components/FontManager/FontListIcon.js index 4863e7a00..7eafdb993 100644 --- a/src/assets/js/react/components/FontManager/FontListIcon.js +++ b/src/assets/js/react/components/FontManager/FontListIcon.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontListItems.js b/src/assets/js/react/components/FontManager/FontListItems.js index 3fa6d541e..c0007012b 100644 --- a/src/assets/js/react/components/FontManager/FontListItems.js +++ b/src/assets/js/react/components/FontManager/FontListItems.js @@ -12,7 +12,7 @@ import { toggleUpdateFont } from '../../utilities/FontManager/toggleUpdateFont' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontListSkeleton.js b/src/assets/js/react/components/FontManager/FontListSkeleton.js index f9142039b..d75fb5394 100644 --- a/src/assets/js/react/components/FontManager/FontListSkeleton.js +++ b/src/assets/js/react/components/FontManager/FontListSkeleton.js @@ -3,7 +3,7 @@ import React from 'react' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontManager.js b/src/assets/js/react/components/FontManager/FontManager.js index cccc61220..6024d20e8 100644 --- a/src/assets/js/react/components/FontManager/FontManager.js +++ b/src/assets/js/react/components/FontManager/FontManager.js @@ -7,7 +7,7 @@ import FontManagerBody from './FontManagerBody' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontManagerBody.js b/src/assets/js/react/components/FontManager/FontManagerBody.js index b0c59d1d8..a37b5ce05 100644 --- a/src/assets/js/react/components/FontManager/FontManagerBody.js +++ b/src/assets/js/react/components/FontManager/FontManagerBody.js @@ -26,7 +26,7 @@ import { toggleUpdateFont, addClass } from '../../utilities/FontManager/toggleUp /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontManagerHeader.js b/src/assets/js/react/components/FontManager/FontManagerHeader.js index 26de9b722..7b758e350 100644 --- a/src/assets/js/react/components/FontManager/FontManagerHeader.js +++ b/src/assets/js/react/components/FontManager/FontManagerHeader.js @@ -6,7 +6,7 @@ import CloseDialog from '../Modal/CloseDialog' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontVariant.js b/src/assets/js/react/components/FontManager/FontVariant.js index ab75672ee..f591bc49b 100644 --- a/src/assets/js/react/components/FontManager/FontVariant.js +++ b/src/assets/js/react/components/FontManager/FontVariant.js @@ -7,7 +7,7 @@ import FontVariantLabel from './FontVariantLabel' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/FontVariantLabel.js b/src/assets/js/react/components/FontManager/FontVariantLabel.js index 9a390e106..dc4222a66 100644 --- a/src/assets/js/react/components/FontManager/FontVariantLabel.js +++ b/src/assets/js/react/components/FontManager/FontVariantLabel.js @@ -5,7 +5,7 @@ import { sprintf } from 'sprintf-js' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/InitialAddUpdateState.js b/src/assets/js/react/components/FontManager/InitialAddUpdateState.js index 1a233e85b..ed8dd2169 100644 --- a/src/assets/js/react/components/FontManager/InitialAddUpdateState.js +++ b/src/assets/js/react/components/FontManager/InitialAddUpdateState.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/SearchBox.js b/src/assets/js/react/components/FontManager/SearchBox.js index 74154ea90..66b75ff8b 100644 --- a/src/assets/js/react/components/FontManager/SearchBox.js +++ b/src/assets/js/react/components/FontManager/SearchBox.js @@ -7,7 +7,7 @@ import { resetSearchResult, searchFontList } from '../../actions/fontManager' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/TemplateTooltip.js b/src/assets/js/react/components/FontManager/TemplateTooltip.js index 0c7553e1c..105709b55 100644 --- a/src/assets/js/react/components/FontManager/TemplateTooltip.js +++ b/src/assets/js/react/components/FontManager/TemplateTooltip.js @@ -7,7 +7,7 @@ import { adjustFontListHeight } from '../../utilities/FontManager/adjustFontList /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/FontManager/UpdateFont.js b/src/assets/js/react/components/FontManager/UpdateFont.js index fea719ff8..34e413c46 100644 --- a/src/assets/js/react/components/FontManager/UpdateFont.js +++ b/src/assets/js/react/components/FontManager/UpdateFont.js @@ -8,7 +8,7 @@ import AddUpdateFontFooter from './AddUpdateFontFooter' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/Help/DisplayResultContainer.js b/src/assets/js/react/components/Help/DisplayResultContainer.js index c91d4b282..da27b6168 100644 --- a/src/assets/js/react/components/Help/DisplayResultContainer.js +++ b/src/assets/js/react/components/Help/DisplayResultContainer.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/components/Help/HelpContainer.js b/src/assets/js/react/components/Help/HelpContainer.js index 09eaf96b0..aef8409fc 100644 --- a/src/assets/js/react/components/Help/HelpContainer.js +++ b/src/assets/js/react/components/Help/HelpContainer.js @@ -7,7 +7,7 @@ import DisplayResultContainer from './DisplayResultContainer' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/components/Modal/CloseDialog.js b/src/assets/js/react/components/Modal/CloseDialog.js index a21960078..a719ca0ac 100644 --- a/src/assets/js/react/components/Modal/CloseDialog.js +++ b/src/assets/js/react/components/Modal/CloseDialog.js @@ -11,7 +11,7 @@ import { toggleUpdateFont } from '../../utilities/FontManager/toggleUpdateFont' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/components/ShowMessage.js b/src/assets/js/react/components/ShowMessage.js index 550f2b2e4..217ec9473 100644 --- a/src/assets/js/react/components/ShowMessage.js +++ b/src/assets/js/react/components/ShowMessage.js @@ -7,7 +7,7 @@ import PropTypes from 'prop-types' * Renders a message or error, with the option to self-clear itself * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Spinner.js b/src/assets/js/react/components/Spinner.js index c47d441e0..37cae9d89 100644 --- a/src/assets/js/react/components/Spinner.js +++ b/src/assets/js/react/components/Spinner.js @@ -4,7 +4,7 @@ import PropTypes from 'prop-types' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/components/Template/TemplateActivateButton.js b/src/assets/js/react/components/Template/TemplateActivateButton.js index acf92b658..26fea59d9 100644 --- a/src/assets/js/react/components/Template/TemplateActivateButton.js +++ b/src/assets/js/react/components/Template/TemplateActivateButton.js @@ -11,7 +11,7 @@ import { selectTemplate } from '../../actions/templates' * On click it triggers our Redux action. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateButton.js b/src/assets/js/react/components/Template/TemplateButton.js index a5fc78171..a39e4769c 100644 --- a/src/assets/js/react/components/Template/TemplateButton.js +++ b/src/assets/js/react/components/Template/TemplateButton.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Render the button used to option our Fancy PDF template selector * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateContainer.js b/src/assets/js/react/components/Template/TemplateContainer.js index 292899e3b..681a00a64 100644 --- a/src/assets/js/react/components/Template/TemplateContainer.js +++ b/src/assets/js/react/components/Template/TemplateContainer.js @@ -8,7 +8,7 @@ import CloseDialog from '../Modal/CloseDialog' * Renders our Advanced Template Selector container which is shared amongst the components * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateDeleteButton.js b/src/assets/js/react/components/Template/TemplateDeleteButton.js index 791b42a6d..7c163ab81 100644 --- a/src/assets/js/react/components/Template/TemplateDeleteButton.js +++ b/src/assets/js/react/components/Template/TemplateDeleteButton.js @@ -11,7 +11,7 @@ import { addTemplate, deleteTemplate, templateProcessing, clearTemplateProcessin * removes the selected PDF template * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateFooterActions.js b/src/assets/js/react/components/Template/TemplateFooterActions.js index c9c0311b5..a61a7dcb3 100644 --- a/src/assets/js/react/components/Template/TemplateFooterActions.js +++ b/src/assets/js/react/components/Template/TemplateFooterActions.js @@ -10,7 +10,7 @@ import TemplateDeleteButton from './TemplateDeleteButton' * /template/:id pages. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateHeaderNavigation.js b/src/assets/js/react/components/Template/TemplateHeaderNavigation.js index c42630f23..5831ce1db 100644 --- a/src/assets/js/react/components/Template/TemplateHeaderNavigation.js +++ b/src/assets/js/react/components/Template/TemplateHeaderNavigation.js @@ -9,7 +9,7 @@ import { withRouter } from 'react-router-dom' * /template/:id pages. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateHeaderTitle.js b/src/assets/js/react/components/Template/TemplateHeaderTitle.js index 87eb4a05e..721c3fd97 100644 --- a/src/assets/js/react/components/Template/TemplateHeaderTitle.js +++ b/src/assets/js/react/components/Template/TemplateHeaderTitle.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Renders the Template Header Title * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateList.js b/src/assets/js/react/components/Template/TemplateList.js index 0ce13b5bc..300a83e79 100644 --- a/src/assets/js/react/components/Template/TemplateList.js +++ b/src/assets/js/react/components/Template/TemplateList.js @@ -15,7 +15,7 @@ import getTemplates from '../../selectors/getTemplates' * The master component for rendering the all PDF templates as a list * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateListItem.js b/src/assets/js/react/components/Template/TemplateListItem.js index be0650401..19eef0362 100644 --- a/src/assets/js/react/components/Template/TemplateListItem.js +++ b/src/assets/js/react/components/Template/TemplateListItem.js @@ -16,7 +16,7 @@ import { updateTemplateParam } from '../../actions/templates' * Display the individual template item for usage our template list * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateListItemComponents.js b/src/assets/js/react/components/Template/TemplateListItemComponents.js index 93bc86035..45b979d1a 100644 --- a/src/assets/js/react/components/Template/TemplateListItemComponents.js +++ b/src/assets/js/react/components/Template/TemplateListItemComponents.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Contains stateless React components for our Template List Items * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateScreenshot.js b/src/assets/js/react/components/Template/TemplateScreenshot.js index ba930f9ae..0ac1e4686 100644 --- a/src/assets/js/react/components/Template/TemplateScreenshot.js +++ b/src/assets/js/react/components/Template/TemplateScreenshot.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Display the Template Screenshot for the List Items * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateScreenshots.js b/src/assets/js/react/components/Template/TemplateScreenshots.js index 8117d80dc..a0a915ed8 100644 --- a/src/assets/js/react/components/Template/TemplateScreenshots.js +++ b/src/assets/js/react/components/Template/TemplateScreenshots.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Display the Template Screenshot for the individual templates (uses different markup - out of our control) * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateSearch.js b/src/assets/js/react/components/Template/TemplateSearch.js index 38694c4f5..c6f234573 100644 --- a/src/assets/js/react/components/Template/TemplateSearch.js +++ b/src/assets/js/react/components/Template/TemplateSearch.js @@ -10,7 +10,7 @@ import { searchTemplates } from '../../actions/templates' * Handles the PDF template search functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateSingle.js b/src/assets/js/react/components/Template/TemplateSingle.js index ec4988af8..884216c10 100644 --- a/src/assets/js/react/components/Template/TemplateSingle.js +++ b/src/assets/js/react/components/Template/TemplateSingle.js @@ -23,7 +23,7 @@ import getTemplates from '../../selectors/getTemplates' * Renders a single PDF template, which get displayed on the /template/:id page. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateSingleComponents.js b/src/assets/js/react/components/Template/TemplateSingleComponents.js index 683ea4436..2ddd29339 100644 --- a/src/assets/js/react/components/Template/TemplateSingleComponents.js +++ b/src/assets/js/react/components/Template/TemplateSingleComponents.js @@ -6,7 +6,7 @@ import PropTypes from 'prop-types' * Contains stateless React components for our Single Template * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/components/Template/TemplateUploader.js b/src/assets/js/react/components/Template/TemplateUploader.js index 548dfe528..8ccfb310a 100644 --- a/src/assets/js/react/components/Template/TemplateUploader.js +++ b/src/assets/js/react/components/Template/TemplateUploader.js @@ -18,7 +18,7 @@ import { * Handles the uploading of new PDF templates to the server * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/gfpdf-main.js b/src/assets/js/react/gfpdf-main.js index 7d2a1b283..1529b503b 100644 --- a/src/assets/js/react/gfpdf-main.js +++ b/src/assets/js/react/gfpdf-main.js @@ -15,7 +15,7 @@ import '../../scss/gfpdf-styles.scss' * JS Entry point for WebPack * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/reducers/coreFontReducer.js b/src/assets/js/react/reducers/coreFontReducer.js index 99a2987fe..5bd8e64a2 100644 --- a/src/assets/js/react/reducers/coreFontReducer.js +++ b/src/assets/js/react/reducers/coreFontReducer.js @@ -13,7 +13,7 @@ import { /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/reducers/fontManagerReducer.js b/src/assets/js/react/reducers/fontManagerReducer.js index 650218314..6ee2c3e49 100644 --- a/src/assets/js/react/reducers/fontManagerReducer.js +++ b/src/assets/js/react/reducers/fontManagerReducer.js @@ -34,7 +34,7 @@ import { /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/reducers/templateReducer.js b/src/assets/js/react/reducers/templateReducer.js index f02976d39..9a4a4bd44 100644 --- a/src/assets/js/react/reducers/templateReducer.js +++ b/src/assets/js/react/reducers/templateReducer.js @@ -19,7 +19,7 @@ import { * and updates the template portion of our store * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/router/coreFontRouter.js b/src/assets/js/react/router/coreFontRouter.js index 55716c8d3..250db30ae 100644 --- a/src/assets/js/react/router/coreFontRouter.js +++ b/src/assets/js/react/router/coreFontRouter.js @@ -7,7 +7,7 @@ import CoreFontContainer from '../components/CoreFonts/CoreFontContainer' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/router/fontManagerRouter.js b/src/assets/js/react/router/fontManagerRouter.js index d191f959d..8ae858563 100644 --- a/src/assets/js/react/router/fontManagerRouter.js +++ b/src/assets/js/react/router/fontManagerRouter.js @@ -10,7 +10,7 @@ import Empty from '../components/Empty' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/router/templateRouter.js b/src/assets/js/react/router/templateRouter.js index 5c61c05e4..be92c9ccd 100644 --- a/src/assets/js/react/router/templateRouter.js +++ b/src/assets/js/react/router/templateRouter.js @@ -15,7 +15,7 @@ const TemplateSingle = lazy(() => import('../components/Template/TemplateSingle' * routes for another module. * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/sagas/coreFonts.js b/src/assets/js/react/sagas/coreFonts.js index 0a971ef61..693dd9b88 100644 --- a/src/assets/js/react/sagas/coreFonts.js +++ b/src/assets/js/react/sagas/coreFonts.js @@ -16,7 +16,7 @@ import { apiGetFilesFromGitHub, apiPostDownloadFonts } from '../api/coreFonts' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/sagas/fontManager.js b/src/assets/js/react/sagas/fontManager.js index 44ef05d6e..b6c488e01 100644 --- a/src/assets/js/react/sagas/fontManager.js +++ b/src/assets/js/react/sagas/fontManager.js @@ -25,7 +25,7 @@ import { /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/sagas/index.js b/src/assets/js/react/sagas/index.js index c572d5b03..3f90a610e 100644 --- a/src/assets/js/react/sagas/index.js +++ b/src/assets/js/react/sagas/index.js @@ -7,7 +7,7 @@ import { watchGetCustomFontList, watchAddFont, watchEditFont, watchDeleteFont } /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/sagas/templates.js b/src/assets/js/react/sagas/templates.js index b7face849..9cc13fb53 100644 --- a/src/assets/js/react/sagas/templates.js +++ b/src/assets/js/react/sagas/templates.js @@ -17,7 +17,7 @@ import { apiPostUpdateSelectBox, apiPostTemplateProcessing, apiPostTemplateUploa /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ diff --git a/src/assets/js/react/selectors/getTemplates.js b/src/assets/js/react/selectors/getTemplates.js index a04c40f66..2d06b8386 100644 --- a/src/assets/js/react/selectors/getTemplates.js +++ b/src/assets/js/react/selectors/getTemplates.js @@ -8,7 +8,7 @@ import versionCompare from '../utilities/versionCompare' * It also checks if the PDF templates are compatible with the current version of Gravity PDF * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/src/assets/js/react/store/index.js b/src/assets/js/react/store/index.js index 75f7c02dd..e7256ba55 100644 --- a/src/assets/js/react/store/index.js +++ b/src/assets/js/react/store/index.js @@ -9,7 +9,7 @@ import rootReducer from '../reducers/index' /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/assets/js/react/utilities/FontManager/adjustFontListHeight.js b/src/assets/js/react/utilities/FontManager/adjustFontListHeight.js index 99dfd4363..4262d6a41 100644 --- a/src/assets/js/react/utilities/FontManager/adjustFontListHeight.js +++ b/src/assets/js/react/utilities/FontManager/adjustFontListHeight.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js b/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js index b02f4b74b..1908ae265 100644 --- a/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js +++ b/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/utilities/FontManager/fontManagerReducer.js b/src/assets/js/react/utilities/FontManager/fontManagerReducer.js index d215bb3dd..a85490f58 100644 --- a/src/assets/js/react/utilities/FontManager/fontManagerReducer.js +++ b/src/assets/js/react/utilities/FontManager/fontManagerReducer.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/utilities/FontManager/toggleUpdateFont.js b/src/assets/js/react/utilities/FontManager/toggleUpdateFont.js index a04cb75eb..0c5f0e431 100644 --- a/src/assets/js/react/utilities/FontManager/toggleUpdateFont.js +++ b/src/assets/js/react/utilities/FontManager/toggleUpdateFont.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 6.0 */ diff --git a/src/assets/js/react/utilities/promiseReflect.js b/src/assets/js/react/utilities/promiseReflect.js index b51cab703..90cdfc249 100644 --- a/src/assets/js/react/utilities/promiseReflect.js +++ b/src/assets/js/react/utilities/promiseReflect.js @@ -1,6 +1,6 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/src/autoload.php b/src/autoload.php index dfe3ed6d1..ef03966e5 100644 --- a/src/autoload.php +++ b/src/autoload.php @@ -2,7 +2,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/bootstrap.php b/src/bootstrap.php index 97249aa4c..434fed89a 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -25,7 +25,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/deprecated.php b/src/deprecated.php index 7860eb9d5..67d116523 100644 --- a/src/deprecated.php +++ b/src/deprecated.php @@ -16,7 +16,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/templates/config/blank-slate.php b/src/templates/config/blank-slate.php index e03f73274..a33ab43c2 100644 --- a/src/templates/config/blank-slate.php +++ b/src/templates/config/blank-slate.php @@ -15,7 +15,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/src/templates/config/focus-gravity.php b/src/templates/config/focus-gravity.php index 168fbc4cc..ef7ada6e7 100644 --- a/src/templates/config/focus-gravity.php +++ b/src/templates/config/focus-gravity.php @@ -15,7 +15,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Custom_Fonts.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Custom_Fonts.php index aa16b6769..19cc20710 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Custom_Fonts.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Custom_Fonts.php @@ -12,7 +12,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Export_Entries.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Export_Entries.php index 71f4b34fc..d64c2c854 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Export_Entries.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Export_Entries.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php index 103921f40..b24e4112b 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php @@ -11,7 +11,7 @@ /** * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.0 */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_System_Report.php b/tests/phpunit/unit-tests/Controller/Test_Controller_System_Report.php index 029054131..2998a96ac 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_System_Report.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_System_Report.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Upgrade_Routines.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Upgrade_Routines.php index b78fd1f8d..cb1d50857 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Upgrade_Routines.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Upgrade_Routines.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Webhooks.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Webhooks.php index 9d9dc22e0..e99fdae5d 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Webhooks.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Webhooks.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Zapier.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Zapier.php index 675e18453..b3c97bd20 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Zapier.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Zapier.php @@ -6,7 +6,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Consent.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Consent.php index b39a6f920..80e296991 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Consent.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Consent.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Form.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Form.php index cf009c472..754288b7b 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Form.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Form.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php index 672bf7089..4d64a73f9 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php index fdb6c52e0..57ff9e2a6 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php index 22992d3c7..a411dbbc8 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php index 5ca29b25a..e70deb31f 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php index e3c88bfb8..e3a93755e 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Image.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Image.php index fe686e586..8d5532aa0 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Image.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Image.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Radio.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Radio.php index fb1b5b17c..6a8de5a9d 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Radio.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Radio.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Repeater.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Repeater.php index 5746e228a..a419bebc4 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Repeater.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Repeater.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Section.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Section.php index fdcae316e..ca5fcdac7 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Section.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Section.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Select.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Select.php index 16bf49ab9..df1d4ad4a 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Select.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Select.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Signature.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Signature.php index c62afef9e..21b68eb39 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Signature.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Signature.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Survey.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Survey.php index cbb85b657..257ecff8a 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Survey.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Survey.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Fonts/Test_FlushCache.php b/tests/phpunit/unit-tests/Helper/Fonts/Test_FlushCache.php index eb0723c71..f4c02e7db 100644 --- a/tests/phpunit/unit-tests/Helper/Fonts/Test_FlushCache.php +++ b/tests/phpunit/unit-tests/Helper/Fonts/Test_FlushCache.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Helper/Test_Helper_Field_Container_Gf25.php b/tests/phpunit/unit-tests/Helper/Test_Helper_Field_Container_Gf25.php index 1d5e4e4aa..3d85c861a 100644 --- a/tests/phpunit/unit-tests/Helper/Test_Helper_Field_Container_Gf25.php +++ b/tests/phpunit/unit-tests/Helper/Test_Helper_Field_Container_Gf25.php @@ -8,7 +8,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Mocks/zapier-mock.php b/tests/phpunit/unit-tests/Mocks/zapier-mock.php index 4bf321291..9bded295e 100644 --- a/tests/phpunit/unit-tests/Mocks/zapier-mock.php +++ b/tests/phpunit/unit-tests/Mocks/zapier-mock.php @@ -4,7 +4,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Model/Test_Model_Custom_Fonts.php b/tests/phpunit/unit-tests/Model/Test_Model_Custom_Fonts.php index b6ca95a28..423300ab7 100644 --- a/tests/phpunit/unit-tests/Model/Test_Model_Custom_Fonts.php +++ b/tests/phpunit/unit-tests/Model/Test_Model_Custom_Fonts.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Model/Test_Model_Mergetags.php b/tests/phpunit/unit-tests/Model/Test_Model_Mergetags.php index e53fcad5f..44044e818 100644 --- a/tests/phpunit/unit-tests/Model/Test_Model_Mergetags.php +++ b/tests/phpunit/unit-tests/Model/Test_Model_Mergetags.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Model/Test_Model_Pdf.php b/tests/phpunit/unit-tests/Model/Test_Model_Pdf.php index 949fc0fab..4355cdf86 100644 --- a/tests/phpunit/unit-tests/Model/Test_Model_Pdf.php +++ b/tests/phpunit/unit-tests/Model/Test_Model_Pdf.php @@ -10,7 +10,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Model/Test_Model_Pdf_Meta_Box.php b/tests/phpunit/unit-tests/Model/Test_Model_Pdf_Meta_Box.php index f72135f6c..7600d3fe3 100644 --- a/tests/phpunit/unit-tests/Model/Test_Model_Pdf_Meta_Box.php +++ b/tests/phpunit/unit-tests/Model/Test_Model_Pdf_Meta_Box.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Model/Test_Model_System_Report.php b/tests/phpunit/unit-tests/Model/Test_Model_System_Report.php index e8cbc5e28..cfa443305 100644 --- a/tests/phpunit/unit-tests/Model/Test_Model_System_Report.php +++ b/tests/phpunit/unit-tests/Model/Test_Model_System_Report.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/Statics/Test_kses.php b/tests/phpunit/unit-tests/Statics/Test_kses.php index 611b6ae76..ccdf16ed6 100644 --- a/tests/phpunit/unit-tests/Statics/Test_kses.php +++ b/tests/phpunit/unit-tests/Statics/Test_kses.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/View/Test_View_System_Report.php b/tests/phpunit/unit-tests/View/Test_View_System_Report.php index 606257fe6..9fafd5a7e 100644 --- a/tests/phpunit/unit-tests/View/Test_View_System_Report.php +++ b/tests/phpunit/unit-tests/View/Test_View_System_Report.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License */ diff --git a/tests/phpunit/unit-tests/test-actions.php b/tests/phpunit/unit-tests/test-actions.php index c588d0b29..6d71aea11 100644 --- a/tests/phpunit/unit-tests/test-actions.php +++ b/tests/phpunit/unit-tests/test-actions.php @@ -12,7 +12,7 @@ * Test Gravity PDF Actions functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-addon.php b/tests/phpunit/unit-tests/test-addon.php index 3f1fe3459..e48d40468 100644 --- a/tests/phpunit/unit-tests/test-addon.php +++ b/tests/phpunit/unit-tests/test-addon.php @@ -14,7 +14,7 @@ * Test Gravity PDF Abstract Addon functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.2 */ diff --git a/tests/phpunit/unit-tests/test-ajax.php b/tests/phpunit/unit-tests/test-ajax.php index bd1fd426d..fd25251d0 100644 --- a/tests/phpunit/unit-tests/test-ajax.php +++ b/tests/phpunit/unit-tests/test-ajax.php @@ -12,7 +12,7 @@ * Test Gravity AJAX Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-api.php b/tests/phpunit/unit-tests/test-api.php index 0f1ed7356..fa3939b3b 100644 --- a/tests/phpunit/unit-tests/test-api.php +++ b/tests/phpunit/unit-tests/test-api.php @@ -10,7 +10,7 @@ * Test Gravity PDF Helper Misc Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-autoloader.php b/tests/phpunit/unit-tests/test-autoloader.php index 59135fae6..9147a7f85 100644 --- a/tests/phpunit/unit-tests/test-autoloader.php +++ b/tests/phpunit/unit-tests/test-autoloader.php @@ -8,7 +8,7 @@ * Test Gravity PDF Class AutoLoader Class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-bootstrap.php b/tests/phpunit/unit-tests/test-bootstrap.php index 0eb0f8d0c..51a317753 100644 --- a/tests/phpunit/unit-tests/test-bootstrap.php +++ b/tests/phpunit/unit-tests/test-bootstrap.php @@ -9,7 +9,7 @@ * Test Gravity PDF Bootstrap Class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-deprecated.php b/tests/phpunit/unit-tests/test-deprecated.php index e0d3a0e05..473b9cdc8 100644 --- a/tests/phpunit/unit-tests/test-deprecated.php +++ b/tests/phpunit/unit-tests/test-deprecated.php @@ -10,7 +10,7 @@ * Test Gravity PDF deprecated classes / methods / functions * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-field-container.php b/tests/phpunit/unit-tests/test-field-container.php index 2ca9009f2..128e4cd5c 100644 --- a/tests/phpunit/unit-tests/test-field-container.php +++ b/tests/phpunit/unit-tests/test-field-container.php @@ -12,7 +12,7 @@ * Test Gravity PDF Helper_Field_Container class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-field-markup.php b/tests/phpunit/unit-tests/test-field-markup.php index 05a36b06c..229eea8c8 100644 --- a/tests/phpunit/unit-tests/test-field-markup.php +++ b/tests/phpunit/unit-tests/test-field-markup.php @@ -18,7 +18,7 @@ /** * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.1 */ diff --git a/tests/phpunit/unit-tests/test-form-data.php b/tests/phpunit/unit-tests/test-form-data.php index cff46ca26..b43efd8a5 100644 --- a/tests/phpunit/unit-tests/test-form-data.php +++ b/tests/phpunit/unit-tests/test-form-data.php @@ -12,7 +12,7 @@ * Test our custom template $form_data array * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-form-settings.php b/tests/phpunit/unit-tests/test-form-settings.php index e61cd26e7..23f4f7166 100644 --- a/tests/phpunit/unit-tests/test-form-settings.php +++ b/tests/phpunit/unit-tests/test-form-settings.php @@ -14,7 +14,7 @@ * Test Gravity PDF Form Settings Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-gravity-forms.php b/tests/phpunit/unit-tests/test-gravity-forms.php index 26d836965..1dfa232ee 100644 --- a/tests/phpunit/unit-tests/test-gravity-forms.php +++ b/tests/phpunit/unit-tests/test-gravity-forms.php @@ -13,7 +13,7 @@ * Test Common Gravity Forms Functions * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-helper-data.php b/tests/phpunit/unit-tests/test-helper-data.php index d9b582a07..154c8ec7c 100644 --- a/tests/phpunit/unit-tests/test-helper-data.php +++ b/tests/phpunit/unit-tests/test-helper-data.php @@ -10,7 +10,7 @@ * Test Gravity PDF Data Helper Class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-helper-misc.php b/tests/phpunit/unit-tests/test-helper-misc.php index 34929f475..f3dc03ed0 100644 --- a/tests/phpunit/unit-tests/test-helper-misc.php +++ b/tests/phpunit/unit-tests/test-helper-misc.php @@ -9,7 +9,7 @@ * Test Gravity PDF Helper Misc Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-helper-mpdf.php b/tests/phpunit/unit-tests/test-helper-mpdf.php index bc892819e..23ce5f841 100644 --- a/tests/phpunit/unit-tests/test-helper-mpdf.php +++ b/tests/phpunit/unit-tests/test-helper-mpdf.php @@ -8,7 +8,7 @@ /** * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.5 */ diff --git a/tests/phpunit/unit-tests/test-helper-templates.php b/tests/phpunit/unit-tests/test-helper-templates.php index 978ac46f7..f4e1077f5 100644 --- a/tests/phpunit/unit-tests/test-helper-templates.php +++ b/tests/phpunit/unit-tests/test-helper-templates.php @@ -11,7 +11,7 @@ * Test Gravity PDF Templates Helper class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.1 */ diff --git a/tests/phpunit/unit-tests/test-installer.php b/tests/phpunit/unit-tests/test-installer.php index 4efc83a67..e0cf3b174 100644 --- a/tests/phpunit/unit-tests/test-installer.php +++ b/tests/phpunit/unit-tests/test-installer.php @@ -12,7 +12,7 @@ * Test Gravity PDF Installer functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-interfaces.php b/tests/phpunit/unit-tests/test-interfaces.php index 0fb6a2529..9fc981651 100644 --- a/tests/phpunit/unit-tests/test-interfaces.php +++ b/tests/phpunit/unit-tests/test-interfaces.php @@ -9,7 +9,7 @@ * Test Gravity PDF Interfaces * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-logger.php b/tests/phpunit/unit-tests/test-logger.php index 3b7235152..afae28fd4 100644 --- a/tests/phpunit/unit-tests/test-logger.php +++ b/tests/phpunit/unit-tests/test-logger.php @@ -7,7 +7,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.2 */ diff --git a/tests/phpunit/unit-tests/test-mvc-abstracts.php b/tests/phpunit/unit-tests/test-mvc-abstracts.php index eb3bce768..998c3e942 100644 --- a/tests/phpunit/unit-tests/test-mvc-abstracts.php +++ b/tests/phpunit/unit-tests/test-mvc-abstracts.php @@ -15,7 +15,7 @@ * Test Gravity PDF MVC Abstraction classes * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-notices.php b/tests/phpunit/unit-tests/test-notices.php index ee58b8a1d..2c7c84e73 100644 --- a/tests/phpunit/unit-tests/test-notices.php +++ b/tests/phpunit/unit-tests/test-notices.php @@ -9,7 +9,7 @@ * Test Gravity PDF Actions functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-options-api.php b/tests/phpunit/unit-tests/test-options-api.php index cd584f345..8931892ec 100644 --- a/tests/phpunit/unit-tests/test-options-api.php +++ b/tests/phpunit/unit-tests/test-options-api.php @@ -10,7 +10,7 @@ * Test Gravity PDF Options API Class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-pdf.php b/tests/phpunit/unit-tests/test-pdf.php index afdac755f..11ac55075 100644 --- a/tests/phpunit/unit-tests/test-pdf.php +++ b/tests/phpunit/unit-tests/test-pdf.php @@ -23,7 +23,7 @@ * Test Gravity PDF Endpoint Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-pre-checks.php b/tests/phpunit/unit-tests/test-pre-checks.php index 2cd519432..042412fd0 100644 --- a/tests/phpunit/unit-tests/test-pre-checks.php +++ b/tests/phpunit/unit-tests/test-pre-checks.php @@ -10,7 +10,7 @@ * Test Gravity PDF Loader Class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-query-path.php b/tests/phpunit/unit-tests/test-query-path.php index 242661293..0fbf7e1f6 100644 --- a/tests/phpunit/unit-tests/test-query-path.php +++ b/tests/phpunit/unit-tests/test-query-path.php @@ -9,7 +9,7 @@ * Test Gravity PDF Helper_QueryPath class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-settings.php b/tests/phpunit/unit-tests/test-settings.php index 3b4172b37..1d788c3fa 100644 --- a/tests/phpunit/unit-tests/test-settings.php +++ b/tests/phpunit/unit-tests/test-settings.php @@ -18,7 +18,7 @@ * Test Gravity PDF Settings Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-shortcodes.php b/tests/phpunit/unit-tests/test-shortcodes.php index e4347f9ee..cdf648340 100644 --- a/tests/phpunit/unit-tests/test-shortcodes.php +++ b/tests/phpunit/unit-tests/test-shortcodes.php @@ -12,7 +12,7 @@ * Test Gravity PDF Shortcode functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-singleton.php b/tests/phpunit/unit-tests/test-singleton.php index d50484aa6..f50edfcd5 100644 --- a/tests/phpunit/unit-tests/test-singleton.php +++ b/tests/phpunit/unit-tests/test-singleton.php @@ -10,7 +10,7 @@ * Test Gravity PDF Singleton Helper class * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 4.0 */ diff --git a/tests/phpunit/unit-tests/test-slow-pdf-processes.php b/tests/phpunit/unit-tests/test-slow-pdf-processes.php index cd576e195..c9470197b 100644 --- a/tests/phpunit/unit-tests/test-slow-pdf-processes.php +++ b/tests/phpunit/unit-tests/test-slow-pdf-processes.php @@ -17,7 +17,7 @@ * Can be tested with: phpunit --group slow-pdf-processes * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-templates.php b/tests/phpunit/unit-tests/test-templates.php index b2c41faea..195c9d2bb 100644 --- a/tests/phpunit/unit-tests/test-templates.php +++ b/tests/phpunit/unit-tests/test-templates.php @@ -15,7 +15,7 @@ * Test Gravity PDF Templates Functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-uninstaller.php b/tests/phpunit/unit-tests/test-uninstaller.php index 5cbc873a3..f09b8b508 100644 --- a/tests/phpunit/unit-tests/test-uninstaller.php +++ b/tests/phpunit/unit-tests/test-uninstaller.php @@ -14,7 +14,7 @@ * Test Gravity PDF Uninstall functionality * * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 1.0 */ diff --git a/tests/phpunit/unit-tests/test-url-signer.php b/tests/phpunit/unit-tests/test-url-signer.php index 5698b22f3..7c3c320d7 100644 --- a/tests/phpunit/unit-tests/test-url-signer.php +++ b/tests/phpunit/unit-tests/test-url-signer.php @@ -9,7 +9,7 @@ /** * @package Gravity PDF - * @copyright Copyright (c) 2024, Blue Liquid Designs + * @copyright Copyright (c) 2025, Blue Liquid Designs * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License * @since 5.2 */ From 067e17d0262ec18dec16807099fc5337ec306f3c Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 28 Apr 2025 15:56:19 +1000 Subject: [PATCH 006/110] Remove PHP7.3 from automated tests Gravity Forms 2.9.4 set their minimum requirements to PHP7.4+ (cherry picked from commit e84e591183b5f6bc3e659bb583f1ed2720bf5c82) --- .github/workflows/phpunit.tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/phpunit.tests.yml b/.github/workflows/phpunit.tests.yml index 985379d53..2fcaf1c4e 100644 --- a/.github/workflows/phpunit.tests.yml +++ b/.github/workflows/phpunit.tests.yml @@ -42,7 +42,7 @@ jobs: strategy: fail-fast: false matrix: - php: [ '8.3', '8.2', '8.1', '8.0', '7.4', '7.3' ] + php: [ '8.3', '8.2', '8.1', '8.0', '7.4' ] os: [ ubuntu-latest ] multisite: [ false ] include: From dc772da0393700ca1db97cf215204449ad8c17fc Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 28 Apr 2025 14:42:41 +1000 Subject: [PATCH 007/110] Update Background Processing Queue Make compatible with library updates included in Gravity Forms 2.9.7 and 2.9.8. Backwards compatible with < GF 2.9.7 too. See https://github.com/gravityforms/gravityforms/pull/3208 See https://github.com/gravityforms/gravityforms/pull/3196 (cherry picked from commit 062f3e4c3f7e5eb8d5255a6df55c9c307531288d) --- src/Controller/Controller_Pdf_Queue.php | 16 +++++++-- src/Helper/Helper_Pdf_Queue.php | 19 ++++++----- src/bootstrap.php | 11 +++++++ .../Controller/Test_Controller_Pdf_Queue.php | 33 ++++++++----------- 4 files changed, 47 insertions(+), 32 deletions(-) diff --git a/src/Controller/Controller_Pdf_Queue.php b/src/Controller/Controller_Pdf_Queue.php index 12ba6e23a..0d314e9ba 100644 --- a/src/Controller/Controller_Pdf_Queue.php +++ b/src/Controller/Controller_Pdf_Queue.php @@ -242,7 +242,17 @@ public function queue_dispatch_resend_notification_tasks( $form, $entry ) { */ public function queue_async_tasks( $form, $entry ) { foreach ( $this->form_async_notifications as $notification ) { - $this->queue->push_to_queue( $this->get_queue_tasks( $entry, $form, [ $notification ] ) ); + $tasks = $this->get_queue_tasks( $entry, $form, [ $notification ] ); + + /* if older version of Gravity Forms group tasks together */ + if ( version_compare( \GFCommon::$version, '2.9.7', '<' ) ) { + $this->queue->push_to_queue( $tasks ); + } else { + /* if newer version of Gravity Forms, push each task individually */ + foreach ( $tasks as $task ) { + $this->queue->push_to_queue( [ $task ] ); + } + } } } @@ -340,7 +350,7 @@ protected function queue_pdfs( $notifications, $pdfs, $form, $entry ) { foreach ( $pdfs as $pdf ) { $pdf_queue_data = [ - 'id' => $this->get_queue_id( $form, $entry, $pdf ), + 'id' => 'create-pdf-' . $this->get_queue_id( $form, $entry, $pdf ), 'func' => '\GFPDF\Statics\Queue_Callbacks::create_pdf', 'args' => [ $entry['id'], $pdf['id'] ], 'unrecoverable' => true, @@ -388,7 +398,7 @@ protected function queue_notifications( $notifications, $pdfs, $form, $entry ) { foreach ( $pdfs as $pdf ) { if ( $this->model_pdf->maybe_attach_to_notification( $notification, $pdf, $entry, $form ) ) { $queue_data[] = [ - 'id' => $this->get_queue_id( $form, $entry, $pdf ) . '-' . $notification['id'], + 'id' => 'send-notification-' . $this->get_queue_id( $form, $entry, $pdf ) . '-' . $notification['id'], 'func' => '\GFPDF\Statics\Queue_Callbacks::send_notification', 'args' => [ $form['id'], $entry['id'], $notification ], ]; diff --git a/src/Helper/Helper_Pdf_Queue.php b/src/Helper/Helper_Pdf_Queue.php index b7bb8227a..356fca709 100644 --- a/src/Helper/Helper_Pdf_Queue.php +++ b/src/Helper/Helper_Pdf_Queue.php @@ -18,14 +18,6 @@ exit; } -if ( ! class_exists( 'WP_Async_Request' ) ) { - require_once GFCommon::get_base_path() . '/includes/libraries/wp-async-request.php'; -} - -if ( ! class_exists( 'GF_Background_Process' ) ) { - require_once GFCommon::get_base_path() . '/includes/libraries/gf-background-process.php'; -} - /** * Class Helper_Pdf_Queue * @@ -59,7 +51,8 @@ class Helper_Pdf_Queue extends GF_Background_Process { public function __construct( LoggerInterface $log ) { parent::__construct(); - $this->log = $log; + $this->log = $log; + $this->allowed_batch_data_classes = false; } /** @@ -88,6 +81,9 @@ public function task( $callbacks ) { /* Something went wrong so cancel queue */ if ( ! isset( $callback['id'], $callback['func'] ) ) { $this->log->critical( 'PDF queue ran with invalid queue item', [ 'callbacks' => $callbacks ] ); + + $this->cancel_process(); + return false; } @@ -107,6 +103,9 @@ public function task( $callbacks ) { 'callbacks' => $callbacks, ] ); + + $this->cancel_process(); + return false; } @@ -148,6 +147,8 @@ public function task( $callbacks ) { ] ); + $this->cancel_process(); + $callbacks = []; } } diff --git a/src/bootstrap.php b/src/bootstrap.php index 434fed89a..1ee564427 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -207,6 +207,17 @@ public function init() { $this->templates ); + /* Load Background Queue classes */ + if ( version_compare( \GFCommon::$version, '2.9.7.2', '>=' ) ) { + if ( ! class_exists( '\Gravity_Forms\Gravity_Forms\Async\GF_Background_Process' ) ) { + require_once GFCommon::get_base_path() . '/includes/async/class-gf-background-process.php'; + } + + class_alias( \Gravity_Forms\Gravity_Forms\Async\GF_Background_Process::class, 'GF_Background_Process', false ); + } elseif ( ! class_exists( 'WP_Async_Request' ) ) { + require_once GFCommon::get_base_path() . '/includes/libraries/wp-async-request.php'; + } + /* Setup our Singleton object */ $this->singleton = new Helper_Singleton(); diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php index b24e4112b..3efd09119 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php @@ -289,17 +289,15 @@ public function test_queue_async_form_submission_tasks() { $queue = $this->queue_mock->get_data(); - $this->assertCount( 3, $queue[0] ); - $this->assertCount( 3, $queue[1] ); - $this->assertCount( 1, $queue[2] ); - - $actions = [ 'create_pdf', 'create_pdf', 'send_notification' ]; - for ( $i = 0; $i < 3; $i++ ) { - $this->assertStringContainsString( $actions[ $i ], $queue[0][ $i ]['func'] ); - $this->assertStringContainsString( $actions[ $i ], $queue[1][ $i ]['func'] ); - } - - $this->assertStringContainsString( 'cleanup_pdfs', $queue[2][0]['func'] ); + $this->assertCount( 7, $queue ); + + $this->assertStringContainsString( 'create_pdf', $queue[0][0]['func'] ); + $this->assertStringContainsString( 'create_pdf', $queue[1][0]['func'] ); + $this->assertStringContainsString( 'send_notification', $queue[2][0]['func'] ); + $this->assertStringContainsString( 'create_pdf', $queue[3][0]['func'] ); + $this->assertStringContainsString( 'create_pdf', $queue[4][0]['func'] ); + $this->assertStringContainsString( 'send_notification', $queue[5][0]['func'] ); + $this->assertStringContainsString( 'cleanup_pdfs', $queue[6][0]['func'] ); } /** @@ -321,15 +319,10 @@ public function test_queue_async_resend_notification_tasks() { $queue = $this->queue_mock->get_data(); - $this->assertCount( 3, $queue[0] ); - $this->assertCount( 1, $queue[1] ); - - $actions = [ 'create_pdf', 'create_pdf', 'send_notification' ]; - for ( $i = 0; $i < 3; $i++ ) { - $this->assertStringContainsString( $actions[ $i ], $queue[0][ $i ]['func'] ); - } - - $this->assertStringContainsString( 'cleanup_pdfs', $queue[1][0]['func'] ); + $this->assertStringContainsString( 'create_pdf', $queue[0][0]['func'] ); + $this->assertStringContainsString( 'create_pdf', $queue[1][0]['func'] ); + $this->assertStringContainsString( 'send_notification', $queue[2][0]['func'] ); + $this->assertStringContainsString( 'cleanup_pdfs', $queue[3][0]['func'] ); } /** From 8a7914ddfb4536de8ae0d76babce5e634b7addbd Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 19 May 2025 11:55:12 +1000 Subject: [PATCH 008/110] Update PDF Background Processing to be compatible with updated background processing library Rather than dispatch a bunch of individual queues, traditionally, Gravity PDF has treated a queue as a bunch of mini queues. In a new GF update, retry support has been added if a queue returns anything besides `false`, which caused big delays processing the mini queues in Gravity PDF. Rewriting Gravity PDF to convert the mini queues into individual queues would be a breaking change and a lot of development time. Instead, we'll merge all the mini queues together to be processed sequentially. Along with this adjustment, the retry logic has been reduced from 3 to 1. This allows for faster processing of a queue when an error does occur, since there will only be one extra timeout period instead of three. The unrecoverable error has also been removed, as this would prevent any other PDFs from generating or Notification emails being sent. The benefit to this is the Notification emails will still be sent out, even if a PDF isn't attached. The deprecation notice from GF 2.9.7 was addressed in 062f3e4c3f7e5eb8d5255a6df55c9c307531288d (cherry picked from commit 8a4bc03fe1ce776746679141532817bf24d58aa9) --- src/Controller/Controller_Pdf_Queue.php | 18 +++++-------- src/Helper/Helper_Pdf_Queue.php | 35 +++++++++---------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/src/Controller/Controller_Pdf_Queue.php b/src/Controller/Controller_Pdf_Queue.php index 0d314e9ba..6392ea669 100644 --- a/src/Controller/Controller_Pdf_Queue.php +++ b/src/Controller/Controller_Pdf_Queue.php @@ -244,14 +244,9 @@ public function queue_async_tasks( $form, $entry ) { foreach ( $this->form_async_notifications as $notification ) { $tasks = $this->get_queue_tasks( $entry, $form, [ $notification ] ); - /* if older version of Gravity Forms group tasks together */ - if ( version_compare( \GFCommon::$version, '2.9.7', '<' ) ) { - $this->queue->push_to_queue( $tasks ); - } else { - /* if newer version of Gravity Forms, push each task individually */ - foreach ( $tasks as $task ) { - $this->queue->push_to_queue( [ $task ] ); - } + /* Push each task individually for forwards compatibility with new Background Processing update */ + foreach ( $tasks as $task ) { + $this->queue->push_to_queue( [ $task ] ); } } } @@ -350,10 +345,9 @@ protected function queue_pdfs( $notifications, $pdfs, $form, $entry ) { foreach ( $pdfs as $pdf ) { $pdf_queue_data = [ - 'id' => 'create-pdf-' . $this->get_queue_id( $form, $entry, $pdf ), - 'func' => '\GFPDF\Statics\Queue_Callbacks::create_pdf', - 'args' => [ $entry['id'], $pdf['id'] ], - 'unrecoverable' => true, + 'id' => 'create-pdf-' . $this->get_queue_id( $form, $entry, $pdf ), + 'func' => '\GFPDF\Statics\Queue_Callbacks::create_pdf', + 'args' => [ $entry['id'], $pdf['id'] ], ]; /* Check if we need to save the PDF due to a filter */ diff --git a/src/Helper/Helper_Pdf_Queue.php b/src/Helper/Helper_Pdf_Queue.php index 356fca709..e195089dd 100644 --- a/src/Helper/Helper_Pdf_Queue.php +++ b/src/Helper/Helper_Pdf_Queue.php @@ -41,6 +41,15 @@ class Helper_Pdf_Queue extends GF_Background_Process { */ protected $action = 'gravitypdf'; + /** + * Restrict object instantiation when using unserialize. + * + * @since 2.9.7 + * + * @var bool|array + */ + protected $allowed_batch_data_classes = false; + /** * Helper_Pdf_Queue constructor. * @@ -51,8 +60,7 @@ class Helper_Pdf_Queue extends GF_Background_Process { public function __construct( LoggerInterface $log ) { parent::__construct(); - $this->log = $log; - $this->allowed_batch_data_classes = false; + $this->log = $log; } /** @@ -82,8 +90,6 @@ public function task( $callbacks ) { if ( ! isset( $callback['id'], $callback['func'] ) ) { $this->log->critical( 'PDF queue ran with invalid queue item', [ 'callbacks' => $callbacks ] ); - $this->cancel_process(); - return false; } @@ -104,8 +110,6 @@ public function task( $callbacks ) { ] ); - $this->cancel_process(); - return false; } @@ -127,9 +131,9 @@ public function task( $callbacks ) { ] ); - /* Add back to our queue to retry (up to a grand total of three times) */ - if ( empty( $callback['retry'] ) || $callback['retry'] < 2 ) { - $callback['retry'] = isset( $callback['retry'] ) ? $callback['retry'] + 1 : 1; + /* Add back to our queue to retry once */ + if ( empty( $callback['retry'] ) ) { + $callback['retry'] = 1; array_unshift( $callbacks, $callback ); } else { $this->log->error( @@ -138,19 +142,6 @@ public function task( $callbacks ) { $callback['id'] ) ); - - if ( $callback['unrecoverable'] ?? false ) { - $this->log->critical( - 'Cancel async queue due to retry limit reached on unrecoverable callback.', - [ - 'callbacks' => $callbacks, - ] - ); - - $this->cancel_process(); - - $callbacks = []; - } } } From f90eb55e210d14e1338fe9d1ef96c5f8e2ba5b81 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 19 May 2025 12:14:39 +1000 Subject: [PATCH 009/110] Update PHP unit test and only alias GF_Background_Process class if it doesn't already exist (cherry picked from commit 1fdde0a13e4132468a3615a63ec57aa52c206730) --- src/bootstrap.php | 4 +++- .../unit-tests/Controller/Test_Controller_Pdf_Queue.php | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/bootstrap.php b/src/bootstrap.php index 1ee564427..baaeee7ca 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -213,7 +213,9 @@ public function init() { require_once GFCommon::get_base_path() . '/includes/async/class-gf-background-process.php'; } - class_alias( \Gravity_Forms\Gravity_Forms\Async\GF_Background_Process::class, 'GF_Background_Process', false ); + if ( ! class_exists( 'GF_Background_Process' ) ) { + class_alias( \Gravity_Forms\Gravity_Forms\Async\GF_Background_Process::class, 'GF_Background_Process', false ); + } } elseif ( ! class_exists( 'WP_Async_Request' ) ) { require_once GFCommon::get_base_path() . '/includes/libraries/wp-async-request.php'; } diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php index 3efd09119..23268f12e 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php @@ -115,16 +115,16 @@ public function test_queue_tasks() { } /** - * Test our queue attempts to run up to three times when a function throws an exception + * Test our queue attempts to run up to two times when a function throws an exception * * @since 5.0 */ public function test_failed_queue_tasks() { $mock = $this->getMockBuilder( 'stdClass' ) - ->setMethods( [ 'callback' ] ) + ->addMethods( [ 'callback' ] ) ->getMock(); - $mock->expects( $this->exactly( 3 ) ) + $mock->expects( $this->exactly( 2 ) ) ->method( 'callback' ) ->will( $this->throwException( new Exception ) ); From a3961c1e8758cfff1e874ea1b41c866c5b8d08a4 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 20 May 2025 09:49:01 +1000 Subject: [PATCH 010/110] Version bump --- CHANGELOG.txt | 373 ++++++++++++++++++++++++++++++++++++++++++++++++- pdf.php | 4 +- readme.txt | 375 +------------------------------------------------- 3 files changed, 380 insertions(+), 372 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index fa40dafab..6b3b61bca 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,4 +1,375 @@ -This file contains the changelog history for previous major versions of Gravity PDF. See the README.txt file for the current major version changelog. += 6.12.5 = +* 🐞Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ +* 🧹 Housekeeping: Update PDF Background Processing queue to be compatible with Gravity Forms 2.9.7+ background processing library update +* 🧹 Housekeeping: Fix Background Processing deprecation notice when running Gravity Forms 2.9.7+ + += 6.12.4 = +* Security: Escape variables in PHP Exceptions +* Bug: Improve PDF column support when Gravity Forms includes a spacer +* Bug: Fix display of Website field when it isn't filled in and *Show Empty Fields* is enabled +* Housekeeping: Mark as compatible with WP 6.7 +* Housekeeping: Update PHP dependencies + += 6.12.3 = +* Bug: Resolve PHP error when a license has not been activated for a Gravity PDF extension +* Bug: Resolve PHP error when all plugin dependencies are not met +* Housekeeping: Open canonical plugin upgrade link in new window + += 6.12.2 = +* Security: Fix bug that caused the 'Restrict Owner' PDF setting to be ignored when it was enabled +* Housekeeping: Adjust canonical plugin notice +* Housekeeping: Add canonical plugin check on system report +* Housekeeping: Log license check API calls (canonical only) +* Bug: Fix PHP Notices in admin area + += 6.12.1 = +* Housekeeping: Update translations + += 6.12.0 = +* Feature: Add basic support for Gravity Forms 2.9 Image Choice and Multiple Choice fields (Gravity PDF Core Booster v2.2 can show the images) +* Feature: Add support for Digital Signature for Gravity Forms plugin (https://wordpress.org/plugins/digital-signature-for-gravity-forms/) +* Housekeeping: Allow approved HTML to be displayed in the PDF for Product and Option field choices +* Housekeeping: Add `gfpdf_form_data_products` filter to allow entry pricing information to be modified for the PDF +* Bug: Fix column ordering issue in Blank Slate, Focus Gravity, and Rubix when the RTL setting is enabled +* Bug: Allow Password and Privileges PDF setting description to be translated + += 6.11.4 = +* Bug: Allow numbers with decimals when saving number fields in the PDF Settings + += 6.11.3 = +* Bug: Fix truncated merge tags in HTML attribute when included in PDF setting Rich Text fields + += 6.11.2 = +* Bug: Resolve race condition by skipping PDF cleanup at the end of form submission process if PDF Background Processing is enabled +* Bug: Fix issue where some Notifications with PDFs attached were not being handled in a background task when PDF Background Processing is enabled + += 6.11.1 = +* Bug: Only process enabled notifications during form submission when using PDF Background Processing. Notifications are enabled if they are active and have conditional logic that passes. + += 6.11.0 = +* Housekeeping: Limit pages admin notices are displayed on to reduce notice fatigue +* Housekeeping: Add specific check for the PHP extension `Ctype` when the plugin loads +* Housekeeping: Tweak admin notice text to make error messages more clear +* Housekeeping: Remove downgrade notice to unsupported Gravity PDF v5.0 if minimum system requirements are not met for v6.0 +* Housekeeping: Improve log messages when creating and validating a Signed PDF URL +* Housekeeping: Improve input sanitation for textarea, number, and custom paper size fields when saving the PDF Form Settings +* Housekeeping: Improve PDF Background Processing so its compatible with Gravity Forms native async notification feature +* Housekeeping: Correctly cleanup PDFs after a PDF Background Processing queue runs +* Bug: Enforce a 1pt minimum value for the Default Font Size and Font Size settings +* Bug: Self-heal the PDF signing secret key if it becomes invalid +* Bug: Self-heal the Global PDF Settings if it becomes invalid +* Bug: Prevent the page reloading when selecting a tooltip on PDF settings pages +* Bug: Register language files early so startup errors can be translated + += 6.10.2 = +* Bug: Hydrate Nested Forms with Gravity Wiz Populate Anything data + += 6.10.1 = +* Bug: Resolve PHP error when processing shortcode with invalid entry object +* Bug: Adhere to conditional logic and exclude CSS class for Page Break fields +* Bug: In more situations the Gravity PDF settings will be refreshed before the form meta is saved to the database +* Housekeeping: Run temporary directory cleanup routine twice daily and delete files older than 12 hours +* Housekeeping: Add gfpdf_system_status_report_items filter for Gravity PDF System Status report details +* Housekeeping: Update mPDF to latest version +* Housekeeping: Allow supported HTML in field labels when displayed in PDF + += 6.10.0 = +* Feature: Add native support for the Legal Signature and Legal Consent form fields added by the Legal Signing for Gravity Forms plugin + += 6.9.1 = +* Security: Disable the Signed URL feature in the [gravitypdf] shortcode when a URL parameter provides the entry ID (e.g. Page Confirmations) +* Bug: Gracefully handle invalid conditional logic rules when adding date entry meta support +* Bug: Display field for entry metadata PDF conditional rule when there are no form fields compatible with conditional logic +* Bug: Ensure the template cache is correctly cleared when PDF Debug Mode is enabled +* Bug: Flush the template cache after installing new templates via the PDF Template Manager +* Bug: Clear template cache when plugin deactivated +* Housekeeping: Small improvement to performance when reading template and font files from disk + += 6.9.0 = +* Feature: Add new conditional logic options to PDFs eg. Payment Status, Date Created, Starred (props: Gravity Wiz) +* Feature: Add support for Show HTML Fields, Show Empty Fields, Show Section Break Description, and Enable Conditional Logic PDF settings when displaying Gravity Wiz Nested Forms field +* Bug: Fix Form Editor saving problem for Gravity Forms v2.6.* +* Bug: Fix Drag and Drop Column layout issue when the GF Styles Pro plugin is enabled +* Bug: Fix issue sending PDF URLs with Gravity Wiz Google Sheets +* Bug: Improve display of Rich Text Textarea fields by removing top margin on individual paragraphs +* Bug: Resolve compatibility issue that corrupted PDFs when using Weglot +* Housekeeping: Exclude popular WordPress staging environments from site count when activating Gravity PDF licenses +* Housekeeping: Improve Gravity PDF license activation success and error messages +* Security: Improve security of network requests to Gravity PDF licensing server +* Developer: Add `set_pdf_config( $config )` and `get_pdf_config()` methods to PDF Field classes +* Developer: In the PDF field blacklist, check using the original type and not with `$field->get_input_type()` + += 6.8.0 = +* Feature: Add PDF Download metabox to Gravity Flow Inbox for logged-in users with appropriate capability +* Feature: Add AI-generated translations for French, Spanish, Italian, German, Dutch, Russian, and Chinese +* Security: Only show PDF view/download links on entry list and details page if logged-in user has appropriate capability +* Housekeeping: Improve performance on admin pages by caching the list of available templates +* Housekeeping: When permalinks are enabled, generate the PDF URL with/without a trailing slash +* Bug: Remove whitespace from textarea fields in the PDF settings + += 6.7.4 = +* Bug: Resolve PHP error for specific GravityView / GravityChart combo +* Bug: Render supported HTML in labels/choices for the PDF Pricing table +* Bug: Fix PHP error while viewing a PDF when running an older version of WordPress (< 5.9) and PHP (< 8.0) + += 6.7.3 = +* Bug: Fix 3rd party conflict when different version of PSR-7 library is loaded + += 6.7.2 = +* Bug: Resolve fatal error when using Gravity Forms Google Analytics Pagination feature with the PDF URL included in the parameters. +* Housekeeping: Update PDF library to latest version +* Housekeeping: Update help search API details + += 6.7.1 = +* Bug: Improve dependency conflicts with third party plugins who bundle PSR Log v2 or v3 +* Housekeeping: Use 4xx HTTP Status Codes for non-server related errors when generating PDFs + += 6.7.0 = +* Feature: Add support for multiple PDFs with the same Filename on a single form +* Feature: Use secure links for File Upload and Post Image fields in Core and Universal PDFs +* Dev Feature: Include secure links in $form_data array for File Upload and Post Image fields +* Bug: Fix backwards compatibility error when running a version of Gravity Forms less that 2.6 +* Bug: Allow sanitized HTML in the labels of Radio and Checkbox admin settings +* Bug: Remain editing current PDF if a hard refresh occurs after adding a new PDF to the form + += 6.6.1 = +* Bug: Prevent PDF settings being override if multiple browser windows are open, and both are updating different settings of the same form concurrently +* Bug: Gracefully handle license key deactivation if an error occurs +* Housekeeping: Bump WordPress Tested Up To v6.3 + += 6.6.0 = +* Feature: Improve display of ungrouped product fields in Core and Universal templates +* Dev Feature: Add `gfpdf_hide_consent_field_if_empty` filter, to remove the Consent field from Core and Universal templates if a user hasn't consented. +* Bug: Remove Section Break description container is there is not a description included +* Bug: Fix potential PHP error when using GravityView and PDF for GravityView +* Housekeeping: Update PHP and JS dependencies + += 6.5.5 = +* Bug: Ensure PDF conditional logic is run through the correct sanitization function upon save +* Bug: Ensure Gravity Wiz Populate Anything live merge tags are correctly processed in the $form_data array +* Bug: Fix Monolog error when running PHP8.1 + += 6.5.4 = +* Bug: Fix duplicate notifications when using PDF Background Processing while looping over GFAPI::submit_form() + += 6.5.3 = +* Bug: Fix HTTP(S) image/stylesheet loading problem in PDFs for SiteGround customers + += 6.5.2 = +* Bug: Fix PHP error when a non-string is passed to the Kses sanitizing class +* Bug: Resolve memory problem generating Core PDFs if an HTML element contains more than 10+ classes (field CSS Classes are now truncated to 8 user-defined classes) +* Bug: Fix Slim Image Cropper display problems in Core PDFs +* Housekeeping: Update mPDF to the latest version +* Housekeeping: Update QueryPath to the latest version + += 6.5.1 = +* Housekeeping: Update mPDF to the latest version +* Bug: Resolve custom font installation issue for some .ttf files + += 6.5.0 = +* Housekeeping: Update Global Extension Settings UI to be Gravity Forms 2.5 compatible +* Housekeeping: Adjust how admin Notices are handled on Gravity PDF pages +* Housekeeping: Update JavaScript package bundle +* Dev: Validate template filename when uploading via the PDF Template Manager (A-Za-z0-9_-) +* Dev: Add filterable CSS class names to the PDF links in the admin area +* Dev: Pass context to the `gfpdf_core_template` hook +* Dev: Add `gfpdf_core_template_{form_id}` hook to target specific forms +* Bug: Fix undefined `rtl` notice in Core PDF templates +* Bug: Fix PHP8.1 notice when saving PDF settings + += 6.4.7 = +* Bug: Resolve blank PDF problem when a large HTML block is processed by mPDF +* Bug: Resolve QueryPath deprecation notice about passing null to trim() +* Housekeeping: Update mPDF and URL Signer library to latest version + += 6.4.6 = +* Bug: Adjust Nested Forms and Repeater field PDF markup to ensure a unique ID attribute for any HTML tags +* Bug: Prevent duplicate grid css classes being added to Nested Forms HTML tags +* Bug: Process merge tags in Background Image PDF setting before late escaping in the PDF HTML markup +* Housekeeping: Remove initialized message from Gravity PDF logs + += 6.4.5 = +* Bug: Fix image display problem if filename had a space in it +* Bug: Fix Background Image display problem on Windows OS +* Developer: Added HTML field content to Repeater Field $form_data array + += 6.4.4 = +* Bug: Resolve HTML encoding issue in PDF when displaying Coupon field in Gravity Wiz eCommerce Perk's Product Table +* Bug: Remove coupon line item in PDF when Gravity Wiz eCommerce Perk's Product Table in use +* Bug: Resolve duplicate product table displayed in a legacy v3 template +* Bug: Resolve PHP notice when displaying product table in legacy v3 template +* Bug: Resolve PHP notice when displaying Section Break field in legacy v3 template + += 6.4.3 = +* Bug: Open PDF "view" link in a new browser tab on Entry List page +* Bug: Only hide Select field in Core/Universal templates if the saved value is an empty string, not a falsey value +* Bug: Prevent PHP notice when displaying Repeater field in PDFs with a Number sub-field +* Bug: Prevent HTML attribute content from having their entities decoded if they were previously encoded +* Bug: Fix Core/Universal template image display issues on servers running Windows + += 6.4.2 = +* Bug: Allow `data` protocol so Base 64-encoded images can be correctly displayed in Core/Universal templates +* Bug: Fix Core Font Installer problem when running older versions of WordPress (5.3 to 5.8) +* Bug: Fix fatal return type mismatch error if `safe_style_css` filter has been implemented incorrectly + += 6.4.1 = +* Bug: Fix PDF display issues with the Survey, Poll, Post Category, and Post Custom Fields + += 6.4.0 = +* Security (Hardening): Move from early escaping to late escaping variables on output +* Security (Hardening): Add additional validation checks to the Core Font installer +* Security (Hardening): Escape text returned from WordPress l10n functions +* Security (Hardening): Escape any and all strings from the Gravity Forms form object, in any context (including PDFs) +* Security (Hardening): Move to earlier sanitizing of user input +* Security (Hardening): Custom PDF template filenames are now limited to the following characters: `A-Za-z0-9_-` +* Security (Hardening): The `?html=1` and `?data=1` developer helper parameters now only work in non-production environments (`WP_ENVIRONMENT_TYPE !== 'production'`), or when Gravity PDF Debug Mode is explicitly enabled +* Security (Hardening): Prevent directory traversal when loading the various Gravity PDF UI components +* Security (Hardening): Change PDF Form Settings capability check from `gravityforms_edit_settings` to `gravityforms_edit_forms` +* Security (Hardening): Change Font Manager CRUD capability check from `gravityforms_view_entries` to `gravityforms_edit_forms` +* Security (Hardening): Switch to `sodium_crypto_secretbox_keygen()` function with modified fallback to `wp_generate_password()` when generating new PDF URL signing secret key +* Security (Hardening): Switch from a Text to Password field for the Gravity PDF License Keys +* Security (Hardening): Update PHP and JavaScript dependencies +* Developer: Added `\GFPDF\Statics\Kses::output($html)` and `\GFPDF\Statics\Kses::parse($html)` methods for use with escaping/sanitizing HTML in PDFs (as an alternative to wp_kses_post()). +* Performance: Register JavaScript in the footer on Gravity PDF admin pages +* Privacy: Added "Get more info" link in the Core Font Installer instructions, and disclaimer to plugin's README.txt installation section +* Bug: Fix issue passing PDF URL to Gravity Forms Mailchimp add-on +* Bug: Allow hyphen in custom font key when updating or deleting to remain backwards compatible +* Bug: Fix PHP8.1 type conversion warning in the template cache when transient's are flushed +* Bug: Remove empty repeater sections from Core PDFs when not filled in by the user + += 6.3.1 = +* Security: Prevent potential XSS attack by escaping URL returned from add_query_args() on the PDF List or PDF Form Settings pages +* Developer: Apply `gfpdf_current_form_object` filter added in 6.3.0 to the form object in Helper_Abstract_Fields.php using the $type `helper_abstract_fields`. +* Bug: Correctly display the file path in the logs when cleaning up PDFs from disk or flushing the mPDF cache +* Performance: reduce I/O operations when flushing the mPDF cache by excluding the top-level directory + += 6.3.0 = +* Feature: Support for mapping PDF URLs to your favorite services using Gravity Forms feeds. This includes (but is not limited to): PayPal, MailChimp, HubSpot, Stripe, Square, ActiveCampaign, Agile CRM, Capsule, CleverReach, Constant Contact, EmailOctopus, Zoho CRM +* Feature: Support for the Zapier add-on: PDF URLs can now be passed to your zaps +* Feature: Add [gravitypdf] shortcode rendering support to Gravity Wiz's Entry Block perk +* Housekeeping: Change "document" icon used for settings menus to the "Gravity PDF" icon +* Housekeeping: duplicating PDFs on a form will now have the correct alternating background color in the table +* Housekeeping: Process the [gravitypdf] shortcode when merge tags get processed so that it can be used where ever merge tags are supported +* Developer: Add new `gfpdf_current_form_object` filter to manipulate the $form array when processing PDFs +* Bug: Fix a race condition when using Background Processing that could see the PDF deleted before being attached to notifications +* Bug: Do not strip the backslash character when used in PDF settings + += 6.2.1 = +* Bug: Always generate a new PDF when using the GPDFAPI::create_pdf() method +* Bug: Fix fatal error during PDF generation when using the `gform_address_display_format` filter + += 6.2.0 = +* Feature: Add support for Gravity Forms 2.6 (see Housekeeping below) +* Housekeeping: Add alternate background color on PDF List page +* Housekeeping: Add styles/support for new merge tag selector +* Housekeeping: Add styles for Copy to Clipboard shortcode button on PDF List page +* Housekeeping: Update help search API to query v6 documentation +* Bug: Fix error message display issue on Form PDF add/edit page +* Bug: Fix missing styles on multi-PDF view/download menu on Entry List page + += 6.1.1 = +* Bug: Allow number field to show a thousand separator by using the 'gform_include_thousands_sep_pre_format_number' filter. +* Bug: Fix PHP Notice when displaying Repeater field caused by processing field's not present in `$form_data['field']` array key +* Housekeeping: Add logging to file/directory cleanup method +* Housekeeping: Add additional checks and logging when processing background tasks + += 6.1.0 = +* Feature: Add Copy to Clipboard feature for PDF Shortcode on the PDF List page +* Bug: Fix empty check on the Radio field so a zero (0) value is not considered empty + += 6.0.3 = +* Bug: Reduce the Focus Gravity template column widths by a fraction to prevent edge-case display issues (props Hiwire Creative) +* Bug: Fix Help page results text encoding problems +* Bug: Prevent multiple font files being uploaded to a single dropzone +* Bug: When checking if a Radio/Select field is empty in the PDF context, only look at the value property. + += 6.0.2 = +* Bug: Fix up 404 link for Outdated Templates in System Status +* Bug: Revert vendor aliasing for mPDF and querypath (back to the original namespace) as it caused more problems than is solved. Developers: see https://docs.gravitypdf.com/v6/users/v5-to-v6-migration#changed-namespace-for-composer-packages + += 6.0.1 = +* Bug: When displaying the minimum Gravity Forms version not met error, remove `beta-1` as the minimum to prevent confusion. + += 6.0.0 = +This major release is designed specifically for Gravity Forms 2.5+ and includes breaking pages that may affect you. You are strongly encouraged to [review the upgrade guide before attempting to update to v6](https://docs.gravitypdf.com/v6/users/v5-to-v6-migration). + += BREAKING CHANGES = +* New minimum requirements PHP7.3+, WordPress 5.3+, Gravity Forms 2.5+ +* Removed Gravity PDF v3 template stylesheet (swap legacy PDF template to Focus Gravity template) +* Removed Gravity PDF v3 to v4 migration code (upgrade to v4/v5 before attempting v6 upgrade) +* (Dev) Moved all vendor (Packagist) packages to new `GFPDF_Vendor/` namespace (BC aliasing for common classes included). Prevents all vendor conflicts with other plugins. +* (Dev) Removed "Setup Custom Templates" tool (manually copy over template files to PDF Working Directory) +* (Dev) Removed `shortname` property from `custom_fonts` global PDF options, and removed the requirement for the `font_name` to be unique (use `id` instead of `shortname`). +* (Dev) Changed the first parameter $font_name in `GPDFAPI::delete_pdf_font()` to $font_id instead. You can no longer delete the font by + its name, as it is no longer a unique identifier. +* (Dev) Majority of admin user interface markup (UI) changed to suit new GF2.5 UI () +* (Dev) Renamed `\GFPDF\Helper\Fields\Field_CreditCard` class to `Field_Creditcard` +* (Dev) Change `\GFPDF\Model\Model_Install` __construct signature by removing `Helper_Abstract_Forms` dependancy from the start and adding `Model_Uninstall` at the end +* (Dev) Change `\GFPDF\Model\Model_System_Report` __construct signature by adding new `Helper_Templates` dependancy at the end +* (Dev) Removed `\GFPDF\View\View_Settings::system_status` method. Replaced by `Controller_|Model_|View_System_Report` classes for direct integration with Gravity Forms System Status page +* (Dev) Removed undocumented `gfpdf_entry_detail_pre_container_markup` and `gfpdf_entry_detail_post_container_markup` actions +* (Dev) Adjusted ID from `#tab_pdf` to `#tab_PDF` for container on Global PDF settings page. This ensures both the Global and Form PDF settings use a consistent ID. +* (Dev) Change `\GFPDF\Model\Model_Install` __construct signature by removing `Helper_Abstract_Forms` dependancy from the start and adding `Model_Uninstall` at the end +* (Dev) Change `\GFPDF\Model\Model_System_Report` __construct signature by adding new `Helper_Templates` dependancy at the end +* (Dev) Removed `\GFPDF\View\View_Settings::system_status` method. Replaced by `Controller_|Model_|View_System_Report` classes for direct integration with Gravity Forms System Status page +* (Dev) Removed undocumented `gfpdf_entry_detail_pre_container_markup` and `gfpdf_entry_detail_post_container_markup` actions +* (Dev) Adjusted ID from `#tab_pdf` to `#tab_PDF` for container on Global PDF settings page. This ensures both the Global and Form PDF settings use a consistent ID. +* (Dev) Deprecate Helper_Abstract_Options::get_font_short_name(). No direct replacement as the font 'shortname' has been phased out (using unique ID now). +* (Dev) Updated field description markup to use DIVs instead of SPANs. Matches Gravity Forms RC1 +* (Dev) Deprecate these methods from `\GFPDF\Model\Model_Install`: `uninstall_plugin`, `remove_plugin_options`, `remove_plugin_form_settings`, `remove_folder_structure`, `deactivate_plugin`. All moved to `Model_Uninstall`. + += NEW FEATURES = +* Brand new admin user interface (UI) to seamlessly match the Gravity Forms (GF) 2.5 UI. +* Added support for new GF columns feature in Core PDFs +* Add PDF column support for Gravity Perks Nested Forms +* Added RTL support for new GF columns feature in Core PDFs +* Refreshed Font Manager with better validation, error handling, and automatic support for fonts that include Open Type Layout features. +* Added new PDF metabox on Entry Details page. Includes a better user experience for forms with a lot of PDFs configured. +* Added new merge tag modifiers :download, :print, :signed, :signed:expiry to enhance existing PDF mergetag (modifiers can all be used in conjunction) +* Add PDF URL to Webhook add-on "All Fields" request body +* Add ability to include PDF URLs in Entry exports +* Add Gravity PDF info to Gravity Forms System Status page +* Show plugin downgrade prompt when minimum WordPress, Gravity Forms, or PHP requirements aren't met so users can easily roll back to the latest supported v5.x version. +* Add support for WordPress' native Background Updates +* Add accessibility improvements for keyboard users and screen readers on all Gravity PDF UIs +* Display warning on System Status page when Core template overrides are out of date +* Include Add/Update PDF button below each section on PDF creation page to make it easy to save +* Improve RTL support on admin pages + += UX IMPROVEMENTS = +* Remove the Always Save PDF setting from the UI. +* Switch all Radio PDF settings to new Toggle setting +* Switch all Multiselect PDF settings to Checkbox field (better accessibility) +* Rename PDF setting "Name" to "Label" +* Replace asterisk `*` to text `(required)` to signify required fields (better accessibility) +* Rename PDF setting "Orientation" to "Paper Orientation" +* Refine PDF settings descriptions. +* Removed Welcome Page +* Move Paper Size global settings below the Template / Font settings +* Removed rich Select functionality (using Chosen) in UI for greater accessibility +* Remove WP Dialog prompts in UI for greater accessibility +* Move Gravity PDF uninstaller from Tools tab to Gravity Forms Uninstall settings page + += BUG FIXES = +* Ignore `content-type` header API response when running the Core Font installer +* Make all `GFPDFAPI` API class error responses translatable +* Fix PHP8 notice +* Prevent background queue from continuing if retry limit reached on unrecoverable task (like generating the PDF) +* Adjust custom paper size sanitize logic to fix PHP error +* Check for invalid relative date when using Signed PDF URLs and fallback to default timeout +* Fix border display issue in Core Product table +* Show error message in Template Manager when maximum file size limit is reached + += DEVELOPER IMPROVEMENTS = +* Rewritten all CSS in SASS +* Add `GPDFAPI::get_entry_pdfs( $entry_id )` method to API. Acts like `GPDFAPI::get_form_pdfs( $form_id )` but filters out any PDFs that don't pass conditional logic checks for the current entry. +* Added `Helper_Abstract_Config_Settings` class which template config files can extend to automatically have the current PDF settings injected into the class. +* Adjusted some logged items to use less severe alerts (when template config file doesn't exist, and when native PDF support for a field doesn't exist) +* Upgrade vendor packages to latest versions +* Remove all backbone.js and underscore.js Font Manager code from Gravity PDF admin pages +* Remove gulp as dependency (build is done using only webpack now) +* Add better error log messages for PDF Merge tag processing +* Pass additional information to the `gfpdf_field_container_class` filter = 5.4.0 = * Feature: Prevent update to 6.0 if minimum requirements are not met (including when automatic updates enabled) diff --git a/pdf.php b/pdf.php index 942ea396a..693bde248 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ get_input_type()` - -= 6.8.0 = -* Feature: Add PDF Download metabox to Gravity Flow Inbox for logged-in users with appropriate capability -* Feature: Add AI-generated translations for French, Spanish, Italian, German, Dutch, Russian, and Chinese -* Security: Only show PDF view/download links on entry list and details page if logged-in user has appropriate capability -* Housekeeping: Improve performance on admin pages by caching the list of available templates -* Housekeeping: When permalinks are enabled, generate the PDF URL with/without a trailing slash -* Bug: Remove whitespace from textarea fields in the PDF settings - -= 6.7.4 = -* Bug: Resolve PHP error for specific GravityView / GravityChart combo -* Bug: Render supported HTML in labels/choices for the PDF Pricing table -* Bug: Fix PHP error while viewing a PDF when running an older version of WordPress (< 5.9) and PHP (< 8.0) - -= 6.7.3 = -* Bug: Fix 3rd party conflict when different version of PSR-7 library is loaded - -= 6.7.2 = -* Bug: Resolve fatal error when using Gravity Forms Google Analytics Pagination feature with the PDF URL included in the parameters. -* Housekeeping: Update PDF library to latest version -* Housekeeping: Update help search API details - -= 6.7.1 = -* Bug: Improve dependency conflicts with third party plugins who bundle PSR Log v2 or v3 -* Housekeeping: Use 4xx HTTP Status Codes for non-server related errors when generating PDFs - -= 6.7.0 = -* Feature: Add support for multiple PDFs with the same Filename on a single form -* Feature: Use secure links for File Upload and Post Image fields in Core and Universal PDFs -* Dev Feature: Include secure links in $form_data array for File Upload and Post Image fields -* Bug: Fix backwards compatibility error when running a version of Gravity Forms less that 2.6 -* Bug: Allow sanitized HTML in the labels of Radio and Checkbox admin settings -* Bug: Remain editing current PDF if a hard refresh occurs after adding a new PDF to the form - -= 6.6.1 = -* Bug: Prevent PDF settings being override if multiple browser windows are open, and both are updating different settings of the same form concurrently -* Bug: Gracefully handle license key deactivation if an error occurs -* Housekeeping: Bump WordPress Tested Up To v6.3 - -= 6.6.0 = -* Feature: Improve display of ungrouped product fields in Core and Universal templates -* Dev Feature: Add `gfpdf_hide_consent_field_if_empty` filter, to remove the Consent field from Core and Universal templates if a user hasn't consented. -* Bug: Remove Section Break description container is there is not a description included -* Bug: Fix potential PHP error when using GravityView and PDF for GravityView -* Housekeeping: Update PHP and JS dependencies - -= 6.5.5 = -* Bug: Ensure PDF conditional logic is run through the correct sanitization function upon save -* Bug: Ensure Gravity Wiz Populate Anything live merge tags are correctly processed in the $form_data array -* Bug: Fix Monolog error when running PHP8.1 - -= 6.5.4 = -* Bug: Fix duplicate notifications when using PDF Background Processing while looping over GFAPI::submit_form() - -= 6.5.3 = -* Bug: Fix HTTP(S) image/stylesheet loading problem in PDFs for SiteGround customers - -= 6.5.2 = -* Bug: Fix PHP error when a non-string is passed to the Kses sanitizing class -* Bug: Resolve memory problem generating Core PDFs if an HTML element contains more than 10+ classes (field CSS Classes are now truncated to 8 user-defined classes) -* Bug: Fix Slim Image Cropper display problems in Core PDFs -* Housekeeping: Update mPDF to the latest version -* Housekeeping: Update QueryPath to the latest version - -= 6.5.1 = -* Housekeeping: Update mPDF to the latest version -* Bug: Resolve custom font installation issue for some .ttf files - -= 6.5.0 = -* Housekeeping: Update Global Extension Settings UI to be Gravity Forms 2.5 compatible -* Housekeeping: Adjust how admin Notices are handled on Gravity PDF pages -* Housekeeping: Update JavaScript package bundle -* Dev: Validate template filename when uploading via the PDF Template Manager (A-Za-z0-9_-) -* Dev: Add filterable CSS class names to the PDF links in the admin area -* Dev: Pass context to the `gfpdf_core_template` hook -* Dev: Add `gfpdf_core_template_{form_id}` hook to target specific forms -* Bug: Fix undefined `rtl` notice in Core PDF templates -* Bug: Fix PHP8.1 notice when saving PDF settings - -= 6.4.7 = -* Bug: Resolve blank PDF problem when a large HTML block is processed by mPDF -* Bug: Resolve QueryPath deprecation notice about passing null to trim() -* Housekeeping: Update mPDF and URL Signer library to latest version - -= 6.4.6 = -* Bug: Adjust Nested Forms and Repeater field PDF markup to ensure a unique ID attribute for any HTML tags -* Bug: Prevent duplicate grid css classes being added to Nested Forms HTML tags -* Bug: Process merge tags in Background Image PDF setting before late escaping in the PDF HTML markup -* Housekeeping: Remove initialized message from Gravity PDF logs - -= 6.4.5 = -* Bug: Fix image display problem if filename had a space in it -* Bug: Fix Background Image display problem on Windows OS -* Developer: Added HTML field content to Repeater Field $form_data array - -= 6.4.4 = -* Bug: Resolve HTML encoding issue in PDF when displaying Coupon field in Gravity Wiz eCommerce Perk's Product Table -* Bug: Remove coupon line item in PDF when Gravity Wiz eCommerce Perk's Product Table in use -* Bug: Resolve duplicate product table displayed in a legacy v3 template -* Bug: Resolve PHP notice when displaying product table in legacy v3 template -* Bug: Resolve PHP notice when displaying Section Break field in legacy v3 template - -= 6.4.3 = -* Bug: Open PDF "view" link in a new browser tab on Entry List page -* Bug: Only hide Select field in Core/Universal templates if the saved value is an empty string, not a falsey value -* Bug: Prevent PHP notice when displaying Repeater field in PDFs with a Number sub-field -* Bug: Prevent HTML attribute content from having their entities decoded if they were previously encoded -* Bug: Fix Core/Universal template image display issues on servers running Windows - -= 6.4.2 = -* Bug: Allow `data` protocol so Base 64-encoded images can be correctly displayed in Core/Universal templates -* Bug: Fix Core Font Installer problem when running older versions of WordPress (5.3 to 5.8) -* Bug: Fix fatal return type mismatch error if `safe_style_css` filter has been implemented incorrectly - -= 6.4.1 = -* Bug: Fix PDF display issues with the Survey, Poll, Post Category, and Post Custom Fields - -= 6.4.0 = -* Security (Hardening): Move from early escaping to late escaping variables on output -* Security (Hardening): Add additional validation checks to the Core Font installer -* Security (Hardening): Escape text returned from WordPress l10n functions -* Security (Hardening): Escape any and all strings from the Gravity Forms form object, in any context (including PDFs) -* Security (Hardening): Move to earlier sanitizing of user input -* Security (Hardening): Custom PDF template filenames are now limited to the following characters: `A-Za-z0-9_-` -* Security (Hardening): The `?html=1` and `?data=1` developer helper parameters now only work in non-production environments (`WP_ENVIRONMENT_TYPE !== 'production'`), or when Gravity PDF Debug Mode is explicitly enabled -* Security (Hardening): Prevent directory traversal when loading the various Gravity PDF UI components -* Security (Hardening): Change PDF Form Settings capability check from `gravityforms_edit_settings` to `gravityforms_edit_forms` -* Security (Hardening): Change Font Manager CRUD capability check from `gravityforms_view_entries` to `gravityforms_edit_forms` -* Security (Hardening): Switch to `sodium_crypto_secretbox_keygen()` function with modified fallback to `wp_generate_password()` when generating new PDF URL signing secret key -* Security (Hardening): Switch from a Text to Password field for the Gravity PDF License Keys -* Security (Hardening): Update PHP and JavaScript dependencies -* Developer: Added `\GFPDF\Statics\Kses::output($html)` and `\GFPDF\Statics\Kses::parse($html)` methods for use with escaping/sanitizing HTML in PDFs (as an alternative to wp_kses_post()). -* Performance: Register JavaScript in the footer on Gravity PDF admin pages -* Privacy: Added "Get more info" link in the Core Font Installer instructions, and disclaimer to plugin's README.txt installation section -* Bug: Fix issue passing PDF URL to Gravity Forms Mailchimp add-on -* Bug: Allow hyphen in custom font key when updating or deleting to remain backwards compatible -* Bug: Fix PHP8.1 type conversion warning in the template cache when transient's are flushed -* Bug: Remove empty repeater sections from Core PDFs when not filled in by the user - -= 6.3.1 = -* Security: Prevent potential XSS attack by escaping URL returned from add_query_args() on the PDF List or PDF Form Settings pages -* Developer: Apply `gfpdf_current_form_object` filter added in 6.3.0 to the form object in Helper_Abstract_Fields.php using the $type `helper_abstract_fields`. -* Bug: Correctly display the file path in the logs when cleaning up PDFs from disk or flushing the mPDF cache -* Performance: reduce I/O operations when flushing the mPDF cache by excluding the top-level directory - -= 6.3.0 = -* Feature: Support for mapping PDF URLs to your favorite services using Gravity Forms feeds. This includes (but is not limited to): PayPal, MailChimp, HubSpot, Stripe, Square, ActiveCampaign, Agile CRM, Capsule, CleverReach, Constant Contact, EmailOctopus, Zoho CRM -* Feature: Support for the Zapier add-on: PDF URLs can now be passed to your zaps -* Feature: Add [gravitypdf] shortcode rendering support to Gravity Wiz's Entry Block perk -* Housekeeping: Change "document" icon used for settings menus to the "Gravity PDF" icon -* Housekeeping: duplicating PDFs on a form will now have the correct alternating background color in the table -* Housekeeping: Process the [gravitypdf] shortcode when merge tags get processed so that it can be used where ever merge tags are supported -* Developer: Add new `gfpdf_current_form_object` filter to manipulate the $form array when processing PDFs -* Bug: Fix a race condition when using Background Processing that could see the PDF deleted before being attached to notifications -* Bug: Do not strip the backslash character when used in PDF settings - -= 6.2.1 = -* Bug: Always generate a new PDF when using the GPDFAPI::create_pdf() method -* Bug: Fix fatal error during PDF generation when using the `gform_address_display_format` filter - -= 6.2.0 = -* Feature: Add support for Gravity Forms 2.6 (see Housekeeping below) -* Housekeeping: Add alternate background color on PDF List page -* Housekeeping: Add styles/support for new merge tag selector -* Housekeeping: Add styles for Copy to Clipboard shortcode button on PDF List page -* Housekeeping: Update help search API to query v6 documentation -* Bug: Fix error message display issue on Form PDF add/edit page -* Bug: Fix missing styles on multi-PDF view/download menu on Entry List page - -= 6.1.1 = -* Bug: Allow number field to show a thousand separator by using the 'gform_include_thousands_sep_pre_format_number' filter. -* Bug: Fix PHP Notice when displaying Repeater field caused by processing field's not present in `$form_data['field']` array key -* Housekeeping: Add logging to file/directory cleanup method -* Housekeeping: Add additional checks and logging when processing background tasks - -= 6.1.0 = -* Feature: Add Copy to Clipboard feature for PDF Shortcode on the PDF List page -* Bug: Fix empty check on the Radio field so a zero (0) value is not considered empty - -= 6.0.3 = -* Bug: Reduce the Focus Gravity template column widths by a fraction to prevent edge-case display issues (props Hiwire Creative) -* Bug: Fix Help page results text encoding problems -* Bug: Prevent multiple font files being uploaded to a single dropzone -* Bug: When checking if a Radio/Select field is empty in the PDF context, only look at the value property. - -= 6.0.2 = -* Bug: Fix up 404 link for Outdated Templates in System Status -* Bug: Revert vendor aliasing for mPDF and querypath (back to the original namespace) as it caused more problems than is solved. Developers: see https://docs.gravitypdf.com/v6/users/v5-to-v6-migration#changed-namespace-for-composer-packages - -= 6.0.1 = -* Bug: When displaying the minimum Gravity Forms version not met error, remove `beta-1` as the minimum to prevent confusion. - -= 6.0.0 = -This major release is designed specifically for Gravity Forms 2.5+ and includes breaking pages that may affect you. You are strongly encouraged to [review the upgrade guide before attempting to update to v6](https://docs.gravitypdf.com/v6/users/v5-to-v6-migration). - -= BREAKING CHANGES = -* New minimum requirements PHP7.3+, WordPress 5.3+, Gravity Forms 2.5+ -* Removed Gravity PDF v3 template stylesheet (swap legacy PDF template to Focus Gravity template) -* Removed Gravity PDF v3 to v4 migration code (upgrade to v4/v5 before attempting v6 upgrade) -* (Dev) Moved all vendor (Packagist) packages to new `GFPDF_Vendor/` namespace (BC aliasing for common classes included). Prevents all vendor conflicts with other plugins. -* (Dev) Removed "Setup Custom Templates" tool (manually copy over template files to PDF Working Directory) -* (Dev) Removed `shortname` property from `custom_fonts` global PDF options, and removed the requirement for the `font_name` to be unique (use `id` instead of `shortname`). -* (Dev) Changed the first parameter $font_name in `GPDFAPI::delete_pdf_font()` to $font_id instead. You can no longer delete the font by - its name, as it is no longer a unique identifier. -* (Dev) Majority of admin user interface markup (UI) changed to suit new GF2.5 UI () -* (Dev) Renamed `\GFPDF\Helper\Fields\Field_CreditCard` class to `Field_Creditcard` -* (Dev) Change `\GFPDF\Model\Model_Install` __construct signature by removing `Helper_Abstract_Forms` dependancy from the start and adding `Model_Uninstall` at the end -* (Dev) Change `\GFPDF\Model\Model_System_Report` __construct signature by adding new `Helper_Templates` dependancy at the end -* (Dev) Removed `\GFPDF\View\View_Settings::system_status` method. Replaced by `Controller_|Model_|View_System_Report` classes for direct integration with Gravity Forms System Status page -* (Dev) Removed undocumented `gfpdf_entry_detail_pre_container_markup` and `gfpdf_entry_detail_post_container_markup` actions -* (Dev) Adjusted ID from `#tab_pdf` to `#tab_PDF` for container on Global PDF settings page. This ensures both the Global and Form PDF settings use a consistent ID. -* (Dev) Change `\GFPDF\Model\Model_Install` __construct signature by removing `Helper_Abstract_Forms` dependancy from the start and adding `Model_Uninstall` at the end -* (Dev) Change `\GFPDF\Model\Model_System_Report` __construct signature by adding new `Helper_Templates` dependancy at the end -* (Dev) Removed `\GFPDF\View\View_Settings::system_status` method. Replaced by `Controller_|Model_|View_System_Report` classes for direct integration with Gravity Forms System Status page -* (Dev) Removed undocumented `gfpdf_entry_detail_pre_container_markup` and `gfpdf_entry_detail_post_container_markup` actions -* (Dev) Adjusted ID from `#tab_pdf` to `#tab_PDF` for container on Global PDF settings page. This ensures both the Global and Form PDF settings use a consistent ID. -* (Dev) Deprecate Helper_Abstract_Options::get_font_short_name(). No direct replacement as the font 'shortname' has been phased out (using unique ID now). -* (Dev) Updated field description markup to use DIVs instead of SPANs. Matches Gravity Forms RC1 -* (Dev) Deprecate these methods from `\GFPDF\Model\Model_Install`: `uninstall_plugin`, `remove_plugin_options`, `remove_plugin_form_settings`, `remove_folder_structure`, `deactivate_plugin`. All moved to `Model_Uninstall`. - -= NEW FEATURES = -* Brand new admin user interface (UI) to seamlessly match the Gravity Forms (GF) 2.5 UI. -* Added support for new GF columns feature in Core PDFs -* Add PDF column support for Gravity Perks Nested Forms -* Added RTL support for new GF columns feature in Core PDFs -* Refreshed Font Manager with better validation, error handling, and automatic support for fonts that include Open Type Layout features. -* Added new PDF metabox on Entry Details page. Includes a better user experience for forms with a lot of PDFs configured. -* Added new merge tag modifiers :download, :print, :signed, :signed:expiry to enhance existing PDF mergetag (modifiers can all be used in conjunction) -* Add PDF URL to Webhook add-on "All Fields" request body -* Add ability to include PDF URLs in Entry exports -* Add Gravity PDF info to Gravity Forms System Status page -* Show plugin downgrade prompt when minimum WordPress, Gravity Forms, or PHP requirements aren't met so users can easily roll back to the latest supported v5.x version. -* Add support for WordPress' native Background Updates -* Add accessibility improvements for keyboard users and screen readers on all Gravity PDF UIs -* Display warning on System Status page when Core template overrides are out of date -* Include Add/Update PDF button below each section on PDF creation page to make it easy to save -* Improve RTL support on admin pages - -= UX IMPROVEMENTS = -* Remove the Always Save PDF setting from the UI. -* Switch all Radio PDF settings to new Toggle setting -* Switch all Multiselect PDF settings to Checkbox field (better accessibility) -* Rename PDF setting "Name" to "Label" -* Replace asterisk `*` to text `(required)` to signify required fields (better accessibility) -* Rename PDF setting "Orientation" to "Paper Orientation" -* Refine PDF settings descriptions. -* Removed Welcome Page -* Move Paper Size global settings below the Template / Font settings -* Removed rich Select functionality (using Chosen) in UI for greater accessibility -* Remove WP Dialog prompts in UI for greater accessibility -* Move Gravity PDF uninstaller from Tools tab to Gravity Forms Uninstall settings page - -= BUG FIXES = -* Ignore `content-type` header API response when running the Core Font installer -* Make all `GFPDFAPI` API class error responses translatable -* Fix PHP8 notice -* Prevent background queue from continuing if retry limit reached on unrecoverable task (like generating the PDF) -* Adjust custom paper size sanitize logic to fix PHP error -* Check for invalid relative date when using Signed PDF URLs and fallback to default timeout -* Fix border display issue in Core Product table -* Show error message in Template Manager when maximum file size limit is reached - -= DEVELOPER IMPROVEMENTS = -* Rewritten all CSS in SASS -* Add `GPDFAPI::get_entry_pdfs( $entry_id )` method to API. Acts like `GPDFAPI::get_form_pdfs( $form_id )` but filters out any PDFs that don't pass conditional logic checks for the current entry. -* Added `Helper_Abstract_Config_Settings` class which template config files can extend to automatically have the current PDF settings injected into the class. -* Adjusted some logged items to use less severe alerts (when template config file doesn't exist, and when native PDF support for a field doesn't exist) -* Upgrade vendor packages to latest versions -* Remove all backbone.js and underscore.js Font Manager code from Gravity PDF admin pages -* Remove gulp as dependency (build is done using only webpack now) -* Add better error log messages for PDF Merge tag processing -* Pass additional information to the `gfpdf_field_container_class` filter - -See [CHANGELOG.txt](https://github.com/GravityPDF/gravity-pdf/blob/development/CHANGELOG.txt) for version 5/4/3 changelog history. += 6.12.5 = +* 🐞Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ +* 🧹 Housekeeping: Update PDF Background Processing queue to be compatible with Gravity Forms 2.9.7+ background processing library update +* 🧹 Housekeeping: Fix Background Processing deprecation notice when running Gravity Forms 2.9.7+ + +See CHANGELOG.txt in the plugin zip for the full changelog. From 532773aa0005676707798de4870f94cd8dbaec3e Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 20 May 2025 09:57:32 +1000 Subject: [PATCH 011/110] SVN fix in deployment --- .github/workflows/deployment.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 1afbdceae..f91d5c848 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -9,9 +9,6 @@ jobs: pdf-build: runs-on: ubuntu-latest steps: - - name: Install Subversion - run: sudo apt-get update && sudo apt-get install -y subversion - - name: Checkout uses: actions/checkout@v4 @@ -38,7 +35,6 @@ jobs: yarn --version curl --version git --version - svn --version php --version composer --version @@ -59,6 +55,9 @@ jobs: name: Build and Deploy Plugin runs-on: ubuntu-latest steps: + - name: Install Subversion + run: sudo apt-get update && sudo apt-get install -y subversion + - name: Checkout repository uses: actions/checkout@v4 From 902fec1b16067fa261e40c3743923b9079facfc5 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 21 May 2025 07:49:17 +1000 Subject: [PATCH 012/110] Update readme.txt version number --- CHANGELOG.txt | 5 ++++- pdf.php | 4 ++-- readme.txt | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6b3b61bca..c502fdce3 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,8 @@ += 6.12.5.1 = +* 🧹 Update version number in readme.txt file + = 6.12.5 = -* 🐞Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ +* 🐞 Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ * 🧹 Housekeeping: Update PDF Background Processing queue to be compatible with Gravity Forms 2.9.7+ background processing library update * 🧹 Housekeeping: Fix Background Processing deprecation notice when running Gravity Forms 2.9.7+ diff --git a/pdf.php b/pdf.php index 693bde248..f1079f2f7 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Wed, 21 May 2025 08:25:01 +1000 Subject: [PATCH 013/110] Include changelog group name in the 6.12.5.1 release notes (cherry picked from commit 927bd8eb9945a5e3d96b97b03c09e672d3f520f3) --- CHANGELOG.txt | 2 +- readme.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index c502fdce3..7f54e953e 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,5 @@ = 6.12.5.1 = -* 🧹 Update version number in readme.txt file +* 🧹 Housekeeping: Update version number in readme.txt file = 6.12.5 = * 🐞 Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ diff --git a/readme.txt b/readme.txt index 1411884f5..62d8a7461 100644 --- a/readme.txt +++ b/readme.txt @@ -123,7 +123,7 @@ No. Gravity PDF can only be used with Gravity Forms. It cannot generate PDFs for == Changelog == = 6.12.5.1 = -* 🧹 Update version number in readme.txt file +* 🧹 Housekeeping: Update version number in readme.txt file = 6.12.5 = * 🐞 Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ From ffdc5dedd3462c195f5b45f2cc871b37eb87eef1 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 09:01:14 +1000 Subject: [PATCH 014/110] Extra checks for valid data processing File Upload fields (cherry picked from commit 7e169dfcfd7dbb527e60b395ca90537dd36be83e) --- src/Helper/Fields/Field_Fileupload.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Helper/Fields/Field_Fileupload.php b/src/Helper/Fields/Field_Fileupload.php index a2f5ad5ab..2259ceaea 100644 --- a/src/Helper/Fields/Field_Fileupload.php +++ b/src/Helper/Fields/Field_Fileupload.php @@ -141,10 +141,14 @@ public function value() { $files = []; if ( ! empty( $value ) ) { - $paths = ( $this->field->multipleFiles ) ? json_decode( $value ) : [ $value ]; + $paths = $this->field->multipleFiles ? json_decode( $value, true ) : [ $value ]; if ( is_array( $paths ) && count( $paths ) > 0 ) { foreach ( $paths as $path ) { + if ( ! is_string( $path ) ) { + continue; + } + $files[] = esc_url( $path ); } } From 389ae6cefb11777c35beca3ba6d702adbe568553 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 10:22:16 +1000 Subject: [PATCH 015/110] Add queue cleanup when Background Processing toggled (cherry picked from commit 46b4a3e8fe3fd6e4295d099b8049819d67401fcd) --- src/bootstrap.php | 22 ++++++++++ .../Controller/Test_Controller_Pdf_Queue.php | 40 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/bootstrap.php b/src/bootstrap.php index baaeee7ca..fff8efdbe 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -947,6 +947,28 @@ public function async_pdfs() { $this->singleton->add_class( $queue ); $this->singleton->add_class( $class ); + + /** + * Clear our any items in the queue when the feature is toggled on/off + * + * Needs to be outside the controller class so it works when the feature is toggled on and off. + * + * @param string $new_value The value being saved for the Background Processing setting + * + * @since 6.12.6 + */ + $gfpdf_settings_sanitize = function ( $new_value, $key ) use ( $queue ) { + if ( $key === 'background_processing' ) { + $current_value = \GPDFAPI::get_plugin_option( 'background_processing' ); + if ( $current_value !== $new_value ) { + $queue->clear_queue(); + } + } + + return $new_value; + }; + + add_filter( 'gfpdf_settings_sanitize', $gfpdf_settings_sanitize, 10, 2 ); } /** diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php index 23268f12e..0b786b107 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php @@ -4,6 +4,7 @@ use Exception; use GFPDF\Controller\Controller_Pdf_Queue; +use GFPDF\Helper\Helper_Abstract_Options; use GFPDF\Helper\Helper_Pdf_Queue; use GFPDF\Statics\Queue_Callbacks; use WP_UnitTestCase; @@ -369,4 +370,43 @@ public function test_cleanup_pdfs() { $this->assertFileDoesNotExist( $test_file ); $this->assertFileDoesNotExist( $path ); } + + /** + * Verify any scheduled queues are cleaned up when the queue setting is toggled + * + * @since 6.12.6 + */ + public function test_queue_cleanup() { + global $gfpdf; + + /* setup page */ + $_POST['option_page'] = 'gfpdf_settings'; + $_POST['_wp_http_referer'] = '/'; + + $queue = new Helper_Pdf_Queue( $gfpdf->log ); + + /* Create queue and verify */ + $queue->push_to_queue( 'item1' )->save(); + $queue->push_to_queue( 'item2' )->save(); + + $this->assertCount( 2, $queue->get_batches() ); + + /* Toggle the settings and verify */ + /** @var Helper_Abstract_Options $options */ + $options = $gfpdf->options; + + $options->update_option( 'background_processing', 'Yes' ); + $options->update_settings( [ 'background_processing' => 'No' ] ); + + $this->assertCount( 0, $queue->get_batches() ); + + /* Add new queue items, update the settings without toggling and verify the queue remains */ + $queue->push_to_queue( 'item1' )->save(); + $queue->push_to_queue( 'item2' )->save(); + + $this->assertCount( 2, $queue->get_batches() ); + + $options->update_settings( [ 'background_processing' => 'No' ] ); + $this->assertCount( 2, $queue->get_batches() ); + } } From 14d7684922124ead8344b2b1b07b5fcbfbb30728 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 11:03:26 +1000 Subject: [PATCH 016/110] Reset the list array keys after filtering Fixes display issues and PHP notice due to array key issues. (cherry picked from commit eb56ad38b73e3c76c2647c04545db683d2228120) --- src/Helper/Fields/Field_List.php | 11 ++- .../Helper/Fields/Test_Field_List.php | 69 +++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 tests/phpunit/unit-tests/Helper/Fields/Test_Field_List.php diff --git a/src/Helper/Fields/Field_List.php b/src/Helper/Fields/Field_List.php index 9f05be8b4..360f851ed 100644 --- a/src/Helper/Fields/Field_List.php +++ b/src/Helper/Fields/Field_List.php @@ -102,7 +102,7 @@ public function html( $value = '', $label = true ) { /* get out field value */ $value = $this->value(); - $columns = is_array( $value[0] ); + $columns = is_array( $value[0] ?? '' ); /* Start buffer and generate a list table */ ob_start(); @@ -191,7 +191,7 @@ public function value() { * * @since 4.0 */ - private function remove_empty_list_rows( $list_array ) { + protected function remove_empty_list_rows( $list_array ) { /* if list field empty return early */ if ( ! is_array( $list_array ) || count( $list_array ) === 0 ) { @@ -218,13 +218,20 @@ private function remove_empty_list_rows( $list_array ) { } } + unset( $col ); + /* Remove row from list */ if ( $empty ) { unset( $list_array[ $id ] ); } } + + unset( $row ); } + /* Reset the array structure */ + $list_array = array_values( $list_array ); + return $list_array; } } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_List.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_List.php new file mode 100644 index 000000000..68d870bb7 --- /dev/null +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_List.php @@ -0,0 +1,69 @@ + 1, + ] ); + + $entry = [ + 'form_id' => 0, + '1' => serialize( [ '', 'Row 2', '', 'Row 3' ] ), + ]; + + $pdf_field = new Field_List( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); + + $value = $pdf_field->value(); + $this->assertCount( 2, $value ); + $this->assertEquals( 'Row 2', $value[0] ); + $this->assertEquals( 'Row 3', $value[1] ); + } + + public function test_value_multi_column() { + $field = new GF_Field_List( [ + 'id' => 1, + 'choices' => [ + [ 'text' => 'Column 1' ], + [ 'text' => 'Column 2' ], + ], + ] ); + + $entry = [ + 'form_id' => 0, + '1' => serialize( [ + [ 'Column 1' => '', 'Column 2' => '' ], + [ 'Column 1' => 'Row 2 a', 'Column 2' => 'Row 2 b' ], + [ 'Column 1' => 'Row 3 a', 'Column 2' => 'Row 3 b' ], + [ 'Column 1' => '', 'Column 2' => '' ], + ] ), + ]; + + $pdf_field = new Field_List( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); + + $value = $pdf_field->value(); + + $this->assertCount( 2, $value ); + $this->assertEquals( 'Row 2 a', $value[0]['Column 1'] ); + $this->assertEquals( 'Row 2 b', $value[0]['Column 2'] ); + $this->assertEquals( 'Row 3 a', $value[1]['Column 1'] ); + $this->assertEquals( 'Row 3 b', $value[1]['Column 2'] ); + } +} \ No newline at end of file From 2fb85f7b83000876e59d6924f630c079149dac96 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 11:48:46 +1000 Subject: [PATCH 017/110] Improve System Status Display 1. Move Gravity PDF info to bottom of report for quick viewing in support tickets 2. Don't translate labels in exported report 3. Don't translate outdated template export value 4. Display "unlimited" WordPress Memory in export value if PHP memory set to -1 Fixes #1597 (cherry picked from commit 6606e87898a484d8dfbb3c4e96d44eb4dfe44ae6) --- src/Controller/Controller_System_Report.php | 8 +++- src/Model/Model_System_Report.php | 53 ++++++++++++++------- src/View/View_System_Report.php | 4 +- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/src/Controller/Controller_System_Report.php b/src/Controller/Controller_System_Report.php index 7f1d7a5ab..3bd7a8054 100644 --- a/src/Controller/Controller_System_Report.php +++ b/src/Controller/Controller_System_Report.php @@ -65,12 +65,13 @@ public function add_filters() { } /** - * Include the add-on table in the PHP Server Environment system status. + * Add the Gravity PDF system report to the Gravity Forms report * * @param array $system_report * * @return array * @since 5.3 + * @since 6.12.6 Moved data to the end of the report */ public function system_report( $system_report ) { @@ -78,7 +79,10 @@ public function system_report( $system_report ) { $gravitypdf_report = $this->model->build_gravitypdf_report(); $system_report = $this->model->move_gravitypdf_active_plugins_to_gf_addons( $system_report ); - array_splice( $system_report, 1, 0, $gravitypdf_report ); + $system_report = array_merge( + $system_report, + $gravitypdf_report + ); } return $system_report; diff --git a/src/Model/Model_System_Report.php b/src/Model/Model_System_Report.php index f4a52553b..fdef35446 100644 --- a/src/Model/Model_System_Report.php +++ b/src/Model/Model_System_Report.php @@ -175,6 +175,7 @@ protected function get_report_items(): array { $items[0] = [ 'memory' => [ 'label' => esc_html__( 'WP Memory', 'gravity-pdf' ), + 'label_export' => 'WP Memory', 'value' => $memory['value'], 'value_export' => $memory['value_export'], ], @@ -186,53 +187,62 @@ protected function get_report_items(): array { ], 'default_charset' => [ - 'label' => esc_html__( 'Default Charset', 'gravity-pdf' ), - 'value' => ini_get( 'default_charset' ), + 'label' => esc_html__( 'Default Charset', 'gravity-pdf' ), + 'label_export' => 'Default Charset', + 'value' => ini_get( 'default_charset' ), ], 'internal_encoding' => [ - 'label' => esc_html__( 'Internal Encoding', 'gravity-pdf' ), - 'value' => ini_get( 'internal_encoding' ) ?: ini_get( 'default_charset' ), //phpcs:ignore Universal.Operators.DisallowShortTernary.Found + 'label' => esc_html__( 'Internal Encoding', 'gravity-pdf' ), + 'label_export' => 'Internal Encoding', + 'value' => ini_get( 'internal_encoding' ) ?: ini_get( 'default_charset' ), //phpcs:ignore Universal.Operators.DisallowShortTernary.Found ], ]; /* Directory and Permissions */ $items[1] = [ 'pdf_working_directory' => [ - 'label' => esc_html__( 'PDF Working Directory', 'gravity-pdf' ), - 'value' => $this->templates->get_template_path(), + 'label' => esc_html__( 'PDF Working Directory', 'gravity-pdf' ), + 'label_export' => 'PDF Working Directory', + 'value' => $this->templates->get_template_path(), ], 'pdf_working_directory_url' => [ - 'label' => esc_html__( 'PDF Working Directory URL', 'gravity-pdf' ), - 'value' => $this->templates->get_template_url(), + 'label' => esc_html__( 'PDF Working Directory URL', 'gravity-pdf' ), + 'label_export' => 'PDF Working Directory URL', + 'value' => $this->templates->get_template_url(), ], 'font_folder_location' => [ - 'label' => esc_html__( 'Font Folder location', 'gravity-pdf' ), - 'value' => $this->data->template_font_location, + 'label' => esc_html__( 'Font Folder location', 'gravity-pdf' ), + 'label_export' => 'Font Folder location', + 'value' => $this->data->template_font_location, ], 'temp_folder_location' => [ - 'label' => esc_html__( 'Temporary Folder location', 'gravity-pdf' ), - 'value' => $this->data->template_tmp_location, + 'label' => esc_html__( 'Temporary Folder location', 'gravity-pdf' ), + 'label_export' => 'Temporary Folder location', + 'value' => $this->data->template_tmp_location, ], 'temp_folder_permission' => [ 'label' => esc_html__( 'Temporary Folder permissions', 'gravity-pdf' ), + 'label_export' => 'Temporary Folder permissions', 'value' => $temp_folder_permission['value'], 'value_export' => $temp_folder_permission['value_export'], ], 'temp_folder_protected' => [ 'label' => esc_html__( 'Temporary Folder protected', 'gravity-pdf' ), + 'label_export' => 'Temporary Folder protected', 'value' => $temp_folder_protected['value'], 'value_export' => $temp_folder_protected['value_export'], ], 'mpdf_temp_folder_location' => [ - 'label' => esc_html__( 'mPDF Temporary location', 'gravity-pdf' ), - 'value' => $this->data->mpdf_tmp_location, + 'label' => esc_html__( 'mPDF Temporary location', 'gravity-pdf' ), + 'label_export' => 'mPDF Temporary location', + 'value' => $this->data->mpdf_tmp_location, ], ]; @@ -241,6 +251,7 @@ protected function get_report_items(): array { if ( ! empty( $template_status ) ) { $items[1]['outdated_templates'] = [ 'label' => esc_html__( 'Outdated Templates', 'gravity-pdf' ), + 'label_export' => 'Outdated Templates', 'value' => $template_status['value'], 'value_export' => $template_status['value_export'], ]; @@ -260,24 +271,28 @@ protected function get_report_items(): array { $items[2] = [ 'canonical_release' => [ 'label' => esc_html__( 'Canonical Release', 'gravity-pdf' ), + 'label_export' => 'Canonical Release', 'value' => $is_canonical_release ? $this->getController()->view->get_icon( true ) : $this->getController()->view->get_icon( false ) . $is_not_canonical_release_message, - 'value_export' => $is_canonical_release ? esc_html__( 'Yes', 'gravity-pdf' ) : esc_html__( 'No', 'gravity-pdf' ), + 'value_export' => $is_canonical_release ? 'Yes' : 'No', ], 'pdf_entry_list_action' => [ 'label' => esc_html__( 'PDF Entry List Action', 'gravity-pdf' ), + 'label_export' => 'PDF Entry List Action', 'value' => $this->options->get_option( 'default_action', 'View' ) === 'View' ? esc_html__( 'View', 'gravity-pdf' ) : esc_html__( 'Download', 'gravity-pdf' ), 'value_export' => $this->options->get_option( 'default_action', 'View' ), ], 'background_processing_enabled' => [ 'label' => esc_html__( 'Background Processing', 'gravity-pdf' ), + 'label_export' => 'Background Processing', 'value' => $this->options->get_option( 'background_processing', 'No' ) === 'Yes' ? $this->getController()->view->get_icon( true ) : esc_html__( 'Off', 'gravity-pdf' ), 'value_export' => $this->options->get_option( 'background_processing', 'No' ), ], 'debug_mode_enabled' => [ 'label' => esc_html__( 'Debug Mode', 'gravity-pdf' ), + 'label_export' => 'Debug Mode', 'value' => $this->options->get_option( 'debug_mode', 'No' ) === 'Yes' ? $this->getController()->view->get_icon( true ) : esc_html__( 'Off', 'gravity-pdf' ), 'value_export' => $this->options->get_option( 'debug_mode', 'No' ), ], @@ -286,12 +301,14 @@ protected function get_report_items(): array { /* Security Settings */ $items[3] = [ 'user_restrictions' => [ - 'label' => esc_html__( 'User Restrictions', 'gravity-pdf' ), - 'value' => implode( ', ', $this->options->get_option( 'admin_capabilities', [ 'gravityforms_view_entries' ] ) ), + 'label' => esc_html__( 'User Restrictions', 'gravity-pdf' ), + 'label_export' => 'User Restrictions', + 'value' => implode( ', ', $this->options->get_option( 'admin_capabilities', [ 'gravityforms_view_entries' ] ) ), ], 'logged_out_timeout' => [ 'label' => esc_html__( 'Logged Out Timeout', 'gravity-pdf' ), + 'label_export' => 'Logged Out Timeout', 'value' => $this->options->get_option( 'logged_out_timeout', '20' ) . ' ' . esc_html__( 'minute(s)', 'gravity-pdf' ), 'value_export' => $this->options->get_option( 'logged_out_timeout', '20' ) . ' minutes(s)', ], @@ -310,7 +327,7 @@ protected function get_memory_limit(): array { return [ 'value' => $this->getController()->view->memory_limit_markup( $memory ), - 'value_export' => $memory . 'MB', + 'value_export' => $memory === -1 ? 'Unlimited' : $memory . 'MB', ]; } diff --git a/src/View/View_System_Report.php b/src/View/View_System_Report.php index 86e1b6fd2..b3dec20ec 100644 --- a/src/View/View_System_Report.php +++ b/src/View/View_System_Report.php @@ -126,9 +126,11 @@ public function get_temp_folder_protected( bool $is_protected ): string { public function get_template_check_message( string $path, string $template_version, string $core_version ): array { $message = sprintf( esc_html__( '%1$s version %2$s is out of date. The core version is %3$s', 'gravity-pdf' ), $path, '' . $template_version . '', $core_version ); + $export_message = sprintf( '%1$s version %2$s is out of date. The core version is %3$s', $path, $template_version, $core_version ); + return [ 'value' => $message . $this->get_icon( false ) . '
', - 'value_export' => wp_strip_all_tags( $message ) . " ✘\n", + 'value_export' => $export_message . " ✘\n", ]; } From f63ba626ef70afc0218921bc3188e2063a6b27a3 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 12:33:15 +1000 Subject: [PATCH 018/110] Prevent Fatal Error when file system log location is readonly Manually create the log file before initializing, and exit early if this fails. On a read-only filesystem the log file won't be created, and Monolog will auto-drop all log messages. Resolves #1580 (cherry picked from commit 403d572972abfd73de1fdd4b19a22d1711bfc7a5) --- src/Helper/Helper_Logger.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Helper/Helper_Logger.php b/src/Helper/Helper_Logger.php index d2976e532..adbdf9c5b 100644 --- a/src/Helper/Helper_Logger.php +++ b/src/Helper/Helper_Logger.php @@ -164,6 +164,16 @@ protected function setup_gravityforms_logging() { /* Enable logging if not equivalent to 0 or non-existent and not level 6 ("off" in GF world) */ if ( ! empty( $log_level ) && $log_level !== 6 ) { + /* Check log file can be created */ + $log_path = dirname( $log_filename ); + if ( ! wp_mkdir_p( $log_path ) ) { + return; + } + + if ( ! @touch( $log_filename ) ) { // phpcs:ignore + return; + } + /* Convert Gravity Forms log levels to the appropriate Monolog level */ $monolog_level = ( $log_level === 4 ) ? Logger::ERROR : Logger::DEBUG; From 27fc66ef2449894e0bd0760e4fb8c5c988982a84 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 14:38:06 +1000 Subject: [PATCH 019/110] Fix memory issue with lots of classes on Rich Text Field Strip excess classes from nodes when they contain more than 8 individual classes. Resolves #1536 (cherry picked from commit 8d8b75dbe7a2ca187e22c5f1efe3a7538f069ac4) --- src/Helper/Fields/Field_Textarea.php | 42 ++++++++++++++++++- src/Helper/Helper_Abstract_Fields.php | 2 +- .../Helper/Fields/Test_Field_Textarea.php | 39 +++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 tests/phpunit/unit-tests/Helper/Fields/Test_Field_Textarea.php diff --git a/src/Helper/Fields/Field_Textarea.php b/src/Helper/Fields/Field_Textarea.php index bd3507549..04fd4487d 100644 --- a/src/Helper/Fields/Field_Textarea.php +++ b/src/Helper/Fields/Field_Textarea.php @@ -7,7 +7,10 @@ use GFPDF\Helper\Helper_Abstract_Fields; use GFPDF\Helper\Helper_Abstract_Form; use GFPDF\Helper\Helper_Misc; +use GFPDF\Helper\Helper_QueryPath; use GFPDF\Statics\Kses; +use GFPDF_Vendor\QueryPath\CSS\ParseException; +use GFPDF_Vendor\QueryPath\DOMQuery; /** * @package Gravity PDF @@ -53,9 +56,46 @@ public function __construct( $field, $entry, Helper_Abstract_Form $gform, Helper public function html( $value = '', $label = true ) { $value = $this->value(); + /** + * Allow a maximum of 8 User-Defined CSS Classes to prevent memory issues in mPDF + * @see https://github.com/mpdf/mpdf/issues/1753 + */ + if ( ! empty( $this->field->useRichTextEditor ) ) { + try { + $qp = new Helper_QueryPath(); + $dom = $qp->html5( $value ); + $this->strip_extra_classes_from_dom( $dom ); + $value = (string) $dom->top( 'html' )->innerHTML5(); + } catch ( \Exception $e ) { + // do nothing + } + } + return parent::html( $value ); } + /** + * Recursively check DOM node for class attribute and remove any with 9+ classes + * + * @param DOMQuery $dom + * + * @return void + * @throws ParseException + */ + protected function strip_extra_classes_from_dom( $dom ) { + foreach ( $dom->children() as $child_dom ) { + $this->strip_extra_classes_from_dom( $child_dom ); + } + + $classes = $dom->attr( 'class' ); + $class_array = explode( ' ', $classes ); + if ( count( $class_array ) > 8 ) { + $class_array = array_slice( $class_array, 0, 8 ); + // Set the new class attribute value. + $dom->attr( 'class', implode( ' ', $class_array ) ); + } + } + /** * Get the standard GF value of this field * @@ -70,7 +110,7 @@ public function value() { $value = $this->get_value(); - if ( isset( $this->field->useRichTextEditor ) && true === $this->field->useRichTextEditor ) { + if ( ! empty( $this->field->useRichTextEditor ) ) { $html = Kses::parse( wpautop( $this->gform->process_tags( $value, $this->form, $this->entry ) diff --git a/src/Helper/Helper_Abstract_Fields.php b/src/Helper/Helper_Abstract_Fields.php index 093fb1146..bf762b5d2 100644 --- a/src/Helper/Helper_Abstract_Fields.php +++ b/src/Helper/Helper_Abstract_Fields.php @@ -341,7 +341,7 @@ public function html( $value = '', $show_label = true ) { } /* Backwards compat */ - $value = apply_filters( 'gfpdf_field_content', $value, $this->field, GFFormsModel::get_lead_field_value( $this->entry, $this->field ), $this->entry['id'], $this->form['id'] ); + $value = apply_filters( 'gfpdf_field_content', $value, $this->field, GFFormsModel::get_lead_field_value( $this->entry, $this->field ), $this->entry['id'] ?? 0, $this->form['id'] ?? 0 ); /** * See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_pdf_field_content for usage diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Textarea.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Textarea.php new file mode 100644 index 000000000..a5efb9cfd --- /dev/null +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Textarea.php @@ -0,0 +1,39 @@ + 1, + 'useRichTextEditor' => true, + ] ); + + $entry = [ + 'id' => 0, + 'form_id' => 0, + '1' => '
Hi
  • Item 1
  • Item 2
  • Item 3

My paragraph

', + ]; + + $pdf_field = new Field_Textarea( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); + + $value = $pdf_field->html(); + $this->assertStringContainsString('
Hi
  • Item 1
  • Item 2
  • Item 3

My paragraph

', str_replace( [ "\n", "\t" ], '', $value ) ); + } +} \ No newline at end of file From 2f74ac6d8949c370b8353129c25b496f0cc078a1 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 15:04:56 +1000 Subject: [PATCH 020/110] Fix notice about translations loading too early Wrap the compatibility check strings in functions that won't run until the `init` hook. Fixes #1593 (cherry picked from commit 226031bd3c0832a4098feeaba5d6253474f8a4e1) --- pdf.php | 78 ++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 23 deletions(-) diff --git a/pdf.php b/pdf.php index f1079f2f7..9961e9816 100644 --- a/pdf.php +++ b/pdf.php @@ -198,8 +198,10 @@ public function is_compatible_wordpress_version() { /* WordPress version not compatible */ if ( ! version_compare( $wp_version, $this->required_wp_version, '>=' ) ) { - /* translators: 1. WordPress version number 2. HTML Anchor Open Tag 3. Html Anchor Close Tag */ - $this->notices[] = sprintf( esc_html__( 'WordPress version %1$s is required: upgrade to the latest version. %2$sGet more information%3$s.', 'gravity-pdf' ), $this->required_wp_version, '', '' ); + $this->notices[] = function () { + /* translators: 1. WordPress version number 2. HTML Anchor Open Tag 3. Html Anchor Close Tag */ + return sprintf( esc_html__( 'WordPress version %1$s is required: upgrade to the latest version. %2$sGet more information%3$s.', 'gravity-pdf' ), $this->required_wp_version, '', '' ); + }; return false; } @@ -218,15 +220,19 @@ public function check_gravity_forms() { /* Gravity Forms version not compatible */ if ( ! class_exists( 'GFCommon' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Open Tag 3. Html Anchor Close Tag */ - $this->notices[] = sprintf( esc_html__( '%1$sGravity Forms%3$s is required to use Gravity PDF. %2$sGet more information%3$s.', 'gravity-pdf' ), '', '', '' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Open Tag 3. Html Anchor Close Tag */ + return sprintf( esc_html__( '%1$sGravity Forms%3$s is required to use Gravity PDF. %2$sGet more information%3$s.', 'gravity-pdf' ), '', '', '' ); + }; return false; } if ( ! version_compare( GFCommon::$version, $this->required_gf_version, '>=' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. Plugin version number 4. Html Anchor Open Tag */ - $this->notices[] = sprintf( esc_html__( '%1$sGravity Forms%2$s version %3$s or higher is required. %4$sGet more information%2$s.', 'gravity-pdf' ), '', '', $this->required_gf_version, '' ); + $this->notices[] = function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. Plugin version number 4. Html Anchor Open Tag */ + return sprintf( esc_html__( '%1$sGravity Forms%2$s version %3$s or higher is required. %4$sGet more information%2$s.', 'gravity-pdf' ), '', '', $this->required_gf_version, '' ); + }; return false; } @@ -245,8 +251,10 @@ public function check_php() { /* Check PHP version is compatible */ if ( ! version_compare( phpversion(), $this->required_php_version, '>=' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. HTML Anchor Open Tag 4. HTML Anchor Close Tag */ - $this->notices[] = sprintf( esc_html__( 'You are running an %1$soutdated version of PHP%2$s. Contact your web hosting provider to update. %3$sGet more information%4$s.', 'gravity-pdf' ), '', '', '', '' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. HTML Anchor Open Tag 4. HTML Anchor Close Tag */ + return sprintf( esc_html__( 'You are running an %1$soutdated version of PHP%2$s. Contact your web hosting provider to update. %3$sGet more information%4$s.', 'gravity-pdf' ), '', '', '', '' ); + }; return false; } @@ -265,8 +273,15 @@ public function check_mb_string() { /* Check MB String is installed */ if ( ! extension_loaded( 'mbstring' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'MB String' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ + return sprintf( + esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), + '', + '', + 'MB String' + ); + }; return false; } @@ -285,8 +300,10 @@ public function check_mb_string_regex() { /* Check MB String is compiled with regex capabilities */ if ( extension_loaded( 'mbstring' ) && ! function_exists( 'mb_regex_encoding' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension MB String does not have MB Regex enabled. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag */ + return sprintf( esc_html__( 'The PHP extension MB String does not have MB Regex enabled. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '' ); + }; return false; } @@ -303,8 +320,15 @@ public function check_mb_string_regex() { */ public function check_ctype() { if ( ! extension_loaded( 'ctype' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'Ctype' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ + return sprintf( + esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), + '', + '', + 'Ctype' + ); + }; return false; } @@ -323,8 +347,10 @@ public function check_gd() { /* Check GD Image Library is installed */ if ( ! extension_loaded( 'gd' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'GD Image Library' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ + return sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'GD Image Library' ); + }; return false; } @@ -343,16 +369,20 @@ public function check_dom() { /* Check DOM Class is installed */ if ( ! extension_loaded( 'dom' ) || ! class_exists( 'DOMDocument' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'DOM' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ + return sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'DOM' ); + }; return false; } /* Check libxml is loaded */ if ( ! extension_loaded( 'libxml' ) ) { - /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ - $this->notices[] = sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'libxml' ); + $this->notices[] = static function () { + /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. PHP Extension name */ + return sprintf( esc_html__( 'The PHP extension %3$s could not be detected. Contact your web hosting provider to fix. %1$sGet more information%2$s.', 'gravity-pdf' ), '', '', 'libxml' ); + }; return false; } @@ -375,8 +405,10 @@ public function check_ram( $ram ) { $ram = $this->get_ram( $ram ); if ( $ram < 64 && $ram !== -1 ) { - /* translators: 1. RAM value in MB 2. HTML Anchor Open Tag 3. HTML Anchor Close Tag */ - $this->notices[] = sprintf( esc_html__( 'You need 128MB of WP Memory (RAM) but we only found %1$s available. %2$sTry these methods to increase your memory limit%3$s, otherwise contact your web hosting provider to fix.', 'gravity-pdf' ), esc_html( $ram . 'MB' ), '', '' ); + $this->notices[] = static function () use ( $ram ) { + /* translators: 1. RAM value in MB 2. HTML Anchor Open Tag 3. HTML Anchor Close Tag */ + return sprintf( esc_html__( 'You need 128MB of WP Memory (RAM) but we only found %1$s available. %2$sTry these methods to increase your memory limit%3$s, otherwise contact your web hosting provider to fix.', 'gravity-pdf' ), esc_html( $ram . 'MB' ), '', '' ); + }; return false; } @@ -465,7 +497,7 @@ public function notice_body_content() {

    notices as $notice ): ?> -
  • +
From d0137c00e410a75d073dd4764aea9addcc9a5c1c Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 15:24:01 +1000 Subject: [PATCH 021/110] Standardize Products Empty Check When getting the product fields to determine if its empty, pass the filtered `use_value` and `use_admin_label` arguments to match the actual PDF output. Fixes #1595 (cherry picked from commit d8d231aabc6b3addeb84bf9aa9d223c5843b5b4e) --- src/Helper/Fields/Field_Products.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Helper/Fields/Field_Products.php b/src/Helper/Fields/Field_Products.php index c12c0f4fc..c81135b55 100644 --- a/src/Helper/Fields/Field_Products.php +++ b/src/Helper/Fields/Field_Products.php @@ -37,12 +37,14 @@ class Field_Products extends Helper_Abstract_Fields { */ public function is_empty() { - /* Set up the form / lead information */ - $form = $this->form; - $lead = $this->entry; + $form = $this->form; + $entry = $this->entry; /* Get all products for this field */ - $products = GFCommon::get_product_fields( $form, $lead, true ); + $use_value = (bool) apply_filters( 'gfpdf_show_field_value', false, $this->field, '' ); /* Set to `true` to show a field's value instead of the label */ + $use_admin_label = (bool) apply_filters( 'gfpdf_use_admin_label', false, $this->field, '' ); /* Set to `true` to use the admin label */ + + $products = GFCommon::get_product_fields( $form, $entry, ! $use_value, $use_admin_label ); if ( count( $products['products'] ) > 0 ) { return false; /* not empty */ From 80d704a6e027c0471c65b080c4bfcf729095ac51 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 18 Jun 2025 16:13:18 +1000 Subject: [PATCH 022/110] Version bump --- CHANGELOG.txt | 11 +++++++++++ pdf.php | 4 ++-- readme.txt | 17 ++++++++++------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 7f54e953e..dac718e06 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,14 @@ += 6.12.6 = +* 🐞 Bug: Add additional guards for expected value when displaying File Upload field in PDFs (prevents PHP notice) +* 🐞 Bug: Cleanup Background Processing queue when setting is toggled on/off +* 🐞 Bug: Add additional guards for expected value when displaying List field in PDFs (prevents PHP notice if the first row in a list is empty) +* 🐞 Bug: Ensure Gravity PDF system status information is in English when copied to clipboard +* 🐞 Bug: Fix fatal error when Gravity Forms logging is turned on, but the directory where log files are saved is not writable by the web server +* 🐞 Bug: Resolve memory problem generating Core PDFs if a Rich Text Paragraph field contains more than 10+ classes (elements with more than 8 classes will have extras removed) +* 🐞 Bug: Fix 'translations loaded too early' PHP notice if any plugin requirements aren't met +* 🐞 Bug: Pass the filtered 'use_value' and 'use_admin_label' arguments when determining if the product table is empty +* 🧹 Housekeeping: Move Gravity PDF system status information to the bottom of the report + = 6.12.5.1 = * 🧹 Housekeeping: Update version number in readme.txt file diff --git a/pdf.php b/pdf.php index 9961e9816..b95861533 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Fri, 20 Jun 2025 14:00:33 +1000 Subject: [PATCH 023/110] Update stable tag in readme.txt file --- readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index f14682396..91f0e156b 100644 --- a/readme.txt +++ b/readme.txt @@ -5,7 +5,7 @@ Donate link: https://gravitypdf.com/donate-to-plugin/ Tags: gravity forms, form, contact form, pdf, email Requires at least: 5.3 Tested up to: 6.8 -Stable tag: 6.12.5.1 +Stable tag: 6.12.6 Requires PHP: 7.3 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl.txt From ea92af7beb3bf87ec0e351394b9543c6b3cda2d4 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 15 Jul 2025 12:07:07 +1000 Subject: [PATCH 024/110] Mpdf Improvements - Replace Cache class with version that better accounts for directory permissions of the parent folder - Remove creation of unnecessary ttfontdata folder - Move override files/classes to new folder for easier development --- .php-scoper/mpdf.php | 4 + bin/install-gravityforms.sh | 4 +- src/Helper/Helper_Mpdf.php | 101 +-------------- src/Helper/Helper_PDF.php | 4 +- src/Helper/Mpdf/Cache.php | 28 +++++ src/Helper/Mpdf/Mpdf.php | 118 ++++++++++++++++++ src/Model/Model_Install.php | 1 - .../unit-tests/Helper/Mpdf/Test_Cache.php | 56 +++++++++ tests/phpunit/unit-tests/test-installer.php | 1 - 9 files changed, 213 insertions(+), 104 deletions(-) create mode 100644 src/Helper/Mpdf/Cache.php create mode 100644 src/Helper/Mpdf/Mpdf.php create mode 100644 tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php diff --git a/.php-scoper/mpdf.php b/.php-scoper/mpdf.php index e69781a49..0c5da11b9 100644 --- a/.php-scoper/mpdf.php +++ b/.php-scoper/mpdf.php @@ -62,6 +62,10 @@ function( string $filePath, string $prefix, string $content ): string { $content = str_replace( "$prefix\\\\getDefaults(); - $this->mpdf = new Helper_Mpdf( + $this->mpdf = new Mpdf( apply_filters( 'gfpdf_mpdf_class_config', [ diff --git a/src/Helper/Mpdf/Cache.php b/src/Helper/Mpdf/Cache.php new file mode 100644 index 000000000..533513f43 --- /dev/null +++ b/src/Helper/Mpdf/Cache.php @@ -0,0 +1,28 @@ +data->template_font_location, $this->data->template_tmp_location, $this->data->mpdf_tmp_location, - $this->data->mpdf_tmp_location . '/ttfontdata', ]; if ( is_multisite() ) { diff --git a/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php b/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php new file mode 100644 index 000000000..8c5e9b939 --- /dev/null +++ b/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php @@ -0,0 +1,56 @@ + +assertSame( decoct( $permission ), $base_permission ); + $this->assertSame( decoct( $permission ), $tmp_permission ); + } + + public function provider_createDirectory() { + return [ + [ 0755 ], + [ 0775 ], + [ 0777 ], + ]; + } +} \ No newline at end of file diff --git a/tests/phpunit/unit-tests/test-installer.php b/tests/phpunit/unit-tests/test-installer.php index e0cf3b174..b3bb0fb30 100644 --- a/tests/phpunit/unit-tests/test-installer.php +++ b/tests/phpunit/unit-tests/test-installer.php @@ -172,7 +172,6 @@ public function test_create_folder_structures() { $this->assertDirectoryExists( $gfpdf->data->template_font_location ); $this->assertDirectoryExists( $gfpdf->data->template_tmp_location ); $this->assertDirectoryExists( $gfpdf->data->mpdf_tmp_location ); - $this->assertDirectoryExists( $gfpdf->data->mpdf_tmp_location . '/ttfontdata' ); $this->assertFileExists( $gfpdf->data->template_tmp_location . '.htaccess' ); $this->assertFileExists( $gfpdf->data->template_tmp_location . 'index.html' ); From cfcbc3905cf83705f0cea81f02de051bb9c59352 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 15 Jul 2025 15:11:38 +1000 Subject: [PATCH 025/110] Use wp_remote_get() when retrieving remote PDF assets --- src/Helper/Helper_PDF.php | 24 +++-- src/Helper/Mpdf/Request.php | 90 +++++++++++++++++++ .../unit-tests/Helper/Mpdf/Test_Cache.php | 5 +- .../unit-tests/Helper/Mpdf/Test_Request.php | 63 +++++++++++++ 4 files changed, 169 insertions(+), 13 deletions(-) create mode 100644 src/Helper/Mpdf/Request.php create mode 100644 tests/phpunit/unit-tests/Helper/Mpdf/Test_Request.php diff --git a/src/Helper/Helper_PDF.php b/src/Helper/Helper_PDF.php index d74a6c6d4..97db3223d 100644 --- a/src/Helper/Helper_PDF.php +++ b/src/Helper/Helper_PDF.php @@ -3,10 +3,12 @@ namespace GFPDF\Helper; use Exception; +use GFPDF\Helper\Mpdf\Request; use GFPDF_Vendor\Mpdf\Config\FontVariables; use GFPDF\Helper\Mpdf\Mpdf; use GFPDF_Vendor\Mpdf\MpdfException; use GFPDF_Vendor\Mpdf\Utils\UtfString; +use GFPDF_Vendor\Mpdf\Container\SimpleContainer; use Psr\Log\LoggerInterface; /** @@ -623,18 +625,10 @@ protected function begin_pdf() { apply_filters( 'gfpdf_mpdf_class_config', [ - 'fontDir' => [ - $this->data->template_font_location, - ], - + 'fontDir' => [ $this->data->template_font_location ], 'fontdata' => apply_filters( 'mpdf_font_data', $default_font_config['fontdata'] ), - 'tempDir' => $this->data->mpdf_tmp_location, - 'curlCaCertificate' => ABSPATH . WPINC . '/certificates/ca-bundle.crt', - 'curlFollowLocation' => true, - 'curlUserAgent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0', - 'allow_output_buffering' => true, 'autoLangToFont' => true, 'useSubstitutions' => true, @@ -657,6 +651,18 @@ protected function begin_pdf() { $this->entry, $this->settings, $this + ), + new SimpleContainer( + apply_filters( + 'gfpdf_mpdf_class_container', + [ + 'httpClient' => new Request( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ), + ], + $this->form, + $this->entry, + $this->settings, + $this + ) ) ); diff --git a/src/Helper/Mpdf/Request.php b/src/Helper/Mpdf/Request.php new file mode 100644 index 000000000..2bb76dda8 --- /dev/null +++ b/src/Helper/Mpdf/Request.php @@ -0,0 +1,90 @@ +debug = $debug; + } + + /** + * Use WordPress functions for remote requests + * + * @param RequestInterface $request + * + * @return Response + * @throws MpdfException + * + * @since 6.13.0 + */ + public function sendRequest( RequestInterface $request ) { + + /* Not a valid request */ + if ( null === $request->getUri() ) { + return new Response(); + } + + $response = new Response(); + $url = (string) $request->getUri(); + + $this->logger->debug( \sprintf( 'Fetching content of remote URL "%s"', $url ), [ 'context' => LogContext::REMOTE_CONTENT ] ); + + /* Make a GET request to the URL */ + $request_args = apply_filters( + 'gfpdf_remote_request_args', + [ + 'reject_unsafe_urls' => true, + ] + ); + + $request = wp_remote_get( $url, (array) $request_args ); + + /* Handle any request errors */ + if ( is_wp_error( $request ) ) { + $message = \sprintf( 'Remote request error for %s: "%s: %s"', $url, $request->get_error_code(), $request->get_error_message() ); + $this->logger->error( $message, [ 'context' => LogContext::REMOTE_CONTENT ] ); + + if ( $this->debug ) { + throw new MpdfException( esc_html( $message ) ); + } + + return $response; + } + + $status_code = wp_remote_retrieve_response_code( $request ); + if ( empty( $status_code ) || ! str_starts_with( (string) $status_code, '2' ) ) { + $message = \sprintf( 'HTTP error "%d" for %s', $status_code, $url ); + $this->logger->error( $message, [ 'context' => LogContext::REMOTE_CONTENT ] ); + + if ( $this->debug ) { + throw new MpdfException( esc_html( $message ) ); + } + + return $response->withStatus( $status_code ); + } + + /* Return the request body */ + $response_body = wp_remote_retrieve_body( $request ); + + return $response->withStatus( $status_code )->withBody( Stream::create( $response_body ) ); + } +} diff --git a/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php b/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php index 8c5e9b939..8c66a99b2 100644 --- a/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php +++ b/tests/phpunit/unit-tests/Helper/Mpdf/Test_Cache.php @@ -1,4 +1,3 @@ - setLogger( new NullLogger() ); + $response = $request->sendRequest( new Payload( 'GET', 'https://raw.githubusercontent.com/WordPress/WordPress/refs/heads/master/license.txt' ) ); + + $this->assertStringContainsString( 'WordPress - Web publishing software', (string) $response->getBody() ); + } + + public function test_send_request_wp_error() { + $request = new Request(); + $request->setLogger( new NullLogger() ); + $response = $request->sendRequest( new Payload( 'GET', 'raw.githubusercontent.com/WordPress/WordPress/refs/heads/master/license.txt' ) ); + + $this->assertEmpty( (string) $response->getBody() ); + } + + public function test_send_request_wp_error_with_debug() { + $this->expectException( MpdfException::class ); + + $request = new Request( true ); + $request->setLogger( new NullLogger() ); + $request->sendRequest( new Payload( 'GET', 'raw.githubusercontent.com/WordPress/WordPress/refs/heads/master/license.txt' ) ); + } + + public function test_send_request_status_error() { + $request = new Request(); + $request->setLogger( new NullLogger() ); + $response = $request->sendRequest( new Payload( 'GET', 'https://raw.githubusercontent.com/WordPress/WordPress/refs/heads/master/license1.txt' ) ); + + $this->assertSame( 404, $response->getStatusCode() ); + $this->assertEmpty( (string) $response->getBody() ); + } + + public function test_send_request_status_error_with_debug() { + $this->expectException( MpdfException::class ); + + $request = new Request( true ); + $request->setLogger( new NullLogger() ); + $request->sendRequest( new Payload( 'GET', 'https://raw.githubusercontent.com/WordPress/WordPress/refs/heads/master/license1.txt' ) ); + } +} From bdf62870a95bb9db24edc0cbd434b110b90e003f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 14:31:18 +1000 Subject: [PATCH 026/110] Let Gravity PDF handle cleanup of Mpdf temp directory --- src/Helper/Mpdf/Cache.php | 9 ++++++++ src/Model/Model_PDF.php | 32 +++++++++++++++++++-------- tests/phpunit/unit-tests/test-pdf.php | 9 +++++++- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/Helper/Mpdf/Cache.php b/src/Helper/Mpdf/Cache.php index 533513f43..6fcabedfa 100644 --- a/src/Helper/Mpdf/Cache.php +++ b/src/Helper/Mpdf/Cache.php @@ -25,4 +25,13 @@ protected function createDirectory( $basePath ) { return true; } + + /** + * Do nothing here. Let Gravity PDF's cron cleanup handle old temp files. + * + * @return void + * + * @since 6.13.0 + */ + public function clearOld() {} } diff --git a/src/Model/Model_PDF.php b/src/Model/Model_PDF.php index f0f24a9d0..910bd304a 100644 --- a/src/Model/Model_PDF.php +++ b/src/Model/Model_PDF.php @@ -985,7 +985,7 @@ function ( $pdf ) { margin-bottom: 0; } - +

@@ -1951,30 +1951,44 @@ public function trigger_post_save_pdf( $form, $entry, $settings, $pdf ) { } /** - * Clean-up our tmp directory every 12 hours + * Clean-up the tmp directory/ies * * @return void * * @since 4.0 */ public function cleanup_tmp_dir() { - $max_file_age = time() - 12 * 3600; /* Max age is 12 hours old */ - $tmp_directory = $this->data->template_tmp_location; - if ( is_dir( $tmp_directory ) ) { + $config = [ + /* the mPDF tmp directory is usually inside the template tmp directory, but can be moved via a filter */ + [ + 'dir' => $this->data->mpdf_tmp_location, + 'age' => time() - 3600, // 1 hour + ], + + [ + 'dir' => $this->data->template_tmp_location, + 'age' => time() - 12 * 3600, // 12 hour + ], + ]; + + foreach ( $config as $item ) { + if ( ! is_dir( $item['dir'] ) ) { + continue; + } try { $directory_list = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator( $tmp_directory, RecursiveDirectoryIterator::SKIP_DOTS ), + new RecursiveDirectoryIterator( $item['dir'], RecursiveDirectoryIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ); foreach ( $directory_list as $file ) { - if ( in_array( $file->getFilename(), [ '.htaccess', 'index.html' ], true ) || strpos( realpath( $file->getPathname() ), realpath( $this->data->mpdf_tmp_location ) ) !== false ) { + if ( in_array( $file->getFilename(), [ '.htaccess', 'index.html' ], true ) ) { continue; } - if ( $file->isReadable() && $file->getMTime() < $max_file_age ) { + if ( $file->isReadable() && $file->getMTime() < $item['age'] ) { ( $file->isDir() ) ? $this->misc->rmdir( $file->getPathName() ) : @unlink( $file->getPathName() ); //phpcs:ignore @@ -1984,7 +1998,7 @@ public function cleanup_tmp_dir() { $this->log->error( 'Filesystem Delete Error', [ - 'dir' => $tmp_directory, + 'dir' => $item['dir'], 'exception' => $e->getMessage(), ] ); diff --git a/tests/phpunit/unit-tests/test-pdf.php b/tests/phpunit/unit-tests/test-pdf.php index 11ac55075..522af1434 100644 --- a/tests/phpunit/unit-tests/test-pdf.php +++ b/tests/phpunit/unit-tests/test-pdf.php @@ -1280,7 +1280,11 @@ public function test_cleanup_tmp_dir() { 'test5' => time() - ( 15 * 3600 ), 'test6' => time() - ( 5 * 3600 ), '.htaccess' => time() - ( 48 * 3600 ), - 'mpdf/test' => time() - ( 25 * 3600 ), /* normally deleted, but excluded */ + 'mpdf/test' => time() - ( 0.5 * 3600 ), + 'mpdf/test1' => time() - 3601, + 'mpdf/test2' => time() - 3600, + 'mpdf/test3' => time() - ( 25 * 3600 ), + ]; foreach ( $files as $file => $modified ) { @@ -1299,6 +1303,9 @@ public function test_cleanup_tmp_dir() { $this->assertFileExists( $tmp . 'test6' ); $this->assertFileExists( $tmp . '.htaccess' ); $this->assertFileExists( $tmp . 'mpdf/test' ); + $this->assertFileDoesNotExist( $tmp . 'mpdf/test1' ); + $this->assertFileExists( $tmp . 'mpdf/test2' ); + $this->assertFileDoesNotExist( $tmp . 'mpdf/test3' ); /* Cleanup our files */ foreach ( $files as $file => $modified ) { From 502e96cd59f8d7fb37f2a3ec0d0e17133ba89184 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 15:48:24 +1000 Subject: [PATCH 027/110] Ignore deprecated notices during unit tests --- tests/phpunit/bootstrap.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php index c80f24a33..e7a58ce02 100644 --- a/tests/phpunit/bootstrap.php +++ b/tests/phpunit/bootstrap.php @@ -97,6 +97,8 @@ public function mocks() { * @since 4.0 */ public function load() { + error_reporting( E_ALL & ~E_DEPRECATED ); + require_once( __DIR__ . '/gravityforms-factory.php' ); require_once $this->plugin_dir . '/../gravityforms/gravityforms.php'; From 7541ab74edb5601be5f66b2bd392bc3674b8ff9a Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 16:07:33 +1000 Subject: [PATCH 028/110] Security Hardening - limit filesystem folders that can be deleted --- src/Helper/Helper_Misc.php | 56 ++++++++++++++++- src/Model/Model_Install.php | 61 +++++++++---------- tests/phpunit/unit-tests/test-helper-misc.php | 31 +++++++++- 3 files changed, 112 insertions(+), 36 deletions(-) diff --git a/src/Helper/Helper_Misc.php b/src/Helper/Helper_Misc.php index c8c39de03..c82c67d4e 100644 --- a/src/Helper/Helper_Misc.php +++ b/src/Helper/Helper_Misc.php @@ -353,9 +353,61 @@ public function array_unshift_assoc( $array_to_update, $key, $val ) { * @return bool|WP_Error * * @since 4.0 + * @since 6.13.0 Directories not managed by Gravity PDF will throw an error if tried to be deleted */ public function rmdir( $dir, bool $delete_top_level_dir = true ) { + /* + * Do not allow directories outside the folders managed by Gravity PDF to be deleted + */ + $folders = [ + $this->data->template_location, + $this->data->template_font_location, + $this->data->template_tmp_location, + $this->data->mpdf_tmp_location, + ]; + + if ( is_multisite() ) { + $folders[] = $this->data->multisite_template_location; + } + + /* Verify $dir is a real path on the current file system */ + $path_to_test = realpath( $dir ); + if ( $path_to_test === false ) { + $this->log->error( + 'Filesystem Delete Error', + [ + 'dir' => $dir, + 'exception' => 'Not a real path on the file system', + ] + ); + + return new WP_Error( 'gfpdf_rmdir_not_a_real_path' ); + } + + /* Check if $dir to delete falls inside one of the Gravity PDF directories */ + $allowed_to_delete = false; + foreach ( $folders as $folder ) { + + if ( strpos( $path_to_test, realpath( $folder ) ) === 0 ) { + $allowed_to_delete = true; + break; + } + } + + if ( ! $allowed_to_delete ) { + $this->log->error( + 'Filesystem Delete Error', + [ + 'dir' => $dir, + 'exception' => 'Directory falls outside of approved paths', + ] + ); + + return new WP_Error( 'gfpdf_rmdir_directory_not_approved', esc_html( 'Cannot delete path. Directory falls outside of approved Gravity PDF paths: ' . $dir ) ); + } + + /* Path is managed by Gravity PDF and can be deleted */ $this->log->notice( sprintf( 'Begin deleting directory recursively: %s', $dir ) ); try { @@ -368,7 +420,7 @@ public function rmdir( $dir, bool $delete_top_level_dir = true ) { $function = ( $fileinfo->isDir() ) ? 'rmdir' : 'unlink'; $real_path = $fileinfo->getRealPath(); if ( ! $function( $real_path ) ) { - throw new Exception( 'Could not run ' . $function . ' on ' . $real_path ); + throw new Exception( esc_html( 'Could not run ' . $function . ' on ' . $real_path ) ); } $this->log->notice( sprintf( 'Successfully ran `%s` on %s', $function, $real_path ) ); @@ -382,7 +434,7 @@ public function rmdir( $dir, bool $delete_top_level_dir = true ) { ] ); - return new WP_Error( 'recursion_delete_problem', $e ); + return new WP_Error( 'recursion_delete_problem', esc_html( $e ) ); } $results = true; diff --git a/src/Model/Model_Install.php b/src/Model/Model_Install.php index 285ffa529..15dd6c0db 100644 --- a/src/Model/Model_Install.php +++ b/src/Model/Model_Install.php @@ -182,22 +182,22 @@ public function setup_template_location() { $upload_dir_url = $this->data->upload_dir_url; /* Legacy Filters */ - $this->data->template_location = apply_filters( 'gfpdfe_template_location', $template_dir, $working_folder, $upload_dir ); - $this->data->template_location_url = apply_filters( 'gfpdfe_template_location_uri', $template_url, $working_folder, $upload_dir_url ); + $this->data->template_location = trailingslashit( apply_filters( 'gfpdfe_template_location', $template_dir, $working_folder, $upload_dir ) ); + $this->data->template_location_url = trailingslashit( apply_filters( 'gfpdfe_template_location_uri', $template_url, $working_folder, $upload_dir_url ) ); /* Allow user to change directory location(s) */ /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_template_location/ for more details about this filter */ - $this->data->template_location = apply_filters( 'gfpdf_template_location', $this->data->template_location, $working_folder, $upload_dir ); /* needs to be accessible from the web */ + $this->data->template_location = trailingslashit( apply_filters( 'gfpdf_template_location', $this->data->template_location, $working_folder, $upload_dir ) ); /* needs to be accessible from the web */ /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_template_location_uri/ for more details about this filter */ - $this->data->template_location_url = apply_filters( 'gfpdf_template_location_uri', $this->data->template_location_url, $working_folder, $upload_dir_url ); /* needs to be accessible from the web */ + $this->data->template_location_url = trailingslashit( apply_filters( 'gfpdf_template_location_uri', $this->data->template_location_url, $working_folder, $upload_dir_url ) ); /* needs to be accessible from the web */ /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_font_location/ for more details about this filter */ - $this->data->template_font_location = apply_filters( 'gfpdf_font_location', $this->data->template_location . 'fonts/', $working_folder, $upload_dir ); /* can be in a directory not accessible via the web */ + $this->data->template_font_location = trailingslashit( apply_filters( 'gfpdf_font_location', $this->data->template_location . 'fonts/', $working_folder, $upload_dir ) ); /* can be in a directory not accessible via the web */ /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_tmp_location/ for more details about this filter */ - $this->data->template_tmp_location = apply_filters( 'gfpdf_tmp_location', $this->data->template_location . 'tmp/', $working_folder, $upload_dir_url ); /* encouraged to move this to a directory not accessible via the web */ + $this->data->template_tmp_location = trailingslashit( apply_filters( 'gfpdf_tmp_location', $this->data->template_location . 'tmp/', $working_folder, $upload_dir_url ) ); /* encouraged to move this to a directory not accessible via the web */ /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_mpdf_tmp_location/ for more details about this filter */ $mpdf_tmp_path = $this->data->template_tmp_location . 'mpdf'; @@ -213,34 +213,35 @@ public function setup_template_location() { */ public function setup_multisite_template_location() { - if ( is_multisite() ) { + if ( ! is_multisite() ) { + return; + } - $blog_id = get_current_blog_id(); + $blog_id = get_current_blog_id(); - $template_dir = $this->data->template_location . $blog_id . '/'; - $template_url = $this->data->template_location_url . $blog_id . '/'; - $working_folder = $this->data->working_folder; - $upload_dir = $this->data->upload_dir; - $upload_dir_url = $this->data->upload_dir_url; + $template_dir = $this->data->template_location . $blog_id . '/'; + $template_url = $this->data->template_location_url . $blog_id . '/'; + $working_folder = $this->data->working_folder; + $upload_dir = $this->data->upload_dir; + $upload_dir_url = $this->data->upload_dir_url; - /** - * Allow user to change directory location(s) - * - * @internal Folder location needs to be accessible from the web - */ + /** + * Allow user to change directory location(s) + * + * @internal Folder location needs to be accessible from the web + */ - /* Global filter */ + /* Global filter */ - /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_multisite_template_location/ for more details about this filter */ - $this->data->multisite_template_location = apply_filters( 'gfpdf_multisite_template_location', $template_dir, $working_folder, $upload_dir, $blog_id ); + /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_multisite_template_location/ for more details about this filter */ + $this->data->multisite_template_location = trailingslashit( apply_filters( 'gfpdf_multisite_template_location', $template_dir, $working_folder, $upload_dir, $blog_id ) ); - /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_multisite_template_location_uri/ for more details about this filter */ - $this->data->multisite_template_location_url = apply_filters( 'gfpdf_multisite_template_location_uri', $template_url, $working_folder, $upload_dir_url, $blog_id ); + /* See https://docs.gravitypdf.com/v6/developers/filters/gfpdf_multisite_template_location_uri/ for more details about this filter */ + $this->data->multisite_template_location_url = trailingslashit( apply_filters( 'gfpdf_multisite_template_location_uri', $template_url, $working_folder, $upload_dir_url, $blog_id ) ); - /* Per-blog filters */ - $this->data->multisite_template_location = apply_filters( 'gfpdf_multisite_template_location_' . $blog_id, $this->data->multisite_template_location, $working_folder, $upload_dir, $blog_id ); - $this->data->multisite_template_location_url = apply_filters( 'gfpdf_multisite_template_location_uri_' . $blog_id, $this->data->multisite_template_location_url, $working_folder, $upload_dir_url, $blog_id ); - } + /* Per-blog filters */ + $this->data->multisite_template_location = trailingslashit( apply_filters( 'gfpdf_multisite_template_location_' . $blog_id, $this->data->multisite_template_location, $working_folder, $upload_dir, $blog_id ) ); + $this->data->multisite_template_location_url = trailingslashit( apply_filters( 'gfpdf_multisite_template_location_uri_' . $blog_id, $this->data->multisite_template_location_url, $working_folder, $upload_dir_url, $blog_id ) ); } /** @@ -254,10 +255,8 @@ public function setup_multisite_template_location() { */ public function create_folder_structures() { - /* don't create the folder structure on our welcome page or through AJAX as an errors on the first page they see will confuse users */ - if ( is_admin() && - ( rgget( 'page' ) === 'gfpdf-getting-started' || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) - ) { + /* don't create the folder structure if an AJAX or REST API request */ + if ( ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'REST_REQUEST' ) && REST_REQUEST ) ) { return null; } diff --git a/tests/phpunit/unit-tests/test-helper-misc.php b/tests/phpunit/unit-tests/test-helper-misc.php index f3dc03ed0..ac4d3edcb 100644 --- a/tests/phpunit/unit-tests/test-helper-misc.php +++ b/tests/phpunit/unit-tests/test-helper-misc.php @@ -622,7 +622,8 @@ public function provider_in_array() { public function test_cleanup_dir() { /* Create our test data */ - $path = '/tmp/test/'; + $data = \GPDFAPI::get_data_class(); + $path = $data->template_location .'folder/'; wp_mkdir_p( $path ); touch( $path . 'test' ); @@ -637,11 +638,24 @@ public function test_cleanup_dir() { $this->assertDirectoryExists( $path ); rmdir( $path ); + + /* Verify we cannot delete folders outside those the plugin manages */ + $path = sys_get_temp_dir() . '/folder/'; + wp_mkdir_p( $path ); + touch( $path . 'test' ); + $this->assertFileExists( $path . 'test' ); + + $this->misc->cleanup_dir( $path ); + + $this->assertFileExists( $path . 'test' ); + unlink( $path . 'test' ); + rmdir( $path ); } public function test_rmdir() { - /* Create test data */ - $path = '/tmp/test/'; + /* Create our test data */ + $data = \GPDFAPI::get_data_class(); + $path = $data->template_location .'folder/'; wp_mkdir_p( $path ); touch( $path . 'test' ); @@ -665,5 +679,16 @@ public function test_rmdir() { $this->assertFileDoesNotExist( $path . 'test' ); $this->assertDirectoryDoesNotExist( $path ); + + /* Verify we cannot delete folders outside those the plugin manages */ + $path = sys_get_temp_dir() . '/folder/'; + wp_mkdir_p( $path ); + $this->assertDirectoryExists( $path ); + + $results = $this->misc->rmdir( $path ); + $this->assertSame( 'gfpdf_rmdir_directory_not_approved', $results->get_error_code() ); + + $this->assertDirectoryExists( $path ); + rmdir( $path ); } } From a5caf495846e7c1413f35689d4952cf2cb2408f0 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 16:19:42 +1000 Subject: [PATCH 029/110] Use new Mpdf cache class when validating custom fonts --- src/Helper/Fonts/SupportsOtl.php | 8 +++++--- src/Helper/Fonts/TtfFontValidation.php | 11 ++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Helper/Fonts/SupportsOtl.php b/src/Helper/Fonts/SupportsOtl.php index 0fe96ce01..a2f247da1 100644 --- a/src/Helper/Fonts/SupportsOtl.php +++ b/src/Helper/Fonts/SupportsOtl.php @@ -4,7 +4,7 @@ namespace GFPDF\Helper\Fonts; -use GFPDF_Vendor\Mpdf\Cache; +use GFPDF\Helper\Mpdf\Cache; use GFPDF_Vendor\Mpdf\Fonts\FontCache; use GFPDF_Vendor\Mpdf\MpdfException; use GFPDF_Vendor\Mpdf\TTFontFile; @@ -46,10 +46,12 @@ public function __construct( string $font_directory_path ) { */ public function supports_otl( string $file ): bool { try { - $ttf = new TTFontFile( new FontCache( new Cache( get_temp_dir() . 'mpdf' ) ), apply_filters( 'gpdf_mpdf_font_descriptor', 'win' ) ); + $data = \GPDFAPI::get_data_class(); + + $ttf = new TTFontFile( new FontCache( new Cache( $data->mpdf_tmp_location . '/mpdf' ) ), apply_filters( 'gpdf_mpdf_font_descriptor', 'win' ) ); $ttf->getMetrics( $this->font_directory_path . $file, (string) time(), 0, false, false, 0xFF ); - return strlen( $ttf->familyName ) > 0; + return ! empty( $ttf->familyName ); } catch ( MpdfException $e ) { } diff --git a/src/Helper/Fonts/TtfFontValidation.php b/src/Helper/Fonts/TtfFontValidation.php index 2175362d8..bd3fbfdad 100644 --- a/src/Helper/Fonts/TtfFontValidation.php +++ b/src/Helper/Fonts/TtfFontValidation.php @@ -7,9 +7,10 @@ use GFPDF_Vendor\GravityPdf\Upload\FileInfoInterface; use GFPDF_Vendor\GravityPdf\Upload\ValidationInterface; use GFPDF_Vendor\GravityPdf\Upload\Exception as UploadException; -use GFPDF_Vendor\Mpdf\Cache; +use GFPDF\Helper\Mpdf\Cache; use GFPDF_Vendor\Mpdf\Fonts\FontCache; use GFPDF_Vendor\Mpdf\Exception\FontException; +use GFPDF_Vendor\Mpdf\MpdfException; use GFPDF_Vendor\Mpdf\TTFontFile; /** @@ -39,13 +40,15 @@ class TtfFontValidation implements ValidationInterface { * * @param FileInfoInterface $file * - * @throws MpdfException + * @throws \GFPDF_Vendor\Mpdf\MpdfException * @throws \GFPDF_Vendor\Mpdf\Exception\FontException * @since 6.0 */ public function validate( FileInfoInterface $file ): void { try { - $ttf = new TTFontFile( new FontCache( new Cache( get_temp_dir() . 'mpdf' ) ), apply_filters( 'gpdf_mpdf_font_descriptor', 'win' ) ); + $data = \GPDFAPI::get_data_class(); + + $ttf = new TTFontFile( new FontCache( new Cache( $data->mpdf_tmp_location . '/mpdf' ) ), apply_filters( 'gpdf_mpdf_font_descriptor', 'win' ) ); $ttf->getMetrics( $file->getPathname(), $file->getName() ); if ( empty( $ttf->familyName ) ) { @@ -53,6 +56,8 @@ public function validate( FileInfoInterface $file ): void { } } catch ( FontException $e ) { throw new UploadException( 'Not a valid font file.' ); + } catch ( MpdfException $e ) { + throw new UploadException( 'Unknown error occurred.' ); } } } From e470e2893d8b42d4268c4a1d5cf0fc4cdb4f5e44 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 11:21:31 +1000 Subject: [PATCH 030/110] Fix PHP notices due to missing array keys --- gravity-pdf-updater.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gravity-pdf-updater.php b/gravity-pdf-updater.php index 157c6e016..17a0d0344 100644 --- a/gravity-pdf-updater.php +++ b/gravity-pdf-updater.php @@ -121,8 +121,8 @@ function ( $plugin_file, $plugin_data ) { printf( '', - esc_attr( $plugin_data['slug'] ), - esc_attr( $plugin_data['plugin'] ), + esc_attr( $plugin_data['slug'] ?? '' ), + esc_attr( $plugin_data['plugin'] ?? '' ), 'inactive' ); From 92904284046180a3a068679852469b2e0d5852ea Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 19 Jun 2025 09:36:56 +1000 Subject: [PATCH 031/110] Extra checks for GP Populate Anything classes/methods Prevents a fatal error if a user is running a very old version of the software, or these classes/methods are removed in a future release. --- src/Model/Model_PDF.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Model/Model_PDF.php b/src/Model/Model_PDF.php index 910bd304a..b660e440b 100644 --- a/src/Model/Model_PDF.php +++ b/src/Model/Model_PDF.php @@ -2432,6 +2432,10 @@ public function set_watermark_font( $mpdf, $form, $entry, $settings ) { * @since 5.3 */ public function process_gp_populate_anything( $text, $form, $entry ) { + if ( ! method_exists( '\GP_Populate_Anything_Live_Merge_Tags', 'replace_live_merge_tags_static' ) ) { + return $text; + } + $gp = GP_Populate_Anything_Live_Merge_Tags::get_instance(); $this->disable_gp_populate_anything(); @@ -2557,6 +2561,10 @@ function ( $item ) use ( $form ) { * @since 6.10.2 */ public function gp_populate_anything_hydrate_form( $form, $entry ) { + if ( ! method_exists( '\GP_Populate_Anything', 'populate_form' ) ) { + return $form; + } + static $cache = []; $form_id = $form['id'] ?? ''; From 9b11fcca5b749859de549f849ef5944e2c9ac496 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 17 Jul 2025 16:50:21 +1000 Subject: [PATCH 032/110] Version bump --- CHANGELOG.txt | 12 ++++++++++++ pdf.php | 4 ++-- readme.txt | 22 +++++++++++----------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index dac718e06..6791faef7 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,15 @@ += 6.13.0 = +* 🔒 Security: Switch from cURL to wp_safe_remote_get() when getting remote assets for PDFs (eg. images, CSS) +* 🔒 Security: Cleanup routine will only allow directories created and managed by Gravity PDF to be deleted +* 🐞 Bug: Ensure mPDF cache honors filesystem permissions when creating new folders +* 🐞 Bug: Don't create unnecessary ttfontdata directory in mPDF temporary directory +* 🐞 Bug: Fix PHP notices when displaying a message identifying which plugin is the non-canonical version +* 🐞 Bug: Prevent fatal error when a really old versions of GP Populate Anything is installed +* 🧹 Housekeeping: Remove mPDF temporary directory cleanup routine. Now handled directly by Gravity PDF Cron task. +* 🧹 Housekeeping: Add `gfpdf_remote_request_args` filter to let developers modify the PDF remote request configuration +* 🧹 Housekeeping: Add `gfpdf_mpdf_class_container` filter to let developers replace the `httpClient` class used by mPDF + + = 6.12.6 = * 🐞 Bug: Add additional guards for expected value when displaying File Upload field in PDFs (prevents PHP notice) * 🐞 Bug: Cleanup Background Processing queue when setting is toggled on/off diff --git a/pdf.php b/pdf.php index b95861533..d960ec873 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Tue, 5 Aug 2025 08:18:03 +1000 Subject: [PATCH 033/110] Only enable debug mode if both WP_DEBUG and WP_DEBUG_DISPLAY are set to `true` For whatever reason WP defaults WP_DEBUG_DISPLAY to `true` if it isn't defined in the wp-config.php file, even if WP_DEBUG is set to false. Resolve issues where production sites are throwing 404 errors even if debug mode is disabled. --- src/Helper/Helper_PDF.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Helper/Helper_PDF.php b/src/Helper/Helper_PDF.php index 97db3223d..03ce07b27 100644 --- a/src/Helper/Helper_PDF.php +++ b/src/Helper/Helper_PDF.php @@ -656,7 +656,7 @@ protected function begin_pdf() { apply_filters( 'gfpdf_mpdf_class_container', [ - 'httpClient' => new Request( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ), + 'httpClient' => new Request( WP_DEBUG && WP_DEBUG_DISPLAY ), ], $this->form, $this->entry, From b77eeeba627981746f43bdfa3055fdabb2ba63f0 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 5 Aug 2025 08:21:23 +1000 Subject: [PATCH 034/110] Version bump --- CHANGELOG.txt => CHANGELOG.md | 1098 +++++++++++++++++---------------- pdf.php | 4 +- readme.txt | 136 ---- 3 files changed, 552 insertions(+), 686 deletions(-) rename CHANGELOG.txt => CHANGELOG.md (65%) delete mode 100644 readme.txt diff --git a/CHANGELOG.txt b/CHANGELOG.md similarity index 65% rename from CHANGELOG.txt rename to CHANGELOG.md index 6791faef7..1c2d2435d 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.md @@ -1,4 +1,9 @@ -= 6.13.0 = +# Changelog + +## 6.13.1 +* 🐞 Bug: Only enable image PDF debugging when both `WP_DEBUG` and `WP_DEBUG_DISPLAY` constants are set to true + +## 6.13.0 * 🔒 Security: Switch from cURL to wp_safe_remote_get() when getting remote assets for PDFs (eg. images, CSS) * 🔒 Security: Cleanup routine will only allow directories created and managed by Gravity PDF to be deleted * 🐞 Bug: Ensure mPDF cache honors filesystem permissions when creating new folders @@ -9,8 +14,7 @@ * 🧹 Housekeeping: Add `gfpdf_remote_request_args` filter to let developers modify the PDF remote request configuration * 🧹 Housekeeping: Add `gfpdf_mpdf_class_container` filter to let developers replace the `httpClient` class used by mPDF - -= 6.12.6 = +## 6.12.6 * 🐞 Bug: Add additional guards for expected value when displaying File Upload field in PDFs (prevents PHP notice) * 🐞 Bug: Cleanup Background Processing queue when setting is toggled on/off * 🐞 Bug: Add additional guards for expected value when displaying List field in PDFs (prevents PHP notice if the first row in a list is empty) @@ -21,227 +25,227 @@ * 🐞 Bug: Pass the filtered 'use_value' and 'use_admin_label' arguments when determining if the product table is empty * 🧹 Housekeeping: Move Gravity PDF system status information to the bottom of the report -= 6.12.5.1 = +## 6.12.5.1 * 🧹 Housekeeping: Update version number in readme.txt file -= 6.12.5 = +## 6.12.5 * 🐞 Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ * 🧹 Housekeeping: Update PDF Background Processing queue to be compatible with Gravity Forms 2.9.7+ background processing library update * 🧹 Housekeeping: Fix Background Processing deprecation notice when running Gravity Forms 2.9.7+ -= 6.12.4 = -* Security: Escape variables in PHP Exceptions -* Bug: Improve PDF column support when Gravity Forms includes a spacer -* Bug: Fix display of Website field when it isn't filled in and *Show Empty Fields* is enabled -* Housekeeping: Mark as compatible with WP 6.7 -* Housekeeping: Update PHP dependencies - -= 6.12.3 = -* Bug: Resolve PHP error when a license has not been activated for a Gravity PDF extension -* Bug: Resolve PHP error when all plugin dependencies are not met -* Housekeeping: Open canonical plugin upgrade link in new window - -= 6.12.2 = -* Security: Fix bug that caused the 'Restrict Owner' PDF setting to be ignored when it was enabled -* Housekeeping: Adjust canonical plugin notice -* Housekeeping: Add canonical plugin check on system report -* Housekeeping: Log license check API calls (canonical only) -* Bug: Fix PHP Notices in admin area - -= 6.12.1 = -* Housekeeping: Update translations - -= 6.12.0 = -* Feature: Add basic support for Gravity Forms 2.9 Image Choice and Multiple Choice fields (Gravity PDF Core Booster v2.2 can show the images) -* Feature: Add support for Digital Signature for Gravity Forms plugin (https://wordpress.org/plugins/digital-signature-for-gravity-forms/) -* Housekeeping: Allow approved HTML to be displayed in the PDF for Product and Option field choices -* Housekeeping: Add `gfpdf_form_data_products` filter to allow entry pricing information to be modified for the PDF -* Bug: Fix column ordering issue in Blank Slate, Focus Gravity, and Rubix when the RTL setting is enabled -* Bug: Allow Password and Privileges PDF setting description to be translated - -= 6.11.4 = -* Bug: Allow numbers with decimals when saving number fields in the PDF Settings - -= 6.11.3 = -* Bug: Fix truncated merge tags in HTML attribute when included in PDF setting Rich Text fields - -= 6.11.2 = -* Bug: Resolve race condition by skipping PDF cleanup at the end of form submission process if PDF Background Processing is enabled -* Bug: Fix issue where some Notifications with PDFs attached were not being handled in a background task when PDF Background Processing is enabled - -= 6.11.1 = -* Bug: Only process enabled notifications during form submission when using PDF Background Processing. Notifications are enabled if they are active and have conditional logic that passes. - -= 6.11.0 = -* Housekeeping: Limit pages admin notices are displayed on to reduce notice fatigue -* Housekeeping: Add specific check for the PHP extension `Ctype` when the plugin loads -* Housekeeping: Tweak admin notice text to make error messages more clear -* Housekeeping: Remove downgrade notice to unsupported Gravity PDF v5.0 if minimum system requirements are not met for v6.0 -* Housekeeping: Improve log messages when creating and validating a Signed PDF URL -* Housekeeping: Improve input sanitation for textarea, number, and custom paper size fields when saving the PDF Form Settings -* Housekeeping: Improve PDF Background Processing so its compatible with Gravity Forms native async notification feature -* Housekeeping: Correctly cleanup PDFs after a PDF Background Processing queue runs -* Bug: Enforce a 1pt minimum value for the Default Font Size and Font Size settings -* Bug: Self-heal the PDF signing secret key if it becomes invalid -* Bug: Self-heal the Global PDF Settings if it becomes invalid -* Bug: Prevent the page reloading when selecting a tooltip on PDF settings pages -* Bug: Register language files early so startup errors can be translated - -= 6.10.2 = -* Bug: Hydrate Nested Forms with Gravity Wiz Populate Anything data - -= 6.10.1 = -* Bug: Resolve PHP error when processing shortcode with invalid entry object -* Bug: Adhere to conditional logic and exclude CSS class for Page Break fields -* Bug: In more situations the Gravity PDF settings will be refreshed before the form meta is saved to the database -* Housekeeping: Run temporary directory cleanup routine twice daily and delete files older than 12 hours -* Housekeeping: Add gfpdf_system_status_report_items filter for Gravity PDF System Status report details -* Housekeeping: Update mPDF to latest version -* Housekeeping: Allow supported HTML in field labels when displayed in PDF - -= 6.10.0 = -* Feature: Add native support for the Legal Signature and Legal Consent form fields added by the Legal Signing for Gravity Forms plugin - -= 6.9.1 = -* Security: Disable the Signed URL feature in the [gravitypdf] shortcode when a URL parameter provides the entry ID (e.g. Page Confirmations) -* Bug: Gracefully handle invalid conditional logic rules when adding date entry meta support -* Bug: Display field for entry metadata PDF conditional rule when there are no form fields compatible with conditional logic -* Bug: Ensure the template cache is correctly cleared when PDF Debug Mode is enabled -* Bug: Flush the template cache after installing new templates via the PDF Template Manager -* Bug: Clear template cache when plugin deactivated -* Housekeeping: Small improvement to performance when reading template and font files from disk - -= 6.9.0 = -* Feature: Add new conditional logic options to PDFs eg. Payment Status, Date Created, Starred (props: Gravity Wiz) -* Feature: Add support for Show HTML Fields, Show Empty Fields, Show Section Break Description, and Enable Conditional Logic PDF settings when displaying Gravity Wiz Nested Forms field -* Bug: Fix Form Editor saving problem for Gravity Forms v2.6.* -* Bug: Fix Drag and Drop Column layout issue when the GF Styles Pro plugin is enabled -* Bug: Fix issue sending PDF URLs with Gravity Wiz Google Sheets -* Bug: Improve display of Rich Text Textarea fields by removing top margin on individual paragraphs -* Bug: Resolve compatibility issue that corrupted PDFs when using Weglot -* Housekeeping: Exclude popular WordPress staging environments from site count when activating Gravity PDF licenses -* Housekeeping: Improve Gravity PDF license activation success and error messages -* Security: Improve security of network requests to Gravity PDF licensing server +## 6.12.4 +* 🔒Security: Escape variables in PHP Exceptions +* 🐞 Bug: Improve PDF column support when Gravity Forms includes a spacer +* 🐞 Bug: Fix display of Website field when it isn't filled in and *Show Empty Fields* is enabled +* 🧹 Housekeeping: Mark as compatible with WP 6.7 +* 🧹 Housekeeping: Update PHP dependencies + +## 6.12.3 +* 🐞 Bug: Resolve PHP error when a license has not been activated for a Gravity PDF extension +* 🐞 Bug: Resolve PHP error when all plugin dependencies are not met +* 🧹 Housekeeping: Open canonical plugin upgrade link in new window + +## 6.12.2 +* 🔒Security: Fix bug that caused the 'Restrict Owner' PDF setting to be ignored when it was enabled +* 🧹 Housekeeping: Adjust canonical plugin notice +* 🧹 Housekeeping: Add canonical plugin check on system report +* 🧹 Housekeeping: Log license check API calls (canonical only) +* 🐞 Bug: Fix PHP Notices in admin area + +## 6.12.1 +* 🧹 Housekeeping: Update translations + +## 6.12.0 +* 🎉 Feature: Add basic support for Gravity Forms 2.9 Image Choice and Multiple Choice fields (Gravity PDF Core Booster v2.2 can show the images) +* 🎉 Feature: Add support for Digital Signature for Gravity Forms plugin (https://wordpress.org/plugins/digital-signature-for-gravity-forms/) +* 🧹 Housekeeping: Allow approved HTML to be displayed in the PDF for Product and Option field choices +* 🧹 Housekeeping: Add `gfpdf_form_data_products` filter to allow entry pricing information to be modified for the PDF +* 🐞 Bug: Fix column ordering issue in Blank Slate, Focus Gravity, and Rubix when the RTL setting is enabled +* 🐞 Bug: Allow Password and Privileges PDF setting description to be translated + +## 6.11.4 +* 🐞 Bug: Allow numbers with decimals when saving number fields in the PDF Settings + +## 6.11.3 +* 🐞 Bug: Fix truncated merge tags in HTML attribute when included in PDF setting Rich Text fields + +## 6.11.2 +* 🐞 Bug: Resolve race condition by skipping PDF cleanup at the end of form submission process if PDF Background Processing is enabled +* 🐞 Bug: Fix issue where some Notifications with PDFs attached were not being handled in a background task when PDF Background Processing is enabled + +## 6.11.1 +* 🐞 Bug: Only process enabled notifications during form submission when using PDF Background Processing. Notifications are enabled if they are active and have conditional logic that passes. + +## 6.11.0 +* 🧹 Housekeeping: Limit pages admin notices are displayed on to reduce notice fatigue +* 🧹 Housekeeping: Add specific check for the PHP extension `Ctype` when the plugin loads +* 🧹 Housekeeping: Tweak admin notice text to make error messages more clear +* 🧹 Housekeeping: Remove downgrade notice to unsupported Gravity PDF v5.0 if minimum system requirements are not met for v6.0 +* 🧹 Housekeeping: Improve log messages when creating and validating a Signed PDF URL +* 🧹 Housekeeping: Improve input sanitation for textarea, number, and custom paper size fields when saving the PDF Form Settings +* 🧹 Housekeeping: Improve PDF Background Processing so its compatible with Gravity Forms native async notification feature +* 🧹 Housekeeping: Correctly cleanup PDFs after a PDF Background Processing queue runs +* 🐞 Bug: Enforce a 1pt minimum value for the Default Font Size and Font Size settings +* 🐞 Bug: Self-heal the PDF signing secret key if it becomes invalid +* 🐞 Bug: Self-heal the Global PDF Settings if it becomes invalid +* 🐞 Bug: Prevent the page reloading when selecting a tooltip on PDF settings pages +* 🐞 Bug: Register language files early so startup errors can be translated + +## 6.10.2 +* 🐞 Bug: Hydrate Nested Forms with Gravity Wiz Populate Anything data + +## 6.10.1 +* 🐞 Bug: Resolve PHP error when processing shortcode with invalid entry object +* 🐞 Bug: Adhere to conditional logic and exclude CSS class for Page Break fields +* 🐞 Bug: In more situations the Gravity PDF settings will be refreshed before the form meta is saved to the database +* 🧹 Housekeeping: Run temporary directory cleanup routine twice daily and delete files older than 12 hours +* 🧹 Housekeeping: Add gfpdf_system_status_report_items filter for Gravity PDF System Status report details +* 🧹 Housekeeping: Update mPDF to latest version +* 🧹 Housekeeping: Allow supported HTML in field labels when displayed in PDF + +## 6.10.0 +* 🎉 Feature: Add native support for the Legal Signature and Legal Consent form fields added by the Legal Signing for Gravity Forms plugin + +## 6.9.1 +* 🔒Security: Disable the Signed URL feature in the [gravitypdf] shortcode when a URL parameter provides the entry ID (e.g. Page Confirmations) +* 🐞 Bug: Gracefully handle invalid conditional logic rules when adding date entry meta support +* 🐞 Bug: Display field for entry metadata PDF conditional rule when there are no form fields compatible with conditional logic +* 🐞 Bug: Ensure the template cache is correctly cleared when PDF Debug Mode is enabled +* 🐞 Bug: Flush the template cache after installing new templates via the PDF Template Manager +* 🐞 Bug: Clear template cache when plugin deactivated +* 🧹 Housekeeping: Small improvement to performance when reading template and font files from disk + +## 6.9.0 +* 🎉 Feature: Add new conditional logic options to PDFs eg. Payment Status, Date Created, Starred (props: Gravity Wiz) +* 🎉 Feature: Add support for Show HTML Fields, Show Empty Fields, Show Section Break Description, and Enable Conditional Logic PDF settings when displaying Gravity Wiz Nested Forms field +* 🐞 Bug: Fix Form Editor saving problem for Gravity Forms v2.6.* +* 🐞 Bug: Fix Drag and Drop Column layout issue when the GF Styles Pro plugin is enabled +* 🐞 Bug: Fix issue sending PDF URLs with Gravity Wiz Google Sheets +* 🐞 Bug: Improve display of Rich Text Textarea fields by removing top margin on individual paragraphs +* 🐞 Bug: Resolve compatibility issue that corrupted PDFs when using Weglot +* 🧹 Housekeeping: Exclude popular WordPress staging environments from site count when activating Gravity PDF licenses +* 🧹 Housekeeping: Improve Gravity PDF license activation success and error messages +* 🔒Security: Improve security of network requests to Gravity PDF licensing server * Developer: Add `set_pdf_config( $config )` and `get_pdf_config()` methods to PDF Field classes * Developer: In the PDF field blacklist, check using the original type and not with `$field->get_input_type()` -= 6.8.0 = -* Feature: Add PDF Download metabox to Gravity Flow Inbox for logged-in users with appropriate capability -* Feature: Add AI-generated translations for French, Spanish, Italian, German, Dutch, Russian, and Chinese -* Security: Only show PDF view/download links on entry list and details page if logged-in user has appropriate capability -* Housekeeping: Improve performance on admin pages by caching the list of available templates -* Housekeeping: When permalinks are enabled, generate the PDF URL with/without a trailing slash -* Bug: Remove whitespace from textarea fields in the PDF settings - -= 6.7.4 = -* Bug: Resolve PHP error for specific GravityView / GravityChart combo -* Bug: Render supported HTML in labels/choices for the PDF Pricing table -* Bug: Fix PHP error while viewing a PDF when running an older version of WordPress (< 5.9) and PHP (< 8.0) - -= 6.7.3 = -* Bug: Fix 3rd party conflict when different version of PSR-7 library is loaded - -= 6.7.2 = -* Bug: Resolve fatal error when using Gravity Forms Google Analytics Pagination feature with the PDF URL included in the parameters. -* Housekeeping: Update PDF library to latest version -* Housekeeping: Update help search API details - -= 6.7.1 = -* Bug: Improve dependency conflicts with third party plugins who bundle PSR Log v2 or v3 -* Housekeeping: Use 4xx HTTP Status Codes for non-server related errors when generating PDFs - -= 6.7.0 = -* Feature: Add support for multiple PDFs with the same Filename on a single form -* Feature: Use secure links for File Upload and Post Image fields in Core and Universal PDFs +## 6.8.0 +* 🎉 Feature: Add PDF Download metabox to Gravity Flow Inbox for logged-in users with appropriate capability +* 🎉 Feature: Add AI-generated translations for French, Spanish, Italian, German, Dutch, Russian, and Chinese +* 🔒Security: Only show PDF view/download links on entry list and details page if logged-in user has appropriate capability +* 🧹 Housekeeping: Improve performance on admin pages by caching the list of available templates +* 🧹 Housekeeping: When permalinks are enabled, generate the PDF URL with/without a trailing slash +* 🐞 Bug: Remove whitespace from textarea fields in the PDF settings + +## 6.7.4 +* 🐞 Bug: Resolve PHP error for specific GravityView / GravityChart combo +* 🐞 Bug: Render supported HTML in labels/choices for the PDF Pricing table +* 🐞 Bug: Fix PHP error while viewing a PDF when running an older version of WordPress (< 5.9) and PHP (< 8.0) + +## 6.7.3 +* 🐞 Bug: Fix 3rd party conflict when different version of PSR-7 library is loaded + +## 6.7.2 +* 🐞 Bug: Resolve fatal error when using Gravity Forms Google Analytics Pagination feature with the PDF URL included in the parameters. +* 🧹 Housekeeping: Update PDF library to latest version +* 🧹 Housekeeping: Update help search API details + +## 6.7.1 +* 🐞 Bug: Improve dependency conflicts with third party plugins who bundle PSR Log v2 or v3 +* 🧹 Housekeeping: Use 4xx HTTP Status Codes for non-server related errors when generating PDFs + +## 6.7.0 +* 🎉 Feature: Add support for multiple PDFs with the same Filename on a single form +* 🎉 Feature: Use secure links for File Upload and Post Image fields in Core and Universal PDFs * Dev Feature: Include secure links in $form_data array for File Upload and Post Image fields -* Bug: Fix backwards compatibility error when running a version of Gravity Forms less that 2.6 -* Bug: Allow sanitized HTML in the labels of Radio and Checkbox admin settings -* Bug: Remain editing current PDF if a hard refresh occurs after adding a new PDF to the form +* 🐞 Bug: Fix backwards compatibility error when running a version of Gravity Forms less that 2.6 +* 🐞 Bug: Allow sanitized HTML in the labels of Radio and Checkbox admin settings +* 🐞 Bug: Remain editing current PDF if a hard refresh occurs after adding a new PDF to the form -= 6.6.1 = -* Bug: Prevent PDF settings being override if multiple browser windows are open, and both are updating different settings of the same form concurrently -* Bug: Gracefully handle license key deactivation if an error occurs -* Housekeeping: Bump WordPress Tested Up To v6.3 +## 6.6.1 +* 🐞 Bug: Prevent PDF settings being override if multiple browser windows are open, and both are updating different settings of the same form concurrently +* 🐞 Bug: Gracefully handle license key deactivation if an error occurs +* 🧹 Housekeeping: Bump WordPress Tested Up To v6.3 -= 6.6.0 = -* Feature: Improve display of ungrouped product fields in Core and Universal templates +## 6.6.0 +* 🎉 Feature: Improve display of ungrouped product fields in Core and Universal templates * Dev Feature: Add `gfpdf_hide_consent_field_if_empty` filter, to remove the Consent field from Core and Universal templates if a user hasn't consented. -* Bug: Remove Section Break description container is there is not a description included -* Bug: Fix potential PHP error when using GravityView and PDF for GravityView -* Housekeeping: Update PHP and JS dependencies - -= 6.5.5 = -* Bug: Ensure PDF conditional logic is run through the correct sanitization function upon save -* Bug: Ensure Gravity Wiz Populate Anything live merge tags are correctly processed in the $form_data array -* Bug: Fix Monolog error when running PHP8.1 - -= 6.5.4 = -* Bug: Fix duplicate notifications when using PDF Background Processing while looping over GFAPI::submit_form() - -= 6.5.3 = -* Bug: Fix HTTP(S) image/stylesheet loading problem in PDFs for SiteGround customers - -= 6.5.2 = -* Bug: Fix PHP error when a non-string is passed to the Kses sanitizing class -* Bug: Resolve memory problem generating Core PDFs if an HTML element contains more than 10+ classes (field CSS Classes are now truncated to 8 user-defined classes) -* Bug: Fix Slim Image Cropper display problems in Core PDFs -* Housekeeping: Update mPDF to the latest version -* Housekeeping: Update QueryPath to the latest version - -= 6.5.1 = -* Housekeeping: Update mPDF to the latest version -* Bug: Resolve custom font installation issue for some .ttf files - -= 6.5.0 = -* Housekeeping: Update Global Extension Settings UI to be Gravity Forms 2.5 compatible -* Housekeeping: Adjust how admin Notices are handled on Gravity PDF pages -* Housekeeping: Update JavaScript package bundle +* 🐞 Bug: Remove Section Break description container is there is not a description included +* 🐞 Bug: Fix potential PHP error when using GravityView and PDF for GravityView +* 🧹 Housekeeping: Update PHP and JS dependencies + +## 6.5.5 +* 🐞 Bug: Ensure PDF conditional logic is run through the correct sanitization function upon save +* 🐞 Bug: Ensure Gravity Wiz Populate Anything live merge tags are correctly processed in the $form_data array +* 🐞 Bug: Fix Monolog error when running PHP8.1 + +## 6.5.4 +* 🐞 Bug: Fix duplicate notifications when using PDF Background Processing while looping over GFAPI::submit_form() + +## 6.5.3 +* 🐞 Bug: Fix HTTP(S) image/stylesheet loading problem in PDFs for SiteGround customers + +## 6.5.2 +* 🐞 Bug: Fix PHP error when a non-string is passed to the Kses sanitizing class +* 🐞 Bug: Resolve memory problem generating Core PDFs if an HTML element contains more than 10+ classes (field CSS Classes are now truncated to 8 user-defined classes) +* 🐞 Bug: Fix Slim Image Cropper display problems in Core PDFs +* 🧹 Housekeeping: Update mPDF to the latest version +* 🧹 Housekeeping: Update QueryPath to the latest version + +## 6.5.1 +* 🧹 Housekeeping: Update mPDF to the latest version +* 🐞 Bug: Resolve custom font installation issue for some .ttf files + +## 6.5.0 +* 🧹 Housekeeping: Update Global Extension Settings UI to be Gravity Forms 2.5 compatible +* 🧹 Housekeeping: Adjust how admin Notices are handled on Gravity PDF pages +* 🧹 Housekeeping: Update JavaScript package bundle * Dev: Validate template filename when uploading via the PDF Template Manager (A-Za-z0-9_-) * Dev: Add filterable CSS class names to the PDF links in the admin area * Dev: Pass context to the `gfpdf_core_template` hook * Dev: Add `gfpdf_core_template_{form_id}` hook to target specific forms -* Bug: Fix undefined `rtl` notice in Core PDF templates -* Bug: Fix PHP8.1 notice when saving PDF settings - -= 6.4.7 = -* Bug: Resolve blank PDF problem when a large HTML block is processed by mPDF -* Bug: Resolve QueryPath deprecation notice about passing null to trim() -* Housekeeping: Update mPDF and URL Signer library to latest version - -= 6.4.6 = -* Bug: Adjust Nested Forms and Repeater field PDF markup to ensure a unique ID attribute for any HTML tags -* Bug: Prevent duplicate grid css classes being added to Nested Forms HTML tags -* Bug: Process merge tags in Background Image PDF setting before late escaping in the PDF HTML markup -* Housekeeping: Remove initialized message from Gravity PDF logs - -= 6.4.5 = -* Bug: Fix image display problem if filename had a space in it -* Bug: Fix Background Image display problem on Windows OS +* 🐞 Bug: Fix undefined `rtl` notice in Core PDF templates +* 🐞 Bug: Fix PHP8.1 notice when saving PDF settings + +## 6.4.7 +* 🐞 Bug: Resolve blank PDF problem when a large HTML block is processed by mPDF +* 🐞 Bug: Resolve QueryPath deprecation notice about passing null to trim() +* 🧹 Housekeeping: Update mPDF and URL Signer library to latest version + +## 6.4.6 +* 🐞 Bug: Adjust Nested Forms and Repeater field PDF markup to ensure a unique ID attribute for any HTML tags +* 🐞 Bug: Prevent duplicate grid css classes being added to Nested Forms HTML tags +* 🐞 Bug: Process merge tags in Background Image PDF setting before late escaping in the PDF HTML markup +* 🧹 Housekeeping: Remove initialized message from Gravity PDF logs + +## 6.4.5 +* 🐞 Bug: Fix image display problem if filename had a space in it +* 🐞 Bug: Fix Background Image display problem on Windows OS * Developer: Added HTML field content to Repeater Field $form_data array -= 6.4.4 = -* Bug: Resolve HTML encoding issue in PDF when displaying Coupon field in Gravity Wiz eCommerce Perk's Product Table -* Bug: Remove coupon line item in PDF when Gravity Wiz eCommerce Perk's Product Table in use -* Bug: Resolve duplicate product table displayed in a legacy v3 template -* Bug: Resolve PHP notice when displaying product table in legacy v3 template -* Bug: Resolve PHP notice when displaying Section Break field in legacy v3 template - -= 6.4.3 = -* Bug: Open PDF "view" link in a new browser tab on Entry List page -* Bug: Only hide Select field in Core/Universal templates if the saved value is an empty string, not a falsey value -* Bug: Prevent PHP notice when displaying Repeater field in PDFs with a Number sub-field -* Bug: Prevent HTML attribute content from having their entities decoded if they were previously encoded -* Bug: Fix Core/Universal template image display issues on servers running Windows - -= 6.4.2 = -* Bug: Allow `data` protocol so Base 64-encoded images can be correctly displayed in Core/Universal templates -* Bug: Fix Core Font Installer problem when running older versions of WordPress (5.3 to 5.8) -* Bug: Fix fatal return type mismatch error if `safe_style_css` filter has been implemented incorrectly - -= 6.4.1 = -* Bug: Fix PDF display issues with the Survey, Poll, Post Category, and Post Custom Fields - -= 6.4.0 = +## 6.4.4 +* 🐞 Bug: Resolve HTML encoding issue in PDF when displaying Coupon field in Gravity Wiz eCommerce Perk's Product Table +* 🐞 Bug: Remove coupon line item in PDF when Gravity Wiz eCommerce Perk's Product Table in use +* 🐞 Bug: Resolve duplicate product table displayed in a legacy v3 template +* 🐞 Bug: Resolve PHP notice when displaying product table in legacy v3 template +* 🐞 Bug: Resolve PHP notice when displaying Section Break field in legacy v3 template + +## 6.4.3 +* 🐞 Bug: Open PDF "view" link in a new browser tab on Entry List page +* 🐞 Bug: Only hide Select field in Core/Universal templates if the saved value is an empty string, not a falsey value +* 🐞 Bug: Prevent PHP notice when displaying Repeater field in PDFs with a Number sub-field +* 🐞 Bug: Prevent HTML attribute content from having their entities decoded if they were previously encoded +* 🐞 Bug: Fix Core/Universal template image display issues on servers running Windows + +## 6.4.2 +* 🐞 Bug: Allow `data` protocol so Base 64-encoded images can be correctly displayed in Core/Universal templates +* 🐞 Bug: Fix Core Font Installer problem when running older versions of WordPress (5.3 to 5.8) +* 🐞 Bug: Fix fatal return type mismatch error if `safe_style_css` filter has been implemented incorrectly + +## 6.4.1 +* 🐞 Bug: Fix PDF display issues with the Survey, Poll, Post Category, and Post Custom Fields + +## 6.4.0 * Security (Hardening): Move from early escaping to late escaping variables on output * Security (Hardening): Add additional validation checks to the Core Font installer * Security (Hardening): Escape text returned from WordPress l10n functions @@ -258,68 +262,68 @@ * Developer: Added `\GFPDF\Statics\Kses::output($html)` and `\GFPDF\Statics\Kses::parse($html)` methods for use with escaping/sanitizing HTML in PDFs (as an alternative to wp_kses_post()). * Performance: Register JavaScript in the footer on Gravity PDF admin pages * Privacy: Added "Get more info" link in the Core Font Installer instructions, and disclaimer to plugin's README.txt installation section -* Bug: Fix issue passing PDF URL to Gravity Forms Mailchimp add-on -* Bug: Allow hyphen in custom font key when updating or deleting to remain backwards compatible -* Bug: Fix PHP8.1 type conversion warning in the template cache when transient's are flushed -* Bug: Remove empty repeater sections from Core PDFs when not filled in by the user +* 🐞 Bug: Fix issue passing PDF URL to Gravity Forms Mailchimp add-on +* 🐞 Bug: Allow hyphen in custom font key when updating or deleting to remain backwards compatible +* 🐞 Bug: Fix PHP8.1 type conversion warning in the template cache when transient's are flushed +* 🐞 Bug: Remove empty repeater sections from Core PDFs when not filled in by the user -= 6.3.1 = -* Security: Prevent potential XSS attack by escaping URL returned from add_query_args() on the PDF List or PDF Form Settings pages +## 6.3.1 +* 🔒Security: Prevent potential XSS attack by escaping URL returned from add_query_args() on the PDF List or PDF Form Settings pages * Developer: Apply `gfpdf_current_form_object` filter added in 6.3.0 to the form object in Helper_Abstract_Fields.php using the $type `helper_abstract_fields`. -* Bug: Correctly display the file path in the logs when cleaning up PDFs from disk or flushing the mPDF cache +* 🐞 Bug: Correctly display the file path in the logs when cleaning up PDFs from disk or flushing the mPDF cache * Performance: reduce I/O operations when flushing the mPDF cache by excluding the top-level directory -= 6.3.0 = -* Feature: Support for mapping PDF URLs to your favorite services using Gravity Forms feeds. This includes (but is not limited to): PayPal, MailChimp, HubSpot, Stripe, Square, ActiveCampaign, Agile CRM, Capsule, CleverReach, Constant Contact, EmailOctopus, Zoho CRM -* Feature: Support for the Zapier add-on: PDF URLs can now be passed to your zaps -* Feature: Add [gravitypdf] shortcode rendering support to Gravity Wiz's Entry Block perk -* Housekeeping: Change "document" icon used for settings menus to the "Gravity PDF" icon -* Housekeeping: duplicating PDFs on a form will now have the correct alternating background color in the table -* Housekeeping: Process the [gravitypdf] shortcode when merge tags get processed so that it can be used where ever merge tags are supported +## 6.3.0 +* 🎉 Feature: Support for mapping PDF URLs to your favorite services using Gravity Forms feeds. This includes (but is not limited to): PayPal, MailChimp, HubSpot, Stripe, Square, ActiveCampaign, Agile CRM, Capsule, CleverReach, Constant Contact, EmailOctopus, Zoho CRM +* 🎉 Feature: Support for the Zapier add-on: PDF URLs can now be passed to your zaps +* 🎉 Feature: Add [gravitypdf] shortcode rendering support to Gravity Wiz's Entry Block perk +* 🧹 Housekeeping: Change "document" icon used for settings menus to the "Gravity PDF" icon +* 🧹 Housekeeping: duplicating PDFs on a form will now have the correct alternating background color in the table +* 🧹 Housekeeping: Process the [gravitypdf] shortcode when merge tags get processed so that it can be used where ever merge tags are supported * Developer: Add new `gfpdf_current_form_object` filter to manipulate the $form array when processing PDFs -* Bug: Fix a race condition when using Background Processing that could see the PDF deleted before being attached to notifications -* Bug: Do not strip the backslash character when used in PDF settings - -= 6.2.1 = -* Bug: Always generate a new PDF when using the GPDFAPI::create_pdf() method -* Bug: Fix fatal error during PDF generation when using the `gform_address_display_format` filter - -= 6.2.0 = -* Feature: Add support for Gravity Forms 2.6 (see Housekeeping below) -* Housekeeping: Add alternate background color on PDF List page -* Housekeeping: Add styles/support for new merge tag selector -* Housekeeping: Add styles for Copy to Clipboard shortcode button on PDF List page -* Housekeeping: Update help search API to query v6 documentation -* Bug: Fix error message display issue on Form PDF add/edit page -* Bug: Fix missing styles on multi-PDF view/download menu on Entry List page - -= 6.1.1 = -* Bug: Allow number field to show a thousand separator by using the 'gform_include_thousands_sep_pre_format_number' filter. -* Bug: Fix PHP Notice when displaying Repeater field caused by processing field's not present in `$form_data['field']` array key -* Housekeeping: Add logging to file/directory cleanup method -* Housekeeping: Add additional checks and logging when processing background tasks - -= 6.1.0 = -* Feature: Add Copy to Clipboard feature for PDF Shortcode on the PDF List page -* Bug: Fix empty check on the Radio field so a zero (0) value is not considered empty - -= 6.0.3 = -* Bug: Reduce the Focus Gravity template column widths by a fraction to prevent edge-case display issues (props Hiwire Creative) -* Bug: Fix Help page results text encoding problems -* Bug: Prevent multiple font files being uploaded to a single dropzone -* Bug: When checking if a Radio/Select field is empty in the PDF context, only look at the value property. - -= 6.0.2 = -* Bug: Fix up 404 link for Outdated Templates in System Status -* Bug: Revert vendor aliasing for mPDF and querypath (back to the original namespace) as it caused more problems than is solved. Developers: see https://docs.gravitypdf.com/v6/users/v5-to-v6-migration#changed-namespace-for-composer-packages - -= 6.0.1 = -* Bug: When displaying the minimum Gravity Forms version not met error, remove `beta-1` as the minimum to prevent confusion. - -= 6.0.0 = +* 🐞 Bug: Fix a race condition when using Background Processing that could see the PDF deleted before being attached to notifications +* 🐞 Bug: Do not strip the backslash character when used in PDF settings + +## 6.2.1 +* 🐞 Bug: Always generate a new PDF when using the GPDFAPI::create_pdf() method +* 🐞 Bug: Fix fatal error during PDF generation when using the `gform_address_display_format` filter + +## 6.2.0 +* 🎉 Feature: Add support for Gravity Forms 2.6 (see Housekeeping below) +* 🧹 Housekeeping: Add alternate background color on PDF List page +* 🧹 Housekeeping: Add styles/support for new merge tag selector +* 🧹 Housekeeping: Add styles for Copy to Clipboard shortcode button on PDF List page +* 🧹 Housekeeping: Update help search API to query v6 documentation +* 🐞 Bug: Fix error message display issue on Form PDF add/edit page +* 🐞 Bug: Fix missing styles on multi-PDF view/download menu on Entry List page + +## 6.1.1 +* 🐞 Bug: Allow number field to show a thousand separator by using the 'gform_include_thousands_sep_pre_format_number' filter. +* 🐞 Bug: Fix PHP Notice when displaying Repeater field caused by processing field's not present in `$form_data['field']` array key +* 🧹 Housekeeping: Add logging to file/directory cleanup method +* 🧹 Housekeeping: Add additional checks and logging when processing background tasks + +## 6.1.0 +* 🎉 Feature: Add Copy to Clipboard feature for PDF Shortcode on the PDF List page +* 🐞 Bug: Fix empty check on the Radio field so a zero (0) value is not considered empty + +## 6.0.3 +* 🐞 Bug: Reduce the Focus Gravity template column widths by a fraction to prevent edge-case display issues (props Hiwire Creative) +* 🐞 Bug: Fix Help page results text encoding problems +* 🐞 Bug: Prevent multiple font files being uploaded to a single dropzone +* 🐞 Bug: When checking if a Radio/Select field is empty in the PDF context, only look at the value property. + +## 6.0.2 +* 🐞 Bug: Fix up 404 link for Outdated Templates in System Status +* 🐞 Bug: Revert vendor aliasing for mPDF and querypath (back to the original namespace) as it caused more problems than is solved. Developers: see https://docs.gravitypdf.com/v6/users/v5-to-v6-migration#changed-namespace-for-composer-packages + +## 6.0.1 +* 🐞 Bug: When displaying the minimum Gravity Forms version not met error, remove `beta-1` as the minimum to prevent confusion. + +## 6.0.0 This major release is designed specifically for Gravity Forms 2.5+ and includes breaking pages that may affect you. You are strongly encouraged to [review the upgrade guide before attempting to update to v6](https://docs.gravitypdf.com/v6/users/v5-to-v6-migration). -= BREAKING CHANGES = +## ⚠️BREAKING CHANGES * New minimum requirements PHP7.3+, WordPress 5.3+, Gravity Forms 2.5+ * Removed Gravity PDF v3 template stylesheet (swap legacy PDF template to Focus Gravity template) * Removed Gravity PDF v3 to v4 migration code (upgrade to v4/v5 before attempting v6 upgrade) @@ -344,7 +348,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * (Dev) Updated field description markup to use DIVs instead of SPANs. Matches Gravity Forms RC1 * (Dev) Deprecate these methods from `\GFPDF\Model\Model_Install`: `uninstall_plugin`, `remove_plugin_options`, `remove_plugin_form_settings`, `remove_folder_structure`, `deactivate_plugin`. All moved to `Model_Uninstall`. -= NEW FEATURES = +## 🎉 NEW FEATURES * Brand new admin user interface (UI) to seamlessly match the Gravity Forms (GF) 2.5 UI. * Added support for new GF columns feature in Core PDFs * Add PDF column support for Gravity Perks Nested Forms @@ -362,7 +366,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Include Add/Update PDF button below each section on PDF creation page to make it easy to save * Improve RTL support on admin pages -= UX IMPROVEMENTS = +## 🎉 UX IMPROVEMENTS * Remove the Always Save PDF setting from the UI. * Switch all Radio PDF settings to new Toggle setting * Switch all Multiselect PDF settings to Checkbox field (better accessibility) @@ -376,7 +380,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Remove WP Dialog prompts in UI for greater accessibility * Move Gravity PDF uninstaller from Tools tab to Gravity Forms Uninstall settings page -= BUG FIXES = +## 🐛 BUG FIXES * Ignore `content-type` header API response when running the Core Font installer * Make all `GFPDFAPI` API class error responses translatable * Fix PHP8 notice @@ -386,7 +390,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Fix border display issue in Core Product table * Show error message in Template Manager when maximum file size limit is reached -= DEVELOPER IMPROVEMENTS = +## 🧑‍💻 DEVELOPER IMPROVEMENTS * Rewritten all CSS in SASS * Add `GPDFAPI::get_entry_pdfs( $entry_id )` method to API. Acts like `GPDFAPI::get_form_pdfs( $form_id )` but filters out any PDFs that don't pass conditional logic checks for the current entry. * Added `Helper_Abstract_Config_Settings` class which template config files can extend to automatically have the current PDF settings injected into the class. @@ -397,89 +401,88 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Add better error log messages for PDF Merge tag processing * Pass additional information to the `gfpdf_field_container_class` filter -= 5.4.0 = -* Feature: Prevent update to 6.0 if minimum requirements are not met (including when automatic updates enabled) -* Feature: Show/allow any new updates for 5.x if minimum requirements are not met for 6.0 - -= 5.3.4 = -* Security: Resolve XSS issue on PDF List page -* Security: Resolve authenticated arbitrary PHP file Deletion when using the PDF Template Manager (by default, this affects Administrator accounts only) -* Housekeeping: Add gfpdf_container_class_map filter -* Housekeeping: Update Monolog to v1.26 -* Housekeeping: Fix PHP8 deprecation notices -* Housekeeping: Remove jQuery deprecation notices -* Housekeeping: Downgrade error to a notice when a not-yet supported field is being processed by the PDF -* Housekeeping: Bump WordPress Tested To value to 5.7 -* Bug: Fix Media Library inserter on PDF pages when Gravity Forms No Conflict Mode enabled -* Bug: Fix PHP fatal error when logging is enable and the log file cannot be written to -* Bug: Fix double spinner randomly showing up when installing and selecting a new PDF template - -= 5.3.3 = -* Bug: Fix PHP notice when no valid form or entry passed when processing merge tags -* Bug: Make PDF generation background processing task unrecoverable so rest of the queue isn't executed -* Bug: always parse Core Font payload as JSON -* Bug: fix a PHP 8 notice (note: the plugin is not guaranteed to be 100% PHP 8-compatible at this time) -* Housekeeping: adjust log level to 'notice' for optional template configuration file not found -* Housekeeping: replace most deprecated jQuery code with new recommendations -* Housekeeping: update EDD licensing class to v1.8 for premium add-ons -* Housekeeping: update composer-managed dependencies -* Housekeeping: Make API error messages translatable - -= 5.3.2 = -* Bug: Fix Media Manager so it shows all file types on Gravity PDF pages -* Bug: Fix Security PDF settings JS toggle when using translated text +## 5.4.0 +* 🎉 Feature: Prevent update to 6.0 if minimum requirements are not met (including when automatic updates enabled) +* 🎉 Feature: Show/allow any new updates for 5.x if minimum requirements are not met for 6.0 + +## 5.3.4 +* 🔒Security: Resolve XSS issue on PDF List page +* 🔒Security: Resolve authenticated arbitrary PHP file Deletion when using the PDF Template Manager (by default, this affects Administrator accounts only) +* 🧹 Housekeeping: Add gfpdf_container_class_map filter +* 🧹 Housekeeping: Update Monolog to v1.26 +* 🧹 Housekeeping: Fix PHP8 deprecation notices +* 🧹 Housekeeping: Remove jQuery deprecation notices +* 🧹 Housekeeping: Downgrade error to a notice when a not-yet supported field is being processed by the PDF +* 🧹 Housekeeping: Bump WordPress Tested To value to 5.7 +* 🐞 Bug: Fix Media Library inserter on PDF pages when Gravity Forms No Conflict Mode enabled +* 🐞 Bug: Fix PHP fatal error when logging is enable and the log file cannot be written to +* 🐞 Bug: Fix double spinner randomly showing up when installing and selecting a new PDF template + +## 5.3.3 +* 🐞 Bug: Fix PHP notice when no valid form or entry passed when processing merge tags +* 🐞 Bug: Make PDF generation background processing task unrecoverable so rest of the queue isn't executed +* 🐞 Bug: always parse Core Font payload as JSON +* 🐞 Bug: fix a PHP 8 notice (note: the plugin is not guaranteed to be 100% PHP 8-compatible at this time) +* 🧹 Housekeeping: adjust log level to 'notice' for optional template configuration file not found +* 🧹 Housekeeping: replace most deprecated jQuery code with new recommendations +* 🧹 Housekeeping: update EDD licensing class to v1.8 for premium add-ons +* 🧹 Housekeeping: update composer-managed dependencies +* 🧹 Housekeeping: Make API error messages translatable + +## 5.3.2 +* 🐞 Bug: Fix Media Manager so it shows all file types on Gravity PDF pages +* 🐞 Bug: Fix Security PDF settings JS toggle when using translated text * Dev: Update EDD software licensing class to 1.7.1 -= 5.3.1 = +## 5.3.1 * Bug/Dev: Prevent composer package `Monolog` version conflict with other plugins by moving to namespace `GFPDF\Vendor\Monolog` -= 5.3.0 = -* Feature: Add support for Gravity Perk Populate Anything plugin -* Feature: Add support for Gravity Plus Multi-Currency Selector plugin -* Feature: Add `allow_url_fopen` PHP setting check to Gravity Forms and Gravity PDF System Statuses +## 5.3.0 +* 🎉 Feature: Add support for Gravity Perk Populate Anything plugin +* 🎉 Feature: Add support for Gravity Plus Multi-Currency Selector plugin +* 🎉 Feature: Add `allow_url_fopen` PHP setting check to Gravity Forms and Gravity PDF System Statuses -* Bug: Decode special characters for processed mergetags used in PDF Password or Master Password settings -* Bug: Fix issue uploading TTF files via the Font Manager -* Bug: Fix PHP Notices when processing [gravitypdf] shortcode under specific conditions -* Bug: Fix validation issue with signed PDF URLs on sub-directory multisites -* Bug: Fix problem displaying PDF Template Upload dropzone for Super Admins on multsite installations +* 🐞 Bug: Decode special characters for processed mergetags used in PDF Password or Master Password settings +* 🐞 Bug: Fix issue uploading TTF files via the Font Manager +* 🐞 Bug: Fix PHP Notices when processing [gravitypdf] shortcode under specific conditions +* 🐞 Bug: Fix validation issue with signed PDF URLs on sub-directory multisites +* 🐞 Bug: Fix problem displaying PDF Template Upload dropzone for Super Admins on multsite installations * Dev: Add `gfpdf_pre_uninstall_plugin` and `gfpdf_post_uninstall_plugin` actions * Dev: Add `gfpdf_field_container_class` filter to swap out the Helper_Field_Container class with your own * Dev: Add `gfpdf_unfiltered_template_list`, `gfpdf_fallback_template_path_by_id`, `gfpdf_template_config_paths`, and `gfpdf_template_image_paths` filters * Dev: Rewrite Monolog timezone logic to support both v1 and v2, which places nice with other plugins that use this library - -= 5.2.2 = -* Bug: Add additional error handling to Background Processing when a form / entry is deleted -* Bug: Adjust logging code to adhere to PSR-3 (forward compatibility with Monolog v2) -* Bug: Add fixed width to first column in Chained Select output for Core / Universal PDFs -* Bug: Add nofollow attribute to PDF Download Link to prevent attempted indexing -* Bug: Disable UI for PDF Template Installer when user doesn't have appropriate capabilities -* Bug: Fix font upload issues to Media Library +## 5.2.2 +* 🐞 Bug: Add additional error handling to Background Processing when a form / entry is deleted +* 🐞 Bug: Adjust logging code to adhere to PSR-3 (forward compatibility with Monolog v2) +* 🐞 Bug: Add fixed width to first column in Chained Select output for Core / Universal PDFs +* 🐞 Bug: Add nofollow attribute to PDF Download Link to prevent attempted indexing +* 🐞 Bug: Disable UI for PDF Template Installer when user doesn't have appropriate capabilities +* 🐞 Bug: Fix font upload issues to Media Library * Dev: Add additional logging when license activation failure occurs * Dev: Update dependencies: Monolog 1.25.1 -> 1.25.3, Mpdf 8.0.3 -> 8.0.5 -= 5.2.1 = -* Bug: Fix PHP Notice when using Quiz Add-on without a correct answer selected -* Bug: Fix image display issues in PDF when URL has a redirect -* Bug: Allow HTML in Consent field label (those supported in wp_kses_post) - -= 5.2.0 = -* Bug: Prevent Fatal Error on PHP7.2 when using Category field type set to Checkboxes in Core PDFs -* Bug: Resolve conflict with SiteGround HTML Minifier when generating PDFs in browser [GH#897] [GH#951] -* Bug: Strip PDF page breaks from Header and Footer Rich Text Editor fields [GH#898] -* Bug: Conditionally register WP rewrite tags to prevent third party plugin conflicts [GH#892] -* Bug: Move noindex,nofollow header to beginning of PDF endpoint processing to prevent PDF errors getting indexed [GH#956] -* Bug: Prevent `gfpdf_post_pdf_save` action getting triggered twice during form submission [GH#948] -* Bug: Resolve issue with Global PDF Settings not getting updated on the initial save -* Bug: Resolve issue displaying Category field in PDF when a category has a commas in the label/value [GH#966] -* Bug: Add field fallback support in Core PDFs for third-party custom fields that contain subfields -* Bug: Resolve JS error when using Redirect Confirmation with [gravitypdf] shortcode and submitting an AJAX-enabled form [GH#989] -* Bug: Adhere to the Description placement setting when displaying the Consent Field in Core PDFs [GH#998] -* Bug: Resolve issue setting the PDF image DPI -* Bug: Fix display issue on Gravity PDF Getting Started Page [GH#1000] +## 5.2.1 +* 🐞 Bug: Fix PHP Notice when using Quiz Add-on without a correct answer selected +* 🐞 Bug: Fix image display issues in PDF when URL has a redirect +* 🐞 Bug: Allow HTML in Consent field label (those supported in wp_kses_post) + +## 5.2.0 +* 🐞 Bug: Prevent Fatal Error on PHP7.2 when using Category field type set to Checkboxes in Core PDFs +* 🐞 Bug: Resolve conflict with SiteGround HTML Minifier when generating PDFs in browser [GH#897] [GH#951] +* 🐞 Bug: Strip PDF page breaks from Header and Footer Rich Text Editor fields [GH#898] +* 🐞 Bug: Conditionally register WP rewrite tags to prevent third party plugin conflicts [GH#892] +* 🐞 Bug: Move noindex,nofollow header to beginning of PDF endpoint processing to prevent PDF errors getting indexed [GH#956] +* 🐞 Bug: Prevent `gfpdf_post_pdf_save` action getting triggered twice during form submission [GH#948] +* 🐞 Bug: Resolve issue with Global PDF Settings not getting updated on the initial save +* 🐞 Bug: Resolve issue displaying Category field in PDF when a category has a commas in the label/value [GH#966] +* 🐞 Bug: Add field fallback support in Core PDFs for third-party custom fields that contain subfields +* 🐞 Bug: Resolve JS error when using Redirect Confirmation with [gravitypdf] shortcode and submitting an AJAX-enabled form [GH#989] +* 🐞 Bug: Adhere to the Description placement setting when displaying the Consent Field in Core PDFs [GH#998] +* 🐞 Bug: Resolve issue setting the PDF image DPI +* 🐞 Bug: Fix display issue on Gravity PDF Getting Started Page [GH#1000] * Dev: Add End to End Tests for greater quality control [GH#949] * Dev: Rewrite Help Search in ReactJS [GH#882] @@ -508,47 +511,47 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev: Add better error logging for Background Processing tasks * Dev: Refractor Core Font ReactJS code [GH#981] -= 5.1.5 = -* Housekeeping: Add filter `gfpdf_mpdf_post_init_class` to interact with mPDF right after the initial Gravity PDF object setup [GH#890] -* Bug: Fix URL rewrite issue with plugins that use `action` GET super global [GH#892] -* Bug: Fix conflict with the SG Optimizer plugin's Minify HTML option [GH#897] -* Bug: Strip Page Breaks from Headers and Footers to prevent Fatal PHP Error [GH#898] - -= 5.1.4 = -* Housekeeping: Upgrade Mpdf from 7.1.8 to 7.1.9 https://github.com/mpdf/mpdf/compare/v7.1.8...v7.1.9 -* Bug: Ensure correct permissions are set on mPDF tmp directory [GH#874] -* Bug: Fix up mPDF tmp directory writable warning [GH#873] -* Bug: Add missing core mPDF v7 fonts to Font Selector [GH#877] -* Bug: Fix up v3 legacy template notices [GH#875] -* Bug: Fix up v3 legacy endpoint entry error [GH#876] - -= 5.1.3 = -* Housekeeping: Upgrade Mpdf from 7.1.7 to 7.1.8 https://github.com/mpdf/mpdf/compare/v7.1.7...v7.1.8 -* Housekeeping: Revert Mpdf tmp path back to Gravity PDF tmp directory (introduced 5.0.2) as Mpdf 7.1.8 resolves font cache issue -* Bug: Use WordPress' ca-bundle.crt when making cURL requests with Mpdf to prevent HTTPS issues [GH#861] -* Bug: Add `exclude` class support to Nested Form fields [GH#862] - -= 5.1.2 = +## 5.1.5 +* 🧹 Housekeeping: Add filter `gfpdf_mpdf_post_init_class` to interact with mPDF right after the initial Gravity PDF object setup [GH#890] +* 🐞 Bug: Fix URL rewrite issue with plugins that use `action` GET super global [GH#892] +* 🐞 Bug: Fix conflict with the SG Optimizer plugin's Minify HTML option [GH#897] +* 🐞 Bug: Strip Page Breaks from Headers and Footers to prevent Fatal PHP Error [GH#898] + +## 5.1.4 +* 🧹 Housekeeping: Upgrade Mpdf from 7.1.8 to 7.1.9 https://github.com/mpdf/mpdf/compare/v7.1.8...v7.1.9 +* 🐞 Bug: Ensure correct permissions are set on mPDF tmp directory [GH#874] +* 🐞 Bug: Fix up mPDF tmp directory writable warning [GH#873] +* 🐞 Bug: Add missing core mPDF v7 fonts to Font Selector [GH#877] +* 🐞 Bug: Fix up v3 legacy template notices [GH#875] +* 🐞 Bug: Fix up v3 legacy endpoint entry error [GH#876] + +## 5.1.3 +* 🧹 Housekeeping: Upgrade Mpdf from 7.1.7 to 7.1.8 https://github.com/mpdf/mpdf/compare/v7.1.7...v7.1.8 +* 🧹 Housekeeping: Revert Mpdf tmp path back to Gravity PDF tmp directory (introduced 5.0.2) as Mpdf 7.1.8 resolves font cache issue +* 🐞 Bug: Use WordPress' ca-bundle.crt when making cURL requests with Mpdf to prevent HTTPS issues [GH#861] +* 🐞 Bug: Add `exclude` class support to Nested Form fields [GH#862] + +## 5.1.2 * Upgrade Mpdf from 7.1.6 to 7.1.7 https://github.com/mpdf/mpdf/compare/v7.1.6...v7.1.7 * Allow Debug messages to be logged in Gravity PDF log file * Add log file message when the PDF Temporary Directory check fails * Ensure backwards compatibility with legacy templates who access Mpdf properties directly * When sending notifications, ensure PDF settings go through same filters as when viewing / downloading PDFs -= 5.1.1 = -* Bug: Process Merge Tags when displaying Nested Forms in Core / Universal PDFs [GH#849] -* Bug: Don't strip ``, ``, ``, and `page-break-*` CSS when displaying Rich Text Editor fields in PDF [GH#852] -* Bug: Try convert the Background Image URL to a Path for better relability [GH#853] -* Bug: Fix Rich Text Editor display issue in PDF Settings when Elementor plugin enabled [GH#854] -* Bug: Don't strip `` tag when direct parent of `` in the Core/Universal PDFs Header and Footer Rich Text Editor [GH#855] - -= 5.1.0 = -* Feature: Add support for Gravity Forms Repeater Fields in PDFs [GH#833] -* Feature: Add support for Gravity Wiz's Nested Forms Perk in PDFs -* Feature: Add support for Gravity Forms Consent Field in PDFs [GH#832] -* Feature: Add signed-URL authentication to [gravitypdf] shortcode using new "signed" and "expires" attributes [GH#841] -* Feature: Add new "raw" attribute to the [gravitypdf] shortcode which will display the raw PDF URL [GH#841] -* Feature: Added "Debug Mode" Global PDF Setting which replaces "Shortcode Debug Message", WP_DEBUG settings, and caches the template headers [GH#823] +## 5.1.1 +* 🐞 Bug: Process Merge Tags when displaying Nested Forms in Core / Universal PDFs [GH#849] +* 🐞 Bug: Don't strip ``, ``, `
`, and `page-break-*` CSS when displaying Rich Text Editor fields in PDF [GH#852] +* 🐞 Bug: Try convert the Background Image URL to a Path for better relability [GH#853] +* 🐞 Bug: Fix Rich Text Editor display issue in PDF Settings when Elementor plugin enabled [GH#854] +* 🐞 Bug: Don't strip `` tag when direct parent of `` in the Core/Universal PDFs Header and Footer Rich Text Editor [GH#855] + +## 5.1.0 +* 🎉 Feature: Add support for Gravity Forms Repeater Fields in PDFs [GH#833] +* 🎉 Feature: Add support for Gravity Wiz's Nested Forms Perk in PDFs +* 🎉 Feature: Add support for Gravity Forms Consent Field in PDFs [GH#832] +* 🎉 Feature: Add signed-URL authentication to [gravitypdf] shortcode using new "signed" and "expires" attributes [GH#841] +* 🎉 Feature: Add new "raw" attribute to the [gravitypdf] shortcode which will display the raw PDF URL [GH#841] +* 🎉 Feature: Added "Debug Mode" Global PDF Setting which replaces "Shortcode Debug Message", WP_DEBUG settings, and caches the template headers [GH#823] * Dev Feature: Add `gfpdf_disable_global_addon_data` filter to disable aggregate Survey / Poll / Quiz data in $form_data array (for performance) * Dev Feature: Add `gfpdf_disable_product_table` filter to disable Product table in PDF [GH#827] @@ -556,32 +559,32 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev Feature: Trigger `gfpdf_template_loaded` JS event after loading new PDF Template settings dynamically * Dev Feature: Add `gfpdf_field_product_value` filter to change Product table HTML mark-up in PDF -* Bug: Enable Image Watermarks in PDF -* Bug: Prevent HTML fields getting passed through `wpautop()` [GH#834] -* Bug: Test for writability in the mPDF tmp directory and fallback to the Gravity PDF tmp directory if failed [GH#837] -* Bug: Fix scheduled licensing status check and display better error if license deactivation fails [GH#838] -* Bug: Correctly display the values for multiple Option fields assigned to a single Product when Product Table is ungrouped in PDF [GH#839] -* Bug: Disable IP-based authentication when the entry IP matches the server IP [GH#840] +* 🐞 Bug: Enable Image Watermarks in PDF +* 🐞 Bug: Prevent HTML fields getting passed through `wpautop()` [GH#834] +* 🐞 Bug: Test for writability in the mPDF tmp directory and fallback to the Gravity PDF tmp directory if failed [GH#837] +* 🐞 Bug: Fix scheduled licensing status check and display better error if license deactivation fails [GH#838] +* 🐞 Bug: Correctly display the values for multiple Option fields assigned to a single Product when Product Table is ungrouped in PDF [GH#839] +* 🐞 Bug: Disable IP-based authentication when the entry IP matches the server IP [GH#840] -= 5.0.2 = -* Bug: Resolve fatal error on WP Engine due to security in place that prevented mPDF font cache from being saved. +## 5.0.2 +* 🐞 Bug: Resolve fatal error on WP Engine due to security in place that prevented mPDF font cache from being saved. -= 5.0.1 = -* Bug: Ensure the mPDF temporary directory is set to the PDF Working Directory `tmp` folder [GH#817] -* Bug: Refine the Background Processing description and tooltip text [GH#818] +## 5.0.1 +* 🐞 Bug: Ensure the mPDF temporary directory is set to the PDF Working Directory `tmp` folder [GH#817] +* 🐞 Bug: Refine the Background Processing description and tooltip text [GH#818] -= 5.0.0 = +## 5.0.0 * Breaking Change: Bump minimum version of Gravity Forms from 1.9 to 2.3.1+ * Breaking Change: Bump WordPress minimum version from 4.4 to 4.8+ * Breaking Change: Bump the PHP minimum version from 5.4 to 5.6+ * Breaking Change: Decouple the fonts from the plugin. -* Feature: Option to enable background Process PDFs during form submission and while resending notifications. Requires background tasks are enabled [GH#713] -* Feature: Include a Core Font Downloader in the PDF Tools to install all core PDF fonts during the initial installation [GH#709] -* Feature: Updated ReactJS to v16 which uses MIT license [GH#701] -* Feature: Add PHP7.2 Support [GH#716] -* Feature: Polyfill older browsers to support our modern Javascript [GH#729] -* Feature: Remove "Common Problems" link from PDF Help page and include "Common Questions" [GH#752] +* 🎉 Feature: Option to enable background Process PDFs during form submission and while resending notifications. Requires background tasks are enabled [GH#713] +* 🎉 Feature: Include a Core Font Downloader in the PDF Tools to install all core PDF fonts during the initial installation [GH#709] +* 🎉 Feature: Updated ReactJS to v16 which uses MIT license [GH#701] +* 🎉 Feature: Add PHP7.2 Support [GH#716] +* 🎉 Feature: Polyfill older browsers to support our modern Javascript [GH#729] +* 🎉 Feature: Remove "Common Problems" link from PDF Help page and include "Common Questions" [GH#752] * Dev: Update all Packagist-managed JS files to the latest version [GH#701] * Dev: Upgrade Mpdf to version 7.1 (accessed directly via `\Mpdf\Mpdf`) @@ -590,59 +593,59 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev: Include file/line number when PDF error is thrown [GH#803] * Dev: Remove the legacy /resources/ directory -* Bug: Fix Chosen Drop Down display issue when WordPress using RTL display [GH#698] -* Bug: Fix PHP Notice when Post Image field is blank [GH#805] -* Bug: Correct A5 Label so it correctly references 148 x 210mm [GH#811] -* Bug: Correct default en_US localization strings [GH#815] (credit Garrett Hyder) +* 🐞 Bug: Fix Chosen Drop Down display issue when WordPress using RTL display [GH#698] +* 🐞 Bug: Fix PHP Notice when Post Image field is blank [GH#805] +* 🐞 Bug: Correct A5 Label so it correctly references 148 x 210mm [GH#811] +* 🐞 Bug: Correct default en_US localization strings [GH#815] (credit Garrett Hyder) -= 4.5.0 = -* Feature: Added full support for the Gravity Wiz Conditional Logic Date Plugin -* Feature: Added full support for the Slim Image Cropper for Gravity Forms Plugin +## 4.5.0 +* 🎉 Feature: Added full support for the Gravity Wiz Conditional Logic Date Plugin +* 🎉 Feature: Added full support for the Slim Image Cropper for Gravity Forms Plugin * Dev Feature: Added additional actions that run before and after PDFs are generated. -= 4.4.0 = -* Feature: Add native support for Gravity Forms Chained Select -* Feature: Include Gravity Forms add-on conditional logic in PDF Conditional Logic selector -* Feature: When the "Show Page Names" PDF setting is enabled, the `pagebreak` CSS class can now be used on Named Pagebreak fields (except the very first one) -* Feature: PDF Rich Text fields now utilize the full width of the editor +## 4.4.0 +* 🎉 Feature: Add native support for Gravity Forms Chained Select +* 🎉 Feature: Include Gravity Forms add-on conditional logic in PDF Conditional Logic selector +* 🎉 Feature: When the "Show Page Names" PDF setting is enabled, the `pagebreak` CSS class can now be used on Named Pagebreak fields (except the very first one) +* 🎉 Feature: PDF Rich Text fields now utilize the full width of the editor * Dev Feature: Add $form_data API endpoint * Dev Feature: Add the $form and $this variables to the `gfpdf_field_value` filter * Dev Feature: Add `gfpdf_form_data_key_order` filter to allow the re-ordering of the $form_data array * Dev Feature: Add filter `gfpdf_container_disable_faux_columns` to allow faux columns to be toggled off (useful when using a lot of conditional logic with CSS Ready Classes) -* Housekeeping: Update Monolog to latest version -* Housekeeping: Instead of generic error, display `You do not have permission to view this PDF` when user failed PDF security checks -* Housekeeping: Tweak the Help page to provide more relevant information. -* Housekeeping: Reduce the Gravity PDF log file bloat, and add more specific log messages. -* Housekeeping: Recursively clean-up the PDF temporary directory -* Housekeeping: Limit the registration of PDF settings on Gravity PDF pages, and the admin options.php page -* Bug: Prevent multiple calls running when a new template is installed/deleted and then selected -* Bug: Pre-process any mergetags for the Checkbox, HTML, Post Content, Radio, Section, Textarea and Terms of Service Gravity Form fields -* Bug: Fix individual quantity field $form_data -* Bug: Ensure individual product fields (Product, Discount, Shipping, Subtotal, Tax and Total) display an empty value in the $form_data array, when necessary -* Bug: Fix PDF Template Manager display issues for WordPress 4.8+ -* Bug: Adjust Logged out timeout default to 20 minutes to match documentation -* Bug: Fix PHP notice when pre-procesing the template settings -* Bug: Fix Survey $form_data['survey']['score'] key -* Bug: Fix the Gravity Perks E-Commerce Subtotal value in the $form_data array -* Bug: Prevent TinyMCE error when selecting a new template and other plugins define a custom TinyMCE plugin -* Bug: Adjust PDF Template Upload limit from 5MB to 10MB -* Bug: Fix Product field background color issue -* Bug: Right-align prices in the product table -* Bug: Fix PHP fatal error when PDF cannot be correctly saved to disk - -= 4.3.2 = -* Bug: Reverse pricing issue bug fix in 4.3.1 (under some circumstances it cause the incorrect Unit Price to be displayed in product table) -* Bug: Fix Unit Price currency issue in the product table when using the Gravity Forms Multi Currency plugin -* Bug: Fix empty line-items in the Product table when using the Gravity Wiz E-Commerce add-on with conditional logic - -= 4.3.1 = -* Bug: Restrict Gravity PDF JavaScript to the correct PDF pages (GH#693) -* Bug: Fix PHP5.2 activation error (GH#697) -* Bug: Fix RTL issue with Chosen Select library (GH#698) -* Bug: Fix PDF Product table pricing issue by using the pre-calculated price field for the unit price (GH#699) - -= 4.3.0 = -* Feature: Add support for Gravity Perks E-Commerce Add-on (GH#671) +* 🧹 Housekeeping: Update Monolog to latest version +* 🧹 Housekeeping: Instead of generic error, display `You do not have permission to view this PDF` when user failed PDF security checks +* 🧹 Housekeeping: Tweak the Help page to provide more relevant information. +* 🧹 Housekeeping: Reduce the Gravity PDF log file bloat, and add more specific log messages. +* 🧹 Housekeeping: Recursively clean-up the PDF temporary directory +* 🧹 Housekeeping: Limit the registration of PDF settings on Gravity PDF pages, and the admin options.php page +* 🐞 Bug: Prevent multiple calls running when a new template is installed/deleted and then selected +* 🐞 Bug: Pre-process any mergetags for the Checkbox, HTML, Post Content, Radio, Section, Textarea and Terms of Service Gravity Form fields +* 🐞 Bug: Fix individual quantity field $form_data +* 🐞 Bug: Ensure individual product fields (Product, Discount, Shipping, Subtotal, Tax and Total) display an empty value in the $form_data array, when necessary +* 🐞 Bug: Fix PDF Template Manager display issues for WordPress 4.8+ +* 🐞 Bug: Adjust Logged out timeout default to 20 minutes to match documentation +* 🐞 Bug: Fix PHP notice when pre-procesing the template settings +* 🐞 Bug: Fix Survey $form_data['survey']['score'] key +* 🐞 Bug: Fix the Gravity Perks E-Commerce Subtotal value in the $form_data array +* 🐞 Bug: Prevent TinyMCE error when selecting a new template and other plugins define a custom TinyMCE plugin +* 🐞 Bug: Adjust PDF Template Upload limit from 5MB to 10MB +* 🐞 Bug: Fix Product field background color issue +* 🐞 Bug: Right-align prices in the product table +* 🐞 Bug: Fix PHP fatal error when PDF cannot be correctly saved to disk + +## 4.3.2 +* 🐞 Bug: Reverse pricing issue bug fix in 4.3.1 (under some circumstances it cause the incorrect Unit Price to be displayed in product table) +* 🐞 Bug: Fix Unit Price currency issue in the product table when using the Gravity Forms Multi Currency plugin +* 🐞 Bug: Fix empty line-items in the Product table when using the Gravity Wiz E-Commerce add-on with conditional logic + +## 4.3.1 +* 🐞 Bug: Restrict Gravity PDF JavaScript to the correct PDF pages (GH#693) +* 🐞 Bug: Fix PHP5.2 activation error (GH#697) +* 🐞 Bug: Fix RTL issue with Chosen Select library (GH#698) +* 🐞 Bug: Fix PDF Product table pricing issue by using the pre-calculated price field for the unit price (GH#699) + +## 4.3.0 +* 🎉 Feature: Add support for Gravity Perks E-Commerce Add-on (GH#671) * Dev Feature: Add GPDFAPI::get_pdf_fonts() method * Dev Feature: Add 'gfpdf_pdf_generator_pre_processing' filter * Dev Feature: Add 'gfpdf_entry_pre_form_data' filter @@ -651,23 +654,23 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev Enhancement: Include update message / additonal link helper functions for registered Gravity PDF add-ons (GH#673) * Dev Enhancement: Update Easy Digital Download Licensing class to version 1.6.14 * Future Feature: After plugin updates, copy shipped Mpdf fonts to PDF Working Directory (preparation for removal of all fonts in future release) (GH#676) -* Bug: Strip URL parameters from home_url(), if any, when building PDF URL (GH#674) -* Bug: Load the correct PDF Template Configuration file when using 'template' helper param (GH#675) - -= 4.2.2 = -* Bug: Fix empty Master Sassword regression introduced in 4.2 (GH#664) -* Bug: Fix Javascript errors when plugin translation files used (GH#667) -* Bug: Fix PDF Conditional Logic saving problem when using 'Less than' (GH#668) -* Bug: Fix PHP Notices when using custom font (GH#669) -* Bug: Merge Mpdf upstream patches (includes Chrome Viewer Yellow hover fix) - -= 4.2.1 = -* Bug: Fix fatal DateTimeZone error for older versions of PHP (GH#654) - -= 4.2.0 = -* Feature: Merge tags and shortcodes are displayed in the PDF for any administrative fields (GH#633) -* Feature: New field class 'pagebreak' forces a pagebreak in the PDF (GH#634) -* Feature: Instead of the field not showing at all, Gravity Perks Terms of Conditions field now shows the text "Not accepted" +* 🐞 Bug: Strip URL parameters from home_url(), if any, when building PDF URL (GH#674) +* 🐞 Bug: Load the correct PDF Template Configuration file when using 'template' helper param (GH#675) + +## 4.2.2 +* 🐞 Bug: Fix empty Master Sassword regression introduced in 4.2 (GH#664) +* 🐞 Bug: Fix Javascript errors when plugin translation files used (GH#667) +* 🐞 Bug: Fix PDF Conditional Logic saving problem when using 'Less than' (GH#668) +* 🐞 Bug: Fix PHP Notices when using custom font (GH#669) +* 🐞 Bug: Merge Mpdf upstream patches (includes Chrome Viewer Yellow hover fix) + +## 4.2.1 +* 🐞 Bug: Fix fatal DateTimeZone error for older versions of PHP (GH#654) + +## 4.2.0 +* 🎉 Feature: Merge tags and shortcodes are displayed in the PDF for any administrative fields (GH#633) +* 🎉 Feature: New field class 'pagebreak' forces a pagebreak in the PDF (GH#634) +* 🎉 Feature: Instead of the field not showing at all, Gravity Perks Terms of Conditions field now shows the text "Not accepted" when user hasn't agreed to terms (GH#636) * Dev Feature: Add premium add-on and licensing infrastructure (GH#619) @@ -685,28 +688,28 @@ greater control over the core PDF functionality. (GH#622) * Dev Feature: Added 'gfpdf_field_middleware' filter to control when a field should be displayed in the core PDF templates (GH#635) * Dev Feature: Greater access to the Field_Product class internals (GH#642) -* Bug: Correctly exit the script when the PDF is downloaded / sent to the browser (GH#610) -* Bug: Don't auto-redirect to welcome / update screen on plugin install or upgrade which resolves a cached redirect issue (GH#612) -* Bug: Register two PDF endpoints to support both pretty and almost pretty permalinks at the same time (GH#614) -* Bug: Fix [gravitypdf] shortcode display error in GravityView when wrapped in another shortcode (GH#628) -* Bug: Add support for Gravity Forms 2.3 Merge Tags (GH#643) -* Bug: Fix background image relative paths (GH#645) -* Bug: Fix GravityView display issue when view is used on the front page (GH#639) -* Bug: Don't show selected product options in the product field when not grouping products together in PDF (GH#646) -* Bug: Fix edge case that caused PDF settings to be overridden when the form is updated (GH#648) - -= 4.1.1 = -* Bug: Add check to see if headers are already sent before trying to redirect to the welcome / update page (GH#601) -* Bug: Fixed issue accessing the Advanced Template Manager in Safari browser (GH#603) -* Bug: Ensure the Advanced Template Manager notice and error messages have the correct styles in the Form PDF Settings pages (GH#604) -* Bug: Fix PDF generation problem using the legacy v3 URL structure (GH#605) - -= 4.1.0 = -* Feature: Advanced PDF Template Manager. Upload, View, Select and Delete PDF templates with ease (GH#486) -* Feature: Add PDF Mergetags which output PDF URLs and compliment the [gravitypdf] shortcode which output HTML links (GH#404) -* Feature: Add four-column CSS Ready Class support to core PDFs. Note: if you have run "Setup Custom Templates" you will need to re-run it to take advantage of this feature (GH#461) -* Feature: Added support for the WP External Links plugin (GH#386) -* Feature: Added filter to show radio, checkbox, select, multiselect and product field values in core PDF templates (GH#600) +* 🐞 Bug: Correctly exit the script when the PDF is downloaded / sent to the browser (GH#610) +* 🐞 Bug: Don't auto-redirect to welcome / update screen on plugin install or upgrade which resolves a cached redirect issue (GH#612) +* 🐞 Bug: Register two PDF endpoints to support both pretty and almost pretty permalinks at the same time (GH#614) +* 🐞 Bug: Fix [gravitypdf] shortcode display error in GravityView when wrapped in another shortcode (GH#628) +* 🐞 Bug: Add support for Gravity Forms 2.3 Merge Tags (GH#643) +* 🐞 Bug: Fix background image relative paths (GH#645) +* 🐞 Bug: Fix GravityView display issue when view is used on the front page (GH#639) +* 🐞 Bug: Don't show selected product options in the product field when not grouping products together in PDF (GH#646) +* 🐞 Bug: Fix edge case that caused PDF settings to be overridden when the form is updated (GH#648) + +## 4.1.1 +* 🐞 Bug: Add check to see if headers are already sent before trying to redirect to the welcome / update page (GH#601) +* 🐞 Bug: Fixed issue accessing the Advanced Template Manager in Safari browser (GH#603) +* 🐞 Bug: Ensure the Advanced Template Manager notice and error messages have the correct styles in the Form PDF Settings pages (GH#604) +* 🐞 Bug: Fix PDF generation problem using the legacy v3 URL structure (GH#605) + +## 4.1.0 +* 🎉 Feature: Advanced PDF Template Manager. Upload, View, Select and Delete PDF templates with ease (GH#486) +* 🎉 Feature: Add PDF Mergetags which output PDF URLs and compliment the [gravitypdf] shortcode which output HTML links (GH#404) +* 🎉 Feature: Add four-column CSS Ready Class support to core PDFs. Note: if you have run "Setup Custom Templates" you will need to re-run it to take advantage of this feature (GH#461) +* 🎉 Feature: Added support for the WP External Links plugin (GH#386) +* 🎉 Feature: Added filter to show radio, checkbox, select, multiselect and product field values in core PDF templates (GH#600) * Enhancement: Gravity PDF Review Notice now only shows up on Gravity Forms pages (#528) * Enhancement: Convert all strings to American format so they can be correctly translated using Glotpress (GH#525) * Enhancement: Added Australian, New Zealand and UK language packs (GH#525) @@ -725,20 +728,20 @@ greater control over the core PDF functionality. (GH#622) * Dev Changes: Rename all instances of "depreciated" with "deprecated" in our files and classes (GH#535) * Dev Changes: Contact our localized JS data to camelCase (GH#532) * Dev Changes: Utilized PHP5.4 array syntax in code (GH#521) -* Bug: Reset Gravity Forms Merge Tag JS when PDF template changes (GH#551) -* Bug: Fix incorrect variable reference to $include_list_styles which uses 'gfpdf_include_list_styles' to change the behaviour (GH#547) -* Bug: Fix PHP notice in PDF when no products selected in form (GH#523) -* Bug: Fix issue with Gravity PDF update screen showing and not showing at incorrect times (GH#514) -* Bug: Fix false positive when checking if the PDF tmp directory is readable (GH#519) -* Bug: Fix error when using GLOB_BRACE flag in glob() function (GH#562) -* Bug: Remove OTF fonts from being uploaded due to poor support in Mpdf (GH#569) -* Bug: Additional PHP7.1 fixes merged from upstream Mpdf package -* Bug: Allow TTF file mime type to be correctly detected in WordPress 4.7.3 (GH#571) -* Bug: Ensure PDF Delete dialog shows up after being previously 'canceled' (GH#588) -* Bug: Ensure duplicate mergetags aren't included after PDF template change (GH#589) -* Bug: Fix PHP Notice if there's no active capabilities for a role (GH#590) - -= 4.0.6 = +* 🐞 Bug: Reset Gravity Forms Merge Tag JS when PDF template changes (GH#551) +* 🐞 Bug: Fix incorrect variable reference to $include_list_styles which uses 'gfpdf_include_list_styles' to change the behaviour (GH#547) +* 🐞 Bug: Fix PHP notice in PDF when no products selected in form (GH#523) +* 🐞 Bug: Fix issue with Gravity PDF update screen showing and not showing at incorrect times (GH#514) +* 🐞 Bug: Fix false positive when checking if the PDF tmp directory is readable (GH#519) +* 🐞 Bug: Fix error when using GLOB_BRACE flag in glob() function (GH#562) +* 🐞 Bug: Remove OTF fonts from being uploaded due to poor support in Mpdf (GH#569) +* 🐞 Bug: Additional PHP7.1 fixes merged from upstream Mpdf package +* 🐞 Bug: Allow TTF file mime type to be correctly detected in WordPress 4.7.3 (GH#571) +* 🐞 Bug: Ensure PDF Delete dialog shows up after being previously 'canceled' (GH#588) +* 🐞 Bug: Ensure duplicate mergetags aren't included after PDF template change (GH#589) +* 🐞 Bug: Fix PHP Notice if there's no active capabilities for a role (GH#590) + +## 4.0.6 * Correctly register our PDF link with the WP Rewrite API when "Almost Pretty" permalinks are active (GH#502) * Correctly process mergetags in password field for Tier 2 PDF templates (GH#503) * Allow mergetags to be saved in HTML attributes in our Header / Footer settings - DEV NOTE: all Rich Text Editor settings fields should be output with `wp_kses_post( $html )` (GH#492) @@ -748,13 +751,13 @@ greater control over the core PDF functionality. (GH#622) * Resolve incorrect page numbering in Mpdf's Table of Contents * Change Helper_Misc->get_contrast() to choose white in more cases (GH#506) -= 4.0.5 = +## 4.0.5 * Add support for "Almost Pretty" permalinks for web servers that don't support Mod Rewrite (IIS) (GH#488) * Add PHP 7.1 support – resolves two string-to-array issues (GH#495) * Add

and
tags to Rich Text Paragraph field in PDF – using wpautop() (GH#490) * Disable product table when enabling the 'individual_products' option in core templates (GH#493) -= 4.0.4 = +## 4.0.4 * Prevent Finder (Mac) and Ghostscript viewing / processing password-protected PDFs without a password (GH#467) * Fix Font Manager display issues for users running a version of WP lower than 4.5 (GH#470) * Ensure new lines in Header / Footer automatically convert to

or
tags using wpautop() (GH#472) @@ -765,7 +768,7 @@ greater control over the core PDF functionality. (GH#622) * Fixed depreciation notice for multisites using WordPress 4.6 (GH#479) * Apply esc_html() and esc_url() to PDF name and URL in admin area (GH#484) -= 4.0.3 = +## 4.0.3 * Fix incorrect product calculations when using decimal comma format eg. 1.000,50 (GH#442) * Rename $config variable to $html_config in core templates (GH#451) * Don't chain CSS in our default setters or set fixed font size in templates (GH#446) @@ -777,14 +780,14 @@ greater control over the core PDF functionality. (GH#622) * Duplicating PDFs will now be inactive by default (GH#458) * Tweaked the "Show Page Names" field description (GH#449) -= 4.0.2 = +## 4.0.2 * Fixes issue displaying address fields in v4 PDFs (GH#429) * Fixes internal logging issues and added Gravity Forms 1.1 support (GF#428) * Fixes notice when form pagination information is not available (GH#437) * Fixes notice when using GPDFAPI::product_table() on form that had no products (GH#438) * Fixes caching issue with GravityView Enable Notifications plugin that caused PDF attachment not to be updated (GH#436) -= 4.0.1 = +## 4.0.1 * Fixes PHP notice when viewing PDF and Category field is empty (GH#419) * Fixes PHP notice when viewing PDF and custom font directory is empty (GH#416) * Fixes Font Manager / Help Search features due to Underscore.js conflict when PHP's deprecated ASP Tags enabled (GH#417) @@ -794,7 +797,7 @@ greater control over the core PDF functionality. (GH#622) * Fixes documentation search error on PDF Help tab (GH#424) * Add additional check when cleaning up TMP directory (GH#427) -= 4.0 = +## 4.0 * Minimum PHP version changed from PHP 5.2 to PHP 5.4. ENSURE YOUR WEB SERVER IS COMPATIBLE BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) * Minimum WordPress version changed from 3.9 to 4.2. ENSURE YOU ARE RUNNING THE MINIMUM VERISON OF WP BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) * Minimum Gravity Forms version changed from 1.8 to 1.9. ENSURE YOU ARE RUNNING THE MINIMUM VERISON OF GRAVITY FORMS BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) @@ -843,34 +846,34 @@ greater control over the core PDF functionality. (GH#622) * Automatically make $form, $entry and $form_data available to PDF templates * Automatically make $gfpdf object available to PDF templates (the main Gravity PDF object containing all our helper classes) -= 3.7.7 = +## 3.7.7 * Bug - Ensure 'gfpdf_post_pdf_save' action gets triggered for all PDFs when resending notifications * Housekeeping - Remove compress.php from mPDF package (unneeded) -= 3.7.6 = +## 3.7.6 * Bug - Added full support for all Gravity Forms notification events (includes Payment Complete, Payment Refund, Payment Failed, Payment Pending ect) * Bug - Resolve mPDF PHP7 image parsing error due to a change in variable order parsing. -= 3.7.5 = +## 3.7.5 * Housekeeping - Tweak mPDF package to be PHP7 compatible. -= 3.7.4 = +## 3.7.4 * Housekeeping - Revert patch made in last update as Gravity Forms 1.9.9 fixes the issue internally. -= 3.7.3 = +## 3.7.3 * Bug - Gravity Forms 1.9 didn't automatically nl2br paragraph text mergetags. Fixed this issue in custom PDF templates. -= 3.7.2 = +## 3.7.2 * Bug - Updated $form_data['date_created'], $form_data['date_created_usa'], $form_data['misc']['date_time'], $form_data['misc']['time_24hr'] and $form_data['misc']['time_12hr'] to factor in the website's timezone settings. -= 3.7.1 = +## 3.7.1 * Housekeeping - Allow control over signature width in default template using the 'gfpdfe_signature_width' filter * Housekeeping - Add better error checking when migrating PDF template folder * Housekeeping - Add unit testing to the directory migration function * Bug - Fixed backwards-compatiiblity PHP error when viewing custom PDF templates on Gravity Forms 1.8.3 or below. * Bug - Ensure checkbox field names are included in the $form_data array -= 3.7.0 = +## 3.7.0 * Feature - Added 'default-show-section-content' configuration option. You can now display the section break content in the default template. Note: if this option is enabled and the section break is empty it will still be displayed on the PDF. * Feature - Added hooks 'gfpdfe_template_location' and 'gfpdfe_template_location_uri' to change PDF template location * Housekeeping - Migrate your template and configuration files. As of Gravity PDF 3.7 we'll be dropping the 'site_name' folder for single WordPress installs and changing the multisite install directory to the site ID. @@ -889,7 +892,7 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fix up notices in mPDF template when using headers/footers * Bug - Fix up error in PDF when signature field wasn't filled in -= 3.6.0 = +## 3.6.0 * Feature - Added support for Gravity Form's sub-field middle name (1.9Beta) * Feature - Patch mPDF with full :nth-child support on TD and TR table cells * Feature - Added $form_data[products_totals][subtotal] key (total price without shipping costs added) @@ -913,32 +916,32 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed up incorrect formatting issue when using custom font name * Bug - Fixed issue displaying Times New Roman in PDF templates -= 3.5.11.1 = +## 3.5.11.1 * Bug - Fix issue saving and sending blank PDFs due to security fix -= 3.5.11 = +## 3.5.11 * Bug - Fix security issue which gave unauthorized users access to Gravity Form entires -= 3.5.10 = +## 3.5.10 * Housekeeping - Include individual scoring for Gravity Form Survey Likert field in the $form_data['survey'] array * Bug - Fix fatal error when Gravity Forms isn't activated, but Gravity PDF is. -= 3.5.9 = +## 3.5.9 * Bug - Rollback recent changes that introduced the GFAPI as introduces errors for older versions of Gravity Forms. Will reintroduce in next major release and increase the minimum Gravity Forms version. -= 3.5.8 = +## 3.5.8 * Bug - Fixed issue affected some users where a depreciated function was causing a fatal error -= 3.5.7 = +## 3.5.7 * Bug - Fixed issue where the PDF settings page was blank for some users -= 3.5.6 = +## 3.5.6 * Bug - Fixed issue with last release that affected checks to see if Gravity Forms has submitting * Bug - Fixed fatal error with servers using PHP5.2 or lower * Bug - Fixed E_NOTICE for replacement array_replace_recursive() function in PHP5.2 or lower * Bug - Fixed issue with AJAX spinner showing when submitting support request -= 3.5.5 = +## 3.5.5 * Housekeeping - Include French translation (thanks to Marie-Aude Koiransky-Ballouk) * Housekeeping - Wrap 'Initialize Fonts' text in translation ready _e() function * Housekeeping - Tidy up System Status CSS styles to accomidate translation text lengths @@ -946,28 +949,28 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed load_plugin_textdomain which was incorrectly called. * Bug - Correctly check if the plugin is loaded correctly before letting the PDF class fully load -= 3.5.4 = +## 3.5.4 * Bug - Fixed issue with incorrect PDF name showing on the entry details page * Bug - Fixed issue with custom fonts being inaccessible without manually reinstalling after upgrading. * Housekeeping - Added in two new filters to modify the $mpdf object. 'gfpdfe_mpdf_class' and 'gfpdfe_mpdf_class_pre_render' (replaces the gfpdfe_pre_render_pdf filter). -= 3.5.3 = +## 3.5.3 * Bug - Mergetags braces ({}) were being encoded before conversion * Bug - Fixed issue with empty string being passed to array filter * Housekeeping - Enabled mergetag usage in the pdf_password and pdf_master_password configuration options * Housekeeping - Correctly call $wpdb->prepare so the variables in are in the second argument -= 3.5.2 = +## 3.5.2 * Bug - Initialization folder .htaccess file was preventing template.css from being loaded by the default templates. -= 3.5.1 = +## 3.5.1 * Bug - Fixed issue with core fonts Arial/Helvetica, Times/Times New Roman and Courier not displaying in the PDF. * Bug - Fixed display issues for multiple PDFs on the details admin entry page * Housekeeping - Made the details entry page PDF view consistent for single or multiple PDFs * Housekeeping - Ensured all javascript files are minified and are correctly being used * Housekeeping - Remove legacy notices from mPDF package -= 3.5.0 = +## 3.5.0 * Feature - No longer need to reinitialize every time the software is updated. * Feature - Add auto-initializer on initial installation for sites that have direct write access to their server files * Feature - Add auto-initializer on initial installation across entire multisite network for sites who have direct write access to their server files. @@ -986,23 +989,23 @@ greater control over the core PDF functionality. (GH#622) * Bug - When testing write permissions, file_exist() is throwing false positives for some users which would generate a warning when unlink() is called. Hide warning using '@'. -= 3.4.1 = +## 3.4.1 * Bug - Fix typo that effected sites running PHP5.2 or below. -= 3.4.0.3 = +## 3.4.0.3 * Bug - Define array_replace_recursive() if it doesn't exist, as it is PHP 5.3 only. -= 3.4.0.2 = +## 3.4.0.2 * Housekeeping - Wrapped the View PDF and Download buttons in correct language functions - _e() * Bug - Fix problem displaying the signature field * Bug - Fix notice errors with new 'save' PDF hook -= 3.4.0.1 = +## 3.4.0.1 * Housekeeping - Add commas on the last line of every config node in the configuration.php file * Housekeeping - Fix up initialization error messages * Bug - Fix up mPDF bugs - soft hyphens, watermarks over SVG images, inline CSS bug -= 3.4.0 = +## 3.4.0 * Feature - Added auto-print prompt ability when you add &print=1 to the PDF URL (see https://developer.gravitypdf.com/documentation/display-pdf-in-browser/ for details) * Feature - Added ability to rotate absolute positioned text 180 degrees (previously only 90 and -90). Note: feature in beta * Feature - Backup all template files that are overridden when initializing to a folder inside PDF_EXTENDED_TEMPLATES @@ -1023,7 +1026,7 @@ greater control over the core PDF functionality. (GH#622) * Feature - Added survey Likert output function for custom templates (much like the product table function). It can be used with the following command 'echo GFPDFEntryDetails::get_likert($form, $lead, $field_id);' where $field_id is substituted for the form field ID. * Feature - Added field descriptions to the $form_data array under the $form_data['field_descriptions'] key. * Feature - Added pre and post PDF generation filters and actions to pdf-render.php. These include gfpdfe_pre_render_pdf, gfpdfe_pdf_output_type, gfpdfe_pdf_filename and gfpdf_post_pdf_save. -* Feature: $form_data['signature'] et al. keys now contain the signature width and height attributes +* 🎉 Feature: $form_data['signature'] et al. keys now contain the signature width and height attributes * Housekeeping - Ensure the form and lead IDs are correctly passed throughout the render functions. * Housekeeping - Update settings page link to match new Gravity Forms URL structure @@ -1061,27 +1064,26 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed path to fallback templates when not found * Bug - Fixed problem with master password setting to user password - -= 3.3.4 = +## 3.3.4 * Bug - Fixed issue linking to PDF from front end * Housekeeping - Removed autoredirect to initialization page -= 3.3.3 = +## 3.3.3 * Bug - Correctly call javascript to control admin area 'View PDFs' drop down * Bug - Some users still reported incorrect RAM. Convert MB/KB/GB values to M/K/G as per the PHP documentation. * Housekeeping - Show initilisation prompt on all admin area pages instead of only on the Gravity Forms pages -= 3.3.2.1 = +## 3.3.2.1 * Bug - Incorrectly showing assigned RAM to website -= 3.3.2 = +## 3.3.2 * Bug - Some hosts reported SSL certificate errors when using the support API. Disabled HTTPS for further investigation. Using hash-based verification for authentication. * Housekeeping - Forgot to disable API debug feature after completing beta -= 3.3.1 = +## 3.3.1 * Bug - $form_data['list'] was mapped using an incremental key instead of via the field ID -= 3.3.0 = +## 3.3.0 * Feature - Overhauled the initialization process so that the software better reviews the host for potential problems before initialization. This should help debug issues and make users aware there could be a problem before they begin using the software. * Feature - Overhauled the settings page to make it easier to access features of the software * Feature - Added a Support tab to the settings page which allows users to securely (over HTTPS) submit a support ticket to the Gravity PDF support desk @@ -1101,7 +1103,7 @@ greater control over the core PDF functionality. (GH#622) * Housekeeping - Update core styles to match Wordpress 3.8/Gravity Forms 1.8. * Housekeeping - Updated header/footer examples to use @page in example. -= 3.2.0 = +## 3.2.0 * Feature - Can now view multiple PDFs assigned to a single form via the admin area. Note: You must provide a unique 'filename' parameter in configuration.php for multiple PDFs assigned to a single form. * Feature - You can exclude a field from the default templates using the class name 'exclude'. See our [FAQ topic](https://gravitypdf.com/#faqs) for more details. * Bug - Fixed issue viewing own PDF entry when logged in as anything lower than editor. @@ -1112,13 +1114,13 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed problem sending duplicate PDF when using mass resend notification feature * Deprecated - Removed GF_FORM_ID and GF_LEAD_ID constants which were used in v2.x.x of the software. Ensure you follow [v2.x.x upgrade guide](https://developer.gravitypdf.com/news/version-2-3-migration-guide/) to your templates before upgrading. -= 3.1.4 = +## 3.1.4 * Bug - Fixed issue with plugin breaking website's when the Gravity Forms plugin wasn't activated. * Housekeeping - The plugin now only supports Gravity Forms 1.7 or higher and Wordpress 3.5 or higher. * Housekeeping - PDF template files can no longer be accessed directly. Instead, add &html=1 to the end of your URL when viewing a PDF. * Extension - Added additional filters to allow the lead ID and notifications to be overridden. -= 3.1.3 = +## 3.1.3 * Feature - Added signature_details_id to $form_data array which maps a signatures field ID to the array. * Extension - Added pre-PDF generator filter for use with extensions. * Bug - Fixed issue with quotes in entry data breaking custom templates. @@ -1127,18 +1129,18 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed issue with empty signature field not displaying when option 'default-show-empty' is set. * Bug - Fixed initialization prompt issue when the MPDF package wasn't unpacked. -= 3.1.2 = +## 3.1.2 * Feature - Added list array, file path, form ID and lead ID to $form_data array in custom templates * Bug - Fixed initialization prompt issue when updating plugin * Bug - Fixed window.open issue which prevented a new window from opening when viewing a PDF in the admin area * Bug - Fixed issue with product dropdown and radio button data showing the value instead of the name field. * Bug - Fixed incorrect URL pointing to signature in $form_data -= 3.1.1 = +## 3.1.1 * Bug - Users whose server only supports FTP file manipulation using the WP_Filesystem API moved the files into the wrong directory due to FTP usually being rooted to the Wordpress home directory. To fix this the plugin attempts to determine the FTP directory, otherwise assumes it is the WP base directory. * Bug - Initialization error message was being called but the success message was also showing. -= 3.1.0 = +## 3.1.0 * Feature - Added defaults to configuration.php which allows users to define the default PDF settings for all Gravity Forms. See the [installation and configuration documentation](https://developer.gravitypdf.com/documentation/getting-started-with-gravity-pdf-configuration/) for more details. * Feature - Added three new configuration options 'default-show-html', 'default-show-empty' and 'default-show-page-names' which allow different display options to the three default templates. See the [installation and configuration documentation](http://gravitypdf.com/documentation-v3-x-x/installation-and-configuration/#default-template) for more details. * Feature - Added filter hooks 'gfpdfe_pdf_name' and 'gfpdfe_template' which allows developers to further modify a PDF name and template file, respectively, outside of the configuration.php. This is useful if you have a special case naming convention based on user input. See [https://developer.gravitypdf.com/documentation/filters-and-hooks/](https://developer.gravitypdf.com/documentation/filters-and-hooks/) for more details about using these filters. @@ -1154,16 +1156,16 @@ greater control over the core PDF functionality. (GH#622) * Bug - Removed PHP notice about $even variable not being defined in pdf-entry-detail.php * Bug - Prevent code from continuing to excecute after sending header redirect. -= 3.0.2 = +## 3.0.2 * Backwards Compatibility - While PHP 5.3 has was released a number of years ago it seems a number of hosts do not currently offer this version to their clients. In the interest of backwards compatibility we've re-written the plugin to again work with PHP 5+. * Signature / Image Display Bug - All URLs have been converted to a path so images should now display correctly in PDF. -= 3.0.1 = +## 3.0.1 * Bug - Fixed issue that caused website to become unresponsive when Gravity Forms was disabled or upgraded * Bug - New HTML fields weren't being displayed in $form_data array * Feature - Options for default templates to disable HTML fields or empty fields (or both) -= 3.0.0 = +## 3.0.0 As of Gravity PDF v3.0.0 we have removed the DOMPDF package from our plugin and integrated the more advanced mPDF system. Along with a new HTML to PDF generator, we've rewritten the entire plugin's base code to make it more user friendly to both hobbyists and rock star web developers. Configuration time is cut in half and advanced features like adding security features is now accessible to users who have little experience with PHP. New Features include: @@ -1191,28 +1193,28 @@ Other changes include For more details [view the 3.x.x online documentation](https://developer.gravitypdf.com/). -= 2.2.3 = +## 2.2.3 * Bug - Fixed mb_string error in the updated DOMPDF package. -= 2.2.2 = +## 2.2.2 * DOMPDF - We updated to the latest version of DOMPDF - DOMPDF 0.6.0 beta 3. * DOMPDF - We've enabled font subsetting by default which should help limit the increased PDF size when using DejaVu Sans (or any other font). -= 2.2.1 = +## 2.2.1 * Bug - Fixed HTML error which caused list items to distort on PDF -= 2.2.0 = +## 2.2.0 * Compatibility - Ensure compatibility with Gravity Forms 1.7. We've updated the functions.php code and remove gform_user_notification_attachments and gform_admin_notification_attachments hooks which are now deprecated. Functions gform_pdf_create and gform_add_attachment have been removed and replaced with gfpdfe_create_and_attach_pdf(). See upgrade documentation for details. * Enhancement - Added deployment code switch so the template redeployment feature can be turned on and off. This release doesn't require redeployment. * Enhancement - PDF_Generator() variables were getting long and complex so the third variable is now an array which will pass all the optional arguments. The new 1.7 compatible functions.php code includes this method by default. For backwards compatibility the function will still work with the variable structure prior to 2.2.0. * Bug - Fixed error generated by legacy code in the function PDF_processing() which is located in render_to_pdf.php. * Bug - Images and stylesheets will now try and be accessed with a local path instead of a URL. It fixes problem where some hosts were preventing read access from a URL. No template changes are required. -= 2.1.1 = +## 2.1.1 * Bug - Signatures stopped displaying after 2.1.0 update. Fixed issue. * Bug - First time install code now won't execute if already have configuration variables in database -= 2.1.0 = +## 2.1.0 * Feature - Product table can now be accessed directly through custom templates by running GFPDFEntryDetail::product_table($form, $lead);. See documentation for more details. * Feature - Update screen will ask you if you want to deploy new template files, instead of overriding your modified versions. @@ -1232,11 +1234,11 @@ For more details [view the 3.x.x online documentation](https://developer.gravity * Housekeeping - changed pdf-entry-detail.php class name from GFEntryDetail to GFPDFEntryDetail to remove compatibility problems with Gravity Forms. * Housekeeping - created pdf-settings.php file to house the settings page code. -= 2.0.1 = +## 2.0.1 * Fixed Signature bug when checking if image file exists using URL instead of filesystem path * Fixed PHP Constants Notice -= 2.0.0 = +## 2.0.0 * Moved templates to active theme folder to prevent custom themes being removed on upgrade * Allow PDFs to be saved using a custom name * Fixed WP_Error bug when image/css file cannot be found @@ -1246,27 +1248,27 @@ For more details [view the 3.x.x online documentation](https://developer.gravity * Plugin/Support moved to dedicated website. * Pro/Business package offers the ability to write fields on an existing PDF. -= 1.2.3 = +## 1.2.3 * Fixed $wpdb->prepare error -= 1.2.2 = +## 1.2.2 * Fixed bug with tempalte shipping method MERGETAGS * Fixed bug where attachment wasn't being sent * Fixed problem when all_url_fopen was turned off on server and failed to retreive remote images. Now uses WP_HTTP class. -= 1.2.1 = +## 1.2.1 * Fixed path to custom css file included in PDF template -= 1.2.0 = +## 1.2.0 * Template files moved to the plugin's template folder * Sample Form installed so developers have a working example to modify * Fixed bug when using WordPress in another directory to the site -= 1.1.0 = +## 1.1.0 * Now compatible with Gravity Forms Signature Add-On * Moved the field data functions out side of the Gravity Forms core so users can freely style their form information (located in pdf-entry-detail.php) * Simplified the field data output * Fixed bug when using product information -= 1.0.0 = +## 1.0.0 * First release. diff --git a/pdf.php b/pdf.php index d960ec873..8f20bbc1f 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Digital document management with WordPress and Gravity Forms just became simple with Gravity PDF! - -= Free Feature = - -* **Unlimited Use, No Restrictions** – There are zero hard limits to the number of PDFs you can configure across all your forms or generate on your entries. Gravity PDF does **NOT** stamp documents with our logo, limit the number of PDFs you can create per month, or purposefully restrict essential functionality to force you to upgrade to a paid plan. -* **Privacy and Security** - your form data is never sent to a third party to generate the PDFs and the documents are generated directly on your web server. [Strong access control policies are put in place](https://docs.gravitypdf.com/v6/users/pdf-security#default-security) to prevent unauthenticated access to your PDFs. -* **Multilingual** – a multitude of languages from across the globe can be displayed in PDFs, include complex scripts like Hebrew, Arabic, Thai, Japanese, Chinese, and Korean. -* **Additional Fonts** – match your branding and enhance the overall look and feel of PDFs by install your own fonts. -* **Columns** – use [Drag and Drop columns](https://docs.gravityforms.com/working-with-columns/) in Gravity Forms and [PDFs will automatically mimic that layout](https://docs.gravitypdf.com/v6/users/columns). -* **Shortcode and Merge Tags** – You can generate a link or URL to PDFs [using both shortcodes and merge tags](https://docs.gravitypdf.com/v6/users/shortcodes-and-mergetags) so your users can download the PDF right after form submission. -* **Export Entries** – include the direct link to any PDF(s) when [exporting your form entries](https://docs.gravitypdf.com/v6/users/include-pdfs-in-entry-export) -* **Webhooks Add-on** – [send the direct PDF link with Webhook requests](https://docs.gravitypdf.com/v6/users/webhooks-support) when using Gravity Forms Webhooks add-on. -* **Gravity Flow** – create complex workflows [using Gravity Flow](https://gravityflow.io) and automatically email Gravity PDF-generated documents at any step in the workflow. -* **GravityView** – add links to PDFs when building a members area [using GravityView](https://gravityview.co) + [Advanced Filtering add-on](https://gravityview.co/extensions/advanced-filter/). -* **Background Processing** – generating PDFs on form submission can be time consuming. [Offload it to a background process](https://docs.gravitypdf.com/v6/users/background-processing) will ensure form submissions are processed faster. -* **Design PDFs** – developers can build their own PDF templates using HTML, CSS, and PHP [with the help of our developer documentation](https://docs.gravitypdf.com/v6/developers/start-customising). -* **Documentation and Support** – there is [extensive documentation](https://docs.gravitypdf.com/v6/users/five-minute-install) covering every feature of Gravity PDF that you can comb through, plus we provide [free general support to all users](https://gravitypdf.com/support/). - -= Unlock More Functionality = - -Pay for additional PDF designs and functionality [from our online store](https://gravitypdf.com/store/). - -* **New Designs** – get access to 9 additional universal designs, 6 certificates, 6 invoices, and 3 letter styles -* **Additional customizations** – watermark PDFs with your own logo or text, control fields that should be displayed per PDF, add field descriptions, display all checkbox or radio field options, add notes, show field values instead of labels, and hide the product table -* **On-screen Preview** – allow users to preview the PDF before form submission (and optionally payment) so they can see what the end result will be. This is a great feature for capturing e-signatures, selling PDF reports / certificates / gift cards, or providing an on-screen proof before the PDF is sent to the printers (perfect for business cards). -* **Bulk Download** - search, filter, and select entries and then zip up all your PDFs and download all together in a convenient zip file -* **Smart Loading Indicator** - improve the UX for your users when generating complex PDFs that take time to create. -* **GravityView** - turn [GravityView](https://www.gravitykit.com/products/gravityview/) into a drag-and-drop PDF builder for your Single Entry View Layouts. -* **GFChart** - create PDF reports that display pie, bar, or column charts with aggregate Gravity Forms data [using GFChart](https://gfchart.com). -* **30-Day Refund Guarantee** – Purchase with confidence knowing when you buy a product from our store that you can get a refund within 30 days, for any reason. - -= Hire the Experts = - -Need a tailor-made solution for Gravity PDF that solves complex business problems? Our team of experienced developers have helped thousands of businesses like yours to accomplish these goals. We can even fill existing PDFs like government forms, without sending your sensitive entry data to a third-party server! [Find out more](https://gravitypdf.com/bespoke/). - -= Documentation & Support = - -[We have extensive documentation on using Gravity PDF](https://docs.gravitypdf.com/v6/users/five-minute-install/), and our friendly support team provides [FREE basic support via GravityPDF.com](https://gravitypdf.com/support/#contact-support). - -= Contribute = - -All development for Gravity PDF [is handled via GitHub](https://github.com/GravityPDF/gravity-pdf/). Opening new issues or submitting a pull request is welcome. - -Keep up to date with Gravity PDF by [subscribing to the newsletter](https://gravitypdf.com/signup/), [following us on Twitter/X](https://twitter.com/gravitypdf), [subscribing to our YouTube channel](https://www.youtube.com/gravitypdf), and [liking us on Facebook](https://www.facebook.com/gravitypdf). - -If you enjoy using the software [we'd love it if you could give us a review!](https://www.g2.com/products/gravity-pdf/reviews) - -== Installation == - -Gravity PDF can be run on most modern shared web hosting without any issues. It requires **PHP 7.3+** and at least 128MB of WP Memory. You'll also need to be running WordPress 5.3+ and have [Gravity Forms 2.5+](https://rocketgenius.pxf.io/c/1211356/445235/7938) (affiliate link). - -[You'll find detailed installation instructions at docs.gravitypdf.com](https://docs.gravitypdf.com/v6/users/five-minute-install). - -**Disclaimers** - -* When you activate Gravity PDF on your website and Gravity Forms isn't installed a notice will be displayed in the admin area that includes an affiliate link to the Gravity Forms website. -* After activating the plugin you will be prompted to [run the Core Font Installation tool](https://docs.gravitypdf.com/v6/users/core-pdf-fonts) so Gravity PDF can function correctly. This tool will download the fonts [from a public _GitHub_ repository (maintained by Gravity PDF)](https://github.com/gravityPDF/mpdf-core-fonts). For further information about _GitHub_ you can refer to their [Terms of Service](https://docs.github.com/en/site-policy/github-terms/github-terms-of-service) and/or [Privacy Statement](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement#the-short-version). -* [A Help page is provided in the plugin's settings](https://docs.gravitypdf.com/v6/users/global-settings#help-tab) with an instant search feature [of the Gravity PDF documentation](https://docs.gravitypdf.com/v6/users/five-minute-install/), and the search is powered by _Algolia_. For further information about _Algolia_ you can refer to their [Terms of Service](https://www.algolia.com/policies/terms/) and/or [Privacy Statement](https://www.algolia.com/policies/privacy/). - -== Frequently Asked Questions == - -= I found a security issue. How do I responsibly disclose it? = - -You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/gravity-pdf) - -= Do I need Gravity Forms to use this plugin? = - -Yes. Gravity PDF has been specifically built for Gravity Forms, and will not work without it. - -= Does Gravity PDF work with any other form builder plugin? = - -No. Gravity PDF can only be used with Gravity Forms. It cannot generate PDFs for WPForms, Ninja Forms, Contact Form 7, Formidable Forms etc. - -== Screenshots == - -1. Select various PDF templates (designs), attach to Notification emails, give a unique filename using merge tags, and apply conditional logic to the PDF -2. Control the paper size, orientation, font, size, and color, and whether to layout the document in RTL mode -3. Each template (design) has unique settings that allow you to change the appearance. Common settings include: Header, Footer, Background Color and Image, display HTML Fields, the Form Title, and enable Conditional Logic for the fields. -4. Password protect PDFs, format the PDF for long-term archiving (PDF/A-1b) or printing (PDFX-1a), and adjust the access control policies. -5. Zadani is a minimalist business-style PDF design that will generate a well-spaced document great for printing. -6. Rubix uses stylish containers to create an aesthetically pleasing PDF design. -7. Focus Gravity providing a classic layout which epitomises Gravity Forms Print Preview. It’s the familiar layout you’ve come to love in PDF format. -8. Blank Slate provides a print-friendly PDF design focused solely on the user-submitted data. -9. View individual PDFs on Gravity Forms Entry List page. -10. A flyout menu is shown when multiple PDFs are configured on a form when viewing on the Entry List page. -11. View or Download PDFs on the Gravity Forms Entry Details page from the _PDFs_ metabox. -12. The Font Manager allows you to add, update, search, select, and delete custom fonts for use with Gravity PDF. -13. Design your own PDF templates and install via the PDF Template Manager. Or purchase a design from our online store. -14. Get detailed info about the state of Gravity PDF on your site from Gravity Forms System Status page -15. Easily uninstall and delete all Gravity PDF data from your website -16. A bunch of paid PDF designs are available, as well as additional functionality. - -== Changelog == - -= 6.13.0 = -* 🔒 Security: Switch from cURL to wp_safe_remote_get() when getting remote assets for PDFs (eg. images, CSS) -* 🔒 Security: Cleanup routine will only allow directories created and managed by Gravity PDF to be deleted -* 🐞 Bug: Ensure mPDF cache honors filesystem permissions when creating new folders -* 🐞 Bug: Don't create unnecessary ttfontdata directory in mPDF temporary directory -* 🐞 Bug: Fix PHP notices when displaying a message identifying which plugin is the non-canonical version -* 🐞 Bug: Prevent fatal error when a really old versions of GP Populate Anything is installed -* 🧹 Housekeeping: Remove mPDF temporary directory cleanup routine. Now handled directly by Gravity PDF Cron task. -* 🧹 Housekeeping: Add `gfpdf_remote_request_args` filter to let developers modify the PDF remote request configuration -* 🧹 Housekeeping: Add `gfpdf_mpdf_class_container` filter to let developers replace the `httpClient` class used by mPDF - -See CHANGELOG.txt in the plugin zip for the full changelog. From dcfbf0011d1d9ce1aae56f53099182046ef4ad28 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 28 Aug 2025 09:45:52 +1000 Subject: [PATCH 035/110] Bug: Mpdf Cache override The scoper code didn't correctly replace the base Mpdf cache with the modified version. This meant the tmp folders still received 777 permission, instead of whatever the parent folder permission is. --- .php-scoper/mpdf.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-scoper/mpdf.php b/.php-scoper/mpdf.php index 0c5da11b9..207111718 100644 --- a/.php-scoper/mpdf.php +++ b/.php-scoper/mpdf.php @@ -63,7 +63,7 @@ function( string $filePath, string $prefix, string $content ): string { } if ( basename( $filePath ) === 'ServiceFactory.php' ) { - $content = str_replace( 'new Cache(', 'new \GFPDF\Helper\Mpdf\Cache(', $content ); + $content = str_replace( "new \\$prefix\\Mpdf\\Cache(", 'new \GFPDF\Helper\Mpdf\Cache(', $content ); } /* Remove type hinting from prefixed logger */ From f9d2b76cc02370a4c706a27e85b1b6efe5550c2a Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 28 Aug 2025 10:34:29 +1000 Subject: [PATCH 036/110] Housekeeping: Temp folder permission upgrade routine Reset the PDF tmp and mPDF tmp folder permissions back to the parent folder permission, or fallback to 755. --- .../Controller_Upgrade_Routines.php | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/Controller/Controller_Upgrade_Routines.php b/src/Controller/Controller_Upgrade_Routines.php index 7c8f137cb..27bc31a8f 100644 --- a/src/Controller/Controller_Upgrade_Routines.php +++ b/src/Controller/Controller_Upgrade_Routines.php @@ -54,6 +54,10 @@ public function maybe_run_upgrade( string $old_version, string $current_version $this->update_background_processing_values(); $this->upgrade_custom_fonts(); } + + if ( version_compare( $current_version, '6.13.2', '>=' ) && version_compare( $old_version, '6.13.2', '<' ) ) { + $this->fix_tmp_folder_permissions(); + } } /** @@ -89,4 +93,47 @@ protected function upgrade_custom_fonts() { $this->options->update_option( 'custom_fonts', $fonts ); } + + /** + * Reset temporary folders permission + * + * This upgrade routine will try reset all temporary folder permissions to match the parent directory, + * or fallback to 755 if it cannot be read. + * + * @since 6.13.2 + */ + protected function fix_tmp_folder_permissions() { + $folders = [ $this->data->template_tmp_location ]; + + /* If the mPDF tmp directory is moved outside the GPDF tmp directory, fix the folder permissions separately */ + if ( strpos( $this->data->mpdf_tmp_location, $this->data->template_tmp_location ) !== 0 ) { + $folders[] = $this->data->mpdf_tmp_location; + } + + foreach ( $folders as $folder ) { + /* Try get the folder permission from the parent directory */ + $folder_perms = 0755; + $parent_dir = dirname( $folder ); + if ( is_dir( $parent_dir ) ) { + $stat = @stat( $parent_dir ); //phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged + $folder_perms = $stat ? $stat['mode'] & 0007777 : 0755; + } + + /* Get all directories in folder */ + $dir = new \RecursiveDirectoryIterator( $folder, \RecursiveDirectoryIterator::SKIP_DOTS ); + $files = new \RecursiveCallbackFilterIterator( + $dir, + function ( $current, $key, $iterator ) { + return $iterator->hasChildren() || $current->isDir(); + } + ); + $files_iterator = new \RecursiveIteratorIterator( $files, \RecursiveIteratorIterator::SELF_FIRST ); + + /* Reset permissions on folder and all subdirectories */ + chmod( $folder, $folder_perms ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_chmod + foreach ( $files_iterator as $file ) { + chmod( $file->getRealPath(), $folder_perms ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_chmod + } + } + } } From 1faa27cd6db1c407153227362a4f6a74e6e1a592 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 28 Aug 2025 10:54:27 +1000 Subject: [PATCH 037/110] Version bump --- CHANGELOG.md | 4 ++++ pdf.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c2d2435d..077cf80a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 6.13.2 +* 🐞 Bug: Fix plugin build issue preventing the mPDF cache filesystem fix (6.13.0) from working +* 🧹 Housekeeping: Add upgrade routine to reset the temporary directory permissions + ## 6.13.1 * 🐞 Bug: Only enable image PDF debugging when both `WP_DEBUG` and `WP_DEBUG_DISPLAY` constants are set to true diff --git a/pdf.php b/pdf.php index 8f20bbc1f..208ce2178 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Wed, 3 Sep 2025 08:37:43 +1000 Subject: [PATCH 038/110] Fix edge-case error in upgrade routine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the PDF tmp directory is moved to a shared folder – like the top-level `tmp` folder – permission errors can occur. Add extra error handling for this use-case. --- .../Controller_Upgrade_Routines.php | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Controller/Controller_Upgrade_Routines.php b/src/Controller/Controller_Upgrade_Routines.php index 27bc31a8f..7c2907a88 100644 --- a/src/Controller/Controller_Upgrade_Routines.php +++ b/src/Controller/Controller_Upgrade_Routines.php @@ -113,26 +113,32 @@ protected function fix_tmp_folder_permissions() { foreach ( $folders as $folder ) { /* Try get the folder permission from the parent directory */ $folder_perms = 0755; - $parent_dir = dirname( $folder ); + + /* Ignore parent folder if it is `/` */ + $parent_dir = dirname( $folder ) !== '/' ? dirname( $folder ) : $folder; if ( is_dir( $parent_dir ) ) { $stat = @stat( $parent_dir ); //phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged $folder_perms = $stat ? $stat['mode'] & 0007777 : 0755; } - /* Get all directories in folder */ - $dir = new \RecursiveDirectoryIterator( $folder, \RecursiveDirectoryIterator::SKIP_DOTS ); - $files = new \RecursiveCallbackFilterIterator( - $dir, - function ( $current, $key, $iterator ) { - return $iterator->hasChildren() || $current->isDir(); + try { + /* Get all directories in folder */ + $dir = new \RecursiveDirectoryIterator( $folder, \RecursiveDirectoryIterator::SKIP_DOTS ); + $files = new \RecursiveCallbackFilterIterator( + $dir, + function ( $current, $key, $iterator ) { + return $iterator->hasChildren() || $current->isDir(); + } + ); + $files_iterator = new \RecursiveIteratorIterator( $files, \RecursiveIteratorIterator::SELF_FIRST ); + + /* Reset permissions on folder and all subdirectories */ + @chmod( $folder, $folder_perms ); // phpcs:ignore + foreach ( $files_iterator as $file ) { + @chmod( $file->getRealPath(), $folder_perms ); // phpcs:ignore } - ); - $files_iterator = new \RecursiveIteratorIterator( $files, \RecursiveIteratorIterator::SELF_FIRST ); - - /* Reset permissions on folder and all subdirectories */ - chmod( $folder, $folder_perms ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_chmod - foreach ( $files_iterator as $file ) { - chmod( $file->getRealPath(), $folder_perms ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_chmod + } catch ( \Exception $e ) { + // do nothing } } } From 2627ab04eae0370b9ad781a235bcfd706b37ffe0 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 3 Sep 2025 09:47:51 +1000 Subject: [PATCH 039/110] Remove version number from PDF meta --- src/Helper/Helper_PDF.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Helper/Helper_PDF.php b/src/Helper/Helper_PDF.php index 03ce07b27..44af5cdf3 100644 --- a/src/Helper/Helper_PDF.php +++ b/src/Helper/Helper_PDF.php @@ -453,7 +453,7 @@ protected function set_metadata() { */ public function set_creator( $text = '' ) { if ( empty( $text ) ) { - $this->mpdf->SetCreator( 'Gravity PDF v' . PDF_EXTENDED_VERSION . '. https://gravitypdf.com' ); + $this->mpdf->SetCreator( 'Gravity PDF, gravitypdf.com' ); } else { $this->mpdf->SetCreator( $text ); } @@ -646,6 +646,8 @@ protected function begin_pdf() { 'orientation' => $this->orientation, 'img_dpi' => isset( $this->settings['image_dpi'] ) ? (int) $this->settings['image_dpi'] : 96, + + 'exposeVersion' => false, ], $this->form, $this->entry, From 60c920675e088d5e758b62e6612dc4a04a83e48f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 3 Sep 2025 11:18:32 +1000 Subject: [PATCH 040/110] Fix PHP Array to String Conversion Error Guard against arrays when checking `page` and `subview` URL params in admin area --- src/Helper/Helper_Misc.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/Helper/Helper_Misc.php b/src/Helper/Helper_Misc.php index c82c67d4e..f5a1aaad8 100644 --- a/src/Helper/Helper_Misc.php +++ b/src/Helper/Helper_Misc.php @@ -80,15 +80,26 @@ public function __construct( LoggerInterface $log, Helper_Abstract_Form $gform, * */ public function is_gfpdf_page() { - /* phpcs:disable WordPress.Security.NonceVerification.Recommended */ - if ( is_admin() && ( ! empty( $_GET['page'] ) || ! empty( $_GET['subview'] ) ) ) { - if ( strpos( $_GET['page'] ?? '', 'gfpdf-' ) === 0 || strtoupper( $_GET['subview'] ?? '' ) === 'PDF' ) { - return true; - } + if ( ! is_admin() ) { + return false; } - /* phpcs:enable */ - return false; + $page = $_GET['page'] ?? ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + $subview = $_GET['subview'] ?? ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended + + if ( empty( $page ) && empty( $subview ) ) { + return false; + } + + if ( ! is_string( $page ) || ! is_string( $subview ) ) { + return false; + } + + if ( strpos( $page, 'gfpdf-' ) !== 0 && strtoupper( $subview ) !== 'PDF' ) { + return false; + } + + return true; } /** From dd4ca17845ba98ee34bae9c3ec719cb99df93721 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 4 Sep 2025 08:13:37 +1000 Subject: [PATCH 041/110] Version bump --- CHANGELOG.md | 5 +++++ pdf.php | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 077cf80a7..2a95d2b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 6.13.3 +* 🔒 Security: Remove the mPDF and Gravity PDF version numbers in the PDF metadata +* 🐞Bug: Resolve PHP error in 6.13.2 upgrade routine if the temporary PDF directory has been incorrectly set to a shared system folder +* 🐞Bug: Resolve PHP error if the `page` or `subview` admin URL parameters are arrays + ## 6.13.2 * 🐞 Bug: Fix plugin build issue preventing the mPDF cache filesystem fix (6.13.0) from working * 🧹 Housekeeping: Add upgrade routine to reset the temporary directory permissions diff --git a/pdf.php b/pdf.php index 208ce2178..9632d601a 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Tue, 23 Sep 2025 10:43:56 +1000 Subject: [PATCH 042/110] Resolve conflict with Event Expresso plugin The EE_Front_Controller::get_request runs on the `parse_request` hook with a priority of 1. For whatever reason, this hook also removes itself when it runs. Under specific circumstances, WordPress will skip hooks on priority 10 due to this removal. To workaround this bug this PR moves our own `parse_request` hooks to priority 0. --- src/Controller/Controller_PDF.php | 4 ++-- tests/phpunit/unit-tests/test-pdf.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Controller/Controller_PDF.php b/src/Controller/Controller_PDF.php index a9c89de52..32534f172 100644 --- a/src/Controller/Controller_PDF.php +++ b/src/Controller/Controller_PDF.php @@ -117,8 +117,8 @@ public function init() { */ public function add_actions() { /* Process PDF if needed */ - add_action( 'parse_request', [ $this, 'process_legacy_pdf_endpoint' ] ); /* legacy PDF endpoint */ - add_action( 'parse_request', [ $this, 'process_pdf_endpoint' ] ); /* new PDF endpoint */ + add_action( 'parse_request', [ $this, 'process_legacy_pdf_endpoint' ], 1 ); /* legacy PDF endpoint */ + add_action( 'parse_request', [ $this, 'process_pdf_endpoint' ], 1 ); /* new PDF endpoint */ /* Allow custom PDF tags / CSS */ add_action( 'gfpdf_pre_pdf_generation', [ $this, 'add_pre_pdf_hooks' ] ); diff --git a/tests/phpunit/unit-tests/test-pdf.php b/tests/phpunit/unit-tests/test-pdf.php index 522af1434..3ba4d67b6 100644 --- a/tests/phpunit/unit-tests/test-pdf.php +++ b/tests/phpunit/unit-tests/test-pdf.php @@ -107,8 +107,8 @@ private function create_form_and_entries() { * @since 4.0 */ public function test_actions() { - $this->assertSame( 10, has_action( 'parse_request', [ $this->controller, 'process_legacy_pdf_endpoint' ] ) ); - $this->assertSame( 10, has_action( 'parse_request', [ $this->controller, 'process_pdf_endpoint' ] ) ); + $this->assertSame( 1, has_action( 'parse_request', [ $this->controller, 'process_legacy_pdf_endpoint' ] ) ); + $this->assertSame( 1, has_action( 'parse_request', [ $this->controller, 'process_pdf_endpoint' ] ) ); $this->assertSame( 10, From 7576480ad97ef2415e7bf0ce6ea62c32cd7a9007 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 23 Sep 2025 11:28:18 +1000 Subject: [PATCH 043/110] Version bump --- CHANGELOG.md | 3 +++ pdf.php | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a95d2b8b..d90971525 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 6.13.4 +* 🐞Bug: Resolve PDF View/Download issue if both Event Espresso and LifterLMS plugin are installed + ## 6.13.3 * 🔒 Security: Remove the mPDF and Gravity PDF version numbers in the PDF metadata * 🐞Bug: Resolve PHP error in 6.13.2 upgrade routine if the temporary PDF directory has been incorrectly set to a shared system folder diff --git a/pdf.php b/pdf.php index 9632d601a..5bbd06409 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Fri, 17 Oct 2025 10:35:52 +1100 Subject: [PATCH 044/110] Ensure background queue uses correct entry when resending notifications Also optimizes the queue so the same PDF isn't generated multiple times --- src/Controller/Controller_Pdf_Queue.php | 76 +++++++++++++++---- src/bootstrap.php | 2 +- .../Controller/Test_Controller_Pdf_Queue.php | 50 ++++++------ 3 files changed, 89 insertions(+), 39 deletions(-) diff --git a/src/Controller/Controller_Pdf_Queue.php b/src/Controller/Controller_Pdf_Queue.php index 6392ea669..7f30e11cf 100644 --- a/src/Controller/Controller_Pdf_Queue.php +++ b/src/Controller/Controller_Pdf_Queue.php @@ -54,10 +54,18 @@ class Controller_Pdf_Queue extends Helper_Abstract_Controller { */ protected $queue; + /** + * @var Helper_Form + * + * @since 6.13.5 + */ + protected $form; + /** * @var array An array containing the notification objects to be sent using background processing during a request * * @since 6.11.0 + * @since 6.13.5 Group by form ID and Entry ID [ formId => [ entryId => [] ] ] */ protected $form_async_notifications = []; @@ -70,11 +78,12 @@ class Controller_Pdf_Queue extends Helper_Abstract_Controller { * * @since 5.0 */ - public function __construct( Helper_Pdf_Queue $queue, Model_PDF $model_pdf, LoggerInterface $log ) { + public function __construct( Helper_Pdf_Queue $queue, Model_PDF $model_pdf, LoggerInterface $log, Helper_Form $form ) { /* Assign our internal variables */ $this->log = $log; $this->model_pdf = $model_pdf; $this->queue = $queue; + $this->form = $form; } /** @@ -87,9 +96,10 @@ public function __construct( Helper_Pdf_Queue $queue, Model_PDF $model_pdf, Logg public function init() { add_filter( 'gform_disable_notification', [ $this, 'maybe_disable_submission_notifications' ], 9999, 5 ); add_action( 'gform_after_submission', [ $this, 'queue_async_form_submission_tasks' ], 5, 2 ); + add_action( 'gform_after_submission', [ $this, 'dispatch_queue' ], 100 ); add_filter( 'gform_disable_resend_notification', [ $this, 'maybe_disable_resend_notifications' ], 10, 4 ); - add_action( 'gform_post_resend_all_notifications', [ $this, 'queue_dispatch_resend_notification_tasks' ], 10, 2 ); + add_action( 'gform_post_resend_all_notifications', [ $this, 'queue_dispatch_resend_notification_tasks' ] ); } /** @@ -161,7 +171,15 @@ public function maybe_disable_resend_notifications( $is_disabled, $notification, protected function should_send_async_notification( $is_disabled, $notification, $form, $entry ) { $send_async_notification = $this->do_we_disable_notification( $is_disabled, $notification, $form, $entry ); if ( $send_async_notification ) { - $this->form_async_notifications[] = $notification; + if ( ! isset( $this->form_async_notifications[ $form['id'] ] ) ) { + $this->form_async_notifications[ $form['id'] ] = []; + } + + if ( ! isset( $this->form_async_notifications[ $form['id'] ][ $entry['id'] ] ) ) { + $this->form_async_notifications[ $form['id'] ][ $entry['id'] ] = []; + } + + $this->form_async_notifications[ $form['id'] ][ $entry['id'] ][] = $notification; } return $send_async_notification; @@ -207,6 +225,7 @@ public function do_we_disable_notification( $is_disabled, $notification, $form, * @param array $form * * @since 5.0 + * @since 6.13.5 Move queue dispatch to self::queue_async_form_submission_dispatch() */ public function queue_async_form_submission_tasks( $entry, $form ) { $this->queue_async_tasks( $form, $entry ); @@ -214,20 +233,46 @@ public function queue_async_form_submission_tasks( $entry, $form ) { if ( count( $this->queue->get_data() ) > 0 ) { $this->queue_cleanup_task( $form, $entry ); } - - $this->dispatch_queue(); } /** * Queue and send the notifications after the resend notification process has completed * - * @param array $form - * @param array $entry - * * @since 5.0 + * @since 6.13.5 $form and $entry arguments ignored and now set in self::should_send_async_notification() */ - public function queue_dispatch_resend_notification_tasks( $form, $entry ) { - $this->queue_async_form_submission_tasks( $entry, $form ); + public function queue_dispatch_resend_notification_tasks( $form = null, $entry = null ) { + if ( ! is_null( $entry ) ) { + _doing_it_wrong( __METHOD__, '$entry argument ignored and now set in self::should_send_async_notification()', '6.13.5' ); + } + + /* loop over all form/entries */ + foreach ( $this->form_async_notifications as $form_id => $entry_data ) { + $form = $this->form->get_form( $form_id ); + if ( ! $form ) { + $this->log->error( 'Form not found', $form_id ); + continue; + } + + $entry_ids = array_keys( $entry_data ); + foreach ( $entry_ids as $entry_id ) { + $entry = $this->form->get_entry( $entry_id ); + if ( is_wp_error( $entry ) ) { + $this->log->error( + 'Entry not found', + [ + 'entry_id' => $entry_id, + 'exception' => $entry->get_error_message() , + ] + ); + continue; + } + + $this->queue_async_form_submission_tasks( $entry, $form ); + } + } + + $this->dispatch_queue(); } /** @@ -241,13 +286,12 @@ public function queue_dispatch_resend_notification_tasks( $form, $entry ) { * @since 6.11.0 */ public function queue_async_tasks( $form, $entry ) { - foreach ( $this->form_async_notifications as $notification ) { - $tasks = $this->get_queue_tasks( $entry, $form, [ $notification ] ); + $notifications = $this->form_async_notifications[ $form['id'] ][ $entry['id'] ] ?? []; + $tasks = $this->get_queue_tasks( $entry, $form, $notifications ); - /* Push each task individually for forwards compatibility with new Background Processing update */ - foreach ( $tasks as $task ) { - $this->queue->push_to_queue( [ $task ] ); - } + /* Push each task individually for forwards compatibility with new Background Processing update */ + foreach ( $tasks as $task ) { + $this->queue->push_to_queue( [ $task ] ); } } diff --git a/src/bootstrap.php b/src/bootstrap.php index fff8efdbe..85c5d3d2d 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -939,7 +939,7 @@ public function add_admin_messages() { public function async_pdfs() { $queue = new Helper\Helper_Pdf_Queue( $this->log ); $model_pdf = $this->singleton->get_class( 'Model_PDF' ); - $class = new Controller\Controller_Pdf_Queue( $queue, $model_pdf, $this->log ); + $class = new Controller\Controller_Pdf_Queue( $queue, $model_pdf, $this->log, $this->gform ); if ( $this->options->get_option( 'background_processing', 'No' ) === 'Yes' ) { $class->init(); diff --git a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php index 0b786b107..534897f6e 100644 --- a/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php +++ b/tests/phpunit/unit-tests/Controller/Test_Controller_Pdf_Queue.php @@ -66,7 +66,7 @@ public function set_up() { $this->queue_mock->method( 'save' ) ->willReturn( $this->queue_mock ); - $this->controller = new Controller_Pdf_Queue( $this->queue_mock, $model_pdf, $gfpdf->log ); + $this->controller = new Controller_Pdf_Queue( $this->queue_mock, $model_pdf, $gfpdf->log, $gfpdf->gform ); } /** @@ -277,28 +277,26 @@ public function test_maybe_disable_notifications() { */ public function test_queue_async_form_submission_tasks() { $results = $this->create_form_and_entries(); - $entry = $results['entry']; $form = $results['form']; + $entry = $results['entry']; $form['notifications']['1254123223'] = $form['notifications']['54bca349732b8']; $form['notifications']['54bca349732b8']['isActive'] = true; - foreach( $form['notifications'] as $notification ) { + /* Queue multiple entry notifications */ + foreach ( $form['notifications'] as $notification ) { $this->controller->maybe_disable_submission_notifications( false, $notification, $form, $entry ); } - $this->controller->queue_async_form_submission_tasks( $entry, $form ); $queue = $this->queue_mock->get_data(); - $this->assertCount( 7, $queue ); + $this->assertCount( 5, $queue ); - $this->assertStringContainsString( 'create_pdf', $queue[0][0]['func'] ); - $this->assertStringContainsString( 'create_pdf', $queue[1][0]['func'] ); - $this->assertStringContainsString( 'send_notification', $queue[2][0]['func'] ); - $this->assertStringContainsString( 'create_pdf', $queue[3][0]['func'] ); - $this->assertStringContainsString( 'create_pdf', $queue[4][0]['func'] ); - $this->assertStringContainsString( 'send_notification', $queue[5][0]['func'] ); - $this->assertStringContainsString( 'cleanup_pdfs', $queue[6][0]['func'] ); + $this->assertStringContainsString( 'create-pdf-1-1', $queue[0][0]['id'] ); + $this->assertStringContainsString( 'create-pdf-1-1', $queue[1][0]['id'] ); + $this->assertStringContainsString( 'send-notification-1-1', $queue[2][0]['id'] ); + $this->assertStringContainsString( 'send-notification-1-1', $queue[3][0]['id'] ); + $this->assertStringContainsString( 'cleanup-pdf-1-1', $queue[4][0]['id'] ); } /** @@ -308,22 +306,30 @@ public function test_queue_async_form_submission_tasks() { */ public function test_queue_async_resend_notification_tasks() { $results = $this->create_form_and_entries(); - $entry = $results['entry']; $form = $results['form']; $form['notifications']['54bca349732b8']['isActive'] = true; - foreach( $form['notifications'] as $notification ) { - $this->controller->maybe_disable_resend_notifications( false, $notification, $form, $entry ); + foreach( $GLOBALS['GFPDF_Test']->entries['all-form-fields'] as $entry ) { + foreach ( $form['notifications'] as $notification ) { + $this->controller->maybe_disable_submission_notifications( false, $notification, $form, $entry ); + } } - $this->controller->queue_dispatch_resend_notification_tasks( $form, $entry ); + $this->controller->queue_dispatch_resend_notification_tasks(); $queue = $this->queue_mock->get_data(); - $this->assertStringContainsString( 'create_pdf', $queue[0][0]['func'] ); - $this->assertStringContainsString( 'create_pdf', $queue[1][0]['func'] ); - $this->assertStringContainsString( 'send_notification', $queue[2][0]['func'] ); - $this->assertStringContainsString( 'cleanup_pdfs', $queue[3][0]['func'] ); + $this->assertCount( 28, $queue ); + + $this->assertStringContainsString( 'create-pdf-1-1', $queue[0][0]['id'] ); + $this->assertStringContainsString( 'create-pdf-1-1', $queue[1][0]['id'] ); + $this->assertStringContainsString( 'send-notification-1-1', $queue[2][0]['id'] ); + $this->assertStringContainsString( 'cleanup-pdf-1-1', $queue[3][0]['id'] ); + + $this->assertStringContainsString( 'create-pdf-1-7', $queue[24][0]['id'] ); + $this->assertStringContainsString( 'create-pdf-1-7', $queue[25][0]['id'] ); + $this->assertStringContainsString( 'send-notification-1-7', $queue[26][0]['id'] ); + $this->assertStringContainsString( 'cleanup-pdf-1-7', $queue[27][0]['id'] ); } /** @@ -337,12 +343,12 @@ public function test_queue_dispatch_resend_notification_tasks() { ->method( 'dispatch' ) ->willReturn( $this->queue_mock ); - $this->controller->queue_dispatch_resend_notification_tasks( [ 'id' => 0 ], [ 'id' => 0 ] ); + $this->controller->queue_dispatch_resend_notification_tasks(); $this->assertSame( 0, $spy->getInvocationCount() ); $this->queue_mock->push_to_queue( 'item' ); - $this->controller->queue_dispatch_resend_notification_tasks( [ 'id' => 0 ], [ 'id' => 0 ]); + $this->controller->queue_dispatch_resend_notification_tasks(); $this->assertSame( 1, $spy->getInvocationCount() ); } From af4a82bd28d624e379bf86e0c5401fcd58ab419d Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Fri, 17 Oct 2025 11:25:33 +1100 Subject: [PATCH 045/110] Remove WP.org from deployment --- .github/workflows/deployment.yml | 51 -------------------------------- 1 file changed, 51 deletions(-) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index f91d5c848..a0e89e11d 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -50,54 +50,3 @@ jobs: generate_release_notes: true append_body: true prerelease: true - - wp-build-and-deploy: - name: Build and Deploy Plugin - runs-on: ubuntu-latest - steps: - - name: Install Subversion - run: sudo apt-get update && sudo apt-get install -y subversion - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: 7.4 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Get tag - id: tag - uses: devops-actions/action-get-tag@v1.0.2 - - - name: Setup Node JS - uses: actions/setup-node@v4 - with: - node-version-file: '.nvmrc' - - - name: General debug information - run: | - npm --version - node --version - yarn --version - curl --version - git --version - svn --version - php --version - composer --version - - - name: Build - run: bash ./bin/build-wp.sh $SOURCE_TAG - env: - SOURCE_TAG: ${{steps.tag.outputs.tag}} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Deploy - run: bash ./bin/deploy.sh - env: - PLUGIN: "gravity-forms-pdf-extended" - SOURCE_TAG: ${{steps.tag.outputs.tag}} - WP_ORG_USERNAME: ${{ secrets.WP_ORG_USERNAME }} - WP_ORG_PASSWORD: ${{ secrets.WP_ORG_PASSWORD }} From 6304fdb631ba4b34f6a169d8ad1cec4fdc75aa0f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 2 Oct 2025 17:29:13 +1000 Subject: [PATCH 046/110] Close open buffers before streaming PDF This prevents any callbacks from manipulating the PDF stream when WordPress closes all buffers on shutdown e.g. translation plugins like Translatepress Also send a nosniff header, if we can (cherry picked from commit d3768cb9b9f3d6542721f1ccbbaea3d4e5d861e2) --- src/Helper/Helper_PDF.php | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Helper/Helper_PDF.php b/src/Helper/Helper_PDF.php index 44af5cdf3..0c860d365 100644 --- a/src/Helper/Helper_PDF.php +++ b/src/Helper/Helper_PDF.php @@ -311,12 +311,12 @@ public function generate() { switch ( $this->output ) { case 'DISPLAY': - $this->prevent_caching(); + $this->pre_stream_actions(); $this->mpdf->Output( $this->filename, 'I' ); exit; case 'DOWNLOAD': - $this->prevent_caching(); + $this->pre_stream_actions(); $this->mpdf->Output( $this->filename, 'D' ); exit; @@ -993,13 +993,23 @@ protected function set_pdf_security() { /** - * Ensure the PDF doesn't get cached + * Actions to run before a PDF is streamed to the browser * - * @since 4.0 + * @since 6.13.5 */ - protected function prevent_caching() { + protected function pre_stream_actions() { + /* Close any open buffers to prevent anything from modifying the binary PDF stream */ + while ( ob_get_level() > 0 ) { + ob_end_clean(); + } + + /* Define the PDF as not cacheable, for plugins that support it */ if ( ! defined( 'DONOTCACHEPAGE' ) ) { define( 'DONOTCACHEPAGE', true ); } + + if ( ! headers_sent() ) { + send_nosniff_header(); + } } } From 8a4ed85eae7e2a34b458f8c0cd728d2d6715260d Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Fri, 17 Oct 2025 11:30:11 +1100 Subject: [PATCH 047/110] Version bump --- CHANGELOG.md | 4 ++++ pdf.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d90971525..a6cdc7be7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 6.13.5 +* 🐞Bug: Ensure background queue uses correct entry data when resending notifications +* 🐞Bug: Prevent plugins corrupting PDF data when viewing/downloading (via output buffer) + ## 6.13.4 * 🐞Bug: Resolve PDF View/Download issue if both Event Espresso and LifterLMS plugin are installed diff --git a/pdf.php b/pdf.php index 5bbd06409..e117ae793 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Tue, 28 Oct 2025 14:40:05 +1100 Subject: [PATCH 048/110] Add support for PSR Log v1/v2/v3 --- .php-scoper/querypath.php | 4 - .php-scoper/upload.php | 4 - .php-scoper/url-signer.php | 4 - bin/vendor-prefix.sh | 1 + src/Helper/Helper_Logger.php | 173 +----------- src/Helper/Log/Logger.php | 322 +++++++++++++++++++++++ src/Helper/Log/MonoLoggerPsrLog2And3.php | 73 +++++ tests/phpunit/unit-tests/test-logger.php | 46 ++++ 8 files changed, 445 insertions(+), 182 deletions(-) create mode 100644 src/Helper/Log/Logger.php create mode 100644 src/Helper/Log/MonoLoggerPsrLog2And3.php diff --git a/.php-scoper/querypath.php b/.php-scoper/querypath.php index 675887f92..970429f84 100644 --- a/.php-scoper/querypath.php +++ b/.php-scoper/querypath.php @@ -49,8 +49,4 @@ function( string $filePath, string $prefix, string $content ): string { ); }, ], - - 'whitelist' => [ - 'Psr\*', - ], ]; diff --git a/.php-scoper/upload.php b/.php-scoper/upload.php index 4c77fb462..05c930491 100644 --- a/.php-scoper/upload.php +++ b/.php-scoper/upload.php @@ -34,8 +34,4 @@ * For more see: https://github.com/humbug/php-scoper#patchers */ 'patchers' => [], - - 'whitelist' => [ - 'Psr\*', - ], ]; diff --git a/.php-scoper/url-signer.php b/.php-scoper/url-signer.php index 63543977c..14098abb8 100644 --- a/.php-scoper/url-signer.php +++ b/.php-scoper/url-signer.php @@ -36,8 +36,4 @@ * For more see: https://github.com/humbug/php-scoper#patchers */ 'patchers' => [], - - 'whitelist' => [ - 'Psr\*', - ], ]; diff --git a/bin/vendor-prefix.sh b/bin/vendor-prefix.sh index b09488a6a..7f72487e3 100644 --- a/bin/vendor-prefix.sh +++ b/bin/vendor-prefix.sh @@ -45,5 +45,6 @@ eval "rm -Rf ${PLUGIN_DIR}vendor/myclabs" # Do this at the end as we have multiple vendor packages used eval "rm -Rf ${PLUGIN_DIR}vendor/gravitypdf" +eval "rm -Rf ${PLUGIN_DIR}vendor/psr" eval "$COMPOSER dump-autoload --optimize --working-dir ${PLUGIN_DIR}" diff --git a/src/Helper/Helper_Logger.php b/src/Helper/Helper_Logger.php index adbdf9c5b..ae73cdb67 100644 --- a/src/Helper/Helper_Logger.php +++ b/src/Helper/Helper_Logger.php @@ -2,16 +2,7 @@ namespace GFPDF\Helper; -use Exception; -use GFFormsModel; -use GFLogging; -use GFPDF_Vendor\Monolog\Formatter\LineFormatter; -use GFPDF_Vendor\Monolog\Handler\NullHandler; -use GFPDF_Vendor\Monolog\Handler\StreamHandler; -use GFPDF_Vendor\Monolog\Logger; -use GFPDF_Vendor\Monolog\Processor\IntrospectionProcessor; -use GFPDF_Vendor\Monolog\Processor\MemoryPeakUsageProcessor; -use Psr\Log\LoggerInterface; +use GFPDF\Helper\Log\Logger; /** * @package Gravity PDF @@ -25,166 +16,8 @@ } /** - * An abstract class to assist with logging + * @since 6.14.0 Moved logic into \GFPDF\Helper\Log\Logger */ -class Helper_Logger { +class Helper_Logger extends Logger { - /** - * @var string - * - * @since 4.2 - */ - protected $slug; - - /** - * @var string - * - * @since 4.2 - */ - protected $name; - - /** - * Holds our log class - * - * @var LoggerInterface - * - * @since 4.2 - */ - protected $log; - - /** - * Helper_Logger constructor. - * - * @param string $slug - * @param string $name - * - * @since 4.2 - */ - public function __construct( $slug, $name ) { - $this->slug = $slug; - $this->name = $name; - } - - /** - * Returns the logger instance, and initiates it if needed - * - * @return Logger - * - * @since 4.2 - */ - public function get_logger() { - - if ( ! $this->log instanceof Logger ) { - $this->setup_logger(); - add_filter( 'gform_logging_supported', [ $this, 'register_logger_with_gf' ] ); - } - - return $this->log; - } - - /** - * Register our plugin with Gravity Form's Logger - * - * @param array $loggers - * - * @return array - * - * @since 4.2 - */ - public function register_logger_with_gf( $loggers ) { - $loggers[ $this->slug ] = $this->name; - - return $loggers; - } - - /** - * Initialise our logging class (we're using Monolog instead of Gravity Form's KLogger) - * and set up appropriate handlers based on the logger settings - * - * @return void - * - * @since 4.2 - */ - protected function setup_logger() { - - /* Setup our Gravity Forms local file logger, if enabled */ - try { - $this->log = new Logger( $this->slug ); - $this->log->setTimezone( wp_timezone() ); - - $this->setup_gravityforms_logging(); - - /* Check if we have a handler pushed and add our Introspection and Memory Peak usage processors */ - if ( count( $this->log->getHandlers() ) > 0 && substr( php_sapi_name(), 0, 3 ) !== 'cli' ) { - $this->log->pushProcessor( new IntrospectionProcessor() ); - $this->log->pushProcessor( new MemoryPeakUsageProcessor() ); - - return; - } - } catch ( Exception $e ) { - /* do nothing */ - } - - /* Disable logging if using CLI, or if Gravity Forms logging isn't enabled */ - $this->log->pushHandler( new NullHandler( Logger::INFO ) ); /* throw logs away */ - } - - /** - * Setup Gravity Forms logging, if currently enabled by the user - * - * @return void - * - * @since 4.2 - */ - protected function setup_gravityforms_logging() { - - /* Check if Gravity Forms logging is enabled and push stream logging */ - if ( class_exists( 'GFLogging' ) ) { - - /* - * Get the current plugin logger settings and check if it's enabled - * The new version of the logger uses the add-on storage method, while the old one stores it in gf_logging_settings - * so we'll test which settings we should use and get the appropriate log level - */ - if ( ! get_option( 'gform_enable_logging' ) && ( ! defined( 'GF_LOGGING_VERSION' ) || version_compare( GF_LOGGING_VERSION, '1.1', '<' ) ) ) { - $settings = get_option( 'gf_logging_settings' ); - - $log_level = (int) rgar( $settings, $this->slug ); - $log_filename = GFFormsModel::get_upload_root() . 'logs/' . $this->slug . '.txt'; - } else { - $gf_logger = GFLogging::get_instance(); - $gf_logger_settings = $gf_logger->get_plugin_settings(); - - if ( isset( $gf_logger_settings[ $this->slug ]['enable'] ) && $gf_logger_settings[ $this->slug ]['enable'] ) { - $log_level = ( isset( $gf_logger_settings[ $this->slug ]['log_level'] ) ) ? (int) $gf_logger_settings[ $this->slug ]['log_level'] : 0; - $log_filename = get_option( 'gform_enable_logging' ) ? $gf_logger->get_log_file_name( $this->slug ) : $gf_logger::get_log_file_name( $this->slug ); - } - } - - /* Enable logging if not equivalent to 0 or non-existent and not level 6 ("off" in GF world) */ - if ( ! empty( $log_level ) && $log_level !== 6 ) { - - /* Check log file can be created */ - $log_path = dirname( $log_filename ); - if ( ! wp_mkdir_p( $log_path ) ) { - return; - } - - if ( ! @touch( $log_filename ) ) { // phpcs:ignore - return; - } - - /* Convert Gravity Forms log levels to the appropriate Monolog level */ - $monolog_level = ( $log_level === 4 ) ? Logger::ERROR : Logger::DEBUG; - - /* Setup our stream and change the format to more-suit Gravity Forms */ - $formatter = new LineFormatter( "%datetime% - %level_name% --> %message%\n|--> %context%\n|--> %extra%\n", 'Y-m-d H:i:s (P)' ); - $stream = new StreamHandler( $log_filename, $monolog_level ); - $stream->setFormatter( $formatter ); - - /* Add our log file stream */ - $this->log->pushHandler( $stream ); - } - } - } } diff --git a/src/Helper/Log/Logger.php b/src/Helper/Log/Logger.php new file mode 100644 index 000000000..13388c3b6 --- /dev/null +++ b/src/Helper/Log/Logger.php @@ -0,0 +1,322 @@ +slug = $slug; + $this->name = $name; + } + + /** + * Returns the logger instance, and initiates it if needed + * + * @return LoggerInterface + * + * @since 4.2 + */ + public function get_logger() { + + if ( ! isset( $this->log ) ) { + $this->setup_logger(); + add_filter( 'gform_logging_supported', [ $this, 'register_logger_with_gf' ] ); + } + + return $this->log; + } + + /** + * Register our plugin with Gravity Form's Logger + * + * @param array $loggers + * + * @return array + * + * @since 4.2 + */ + public function register_logger_with_gf( $loggers ) { + $loggers[ $this->slug ] = $this->name; + + return $loggers; + } + + /** + * Initialise our logging class (we're using Monolog instead of Gravity Form's KLogger) + * and set up appropriate handlers based on the logger settings + * + * @return void + * + * @since 4.2 + */ + protected function setup_logger() { + + /* Setup our Gravity Forms local file logger, if enabled */ + try { + $this->log = $this->get_monolog(); + $this->log->setTimezone( wp_timezone() ); + + $this->setup_gravityforms_logging(); + + /* Check if we have a handler pushed and add our Introspection and Memory Peak usage processors */ + if ( count( $this->log->getHandlers() ) > 0 && substr( php_sapi_name(), 0, 3 ) !== 'cli' ) { + $this->log->pushProcessor( new IntrospectionProcessor( MonoLoggerPsrLog1::DEBUG, [ 'MonoLogger' ] ) ); + $this->log->pushProcessor( new MemoryPeakUsageProcessor() ); + + return; + } + } catch ( Exception $e ) { + /* do nothing */ + } + + /* Disable logging if using CLI, or if Gravity Forms logging isn't enabled */ + $this->log->pushHandler( new NullHandler( MonoLoggerPsrLog1::INFO ) ); /* throw logs away */ + } + + /** + * Setup Gravity Forms logging, if currently enabled by the user + * + * @return void + * + * @since 4.2 + * @since 6.14.0 Dropped support for separate GF Logging plugin + Gravity Forms < 2.5 + */ + protected function setup_gravityforms_logging() { + /* Skip if dependency or setting not available/enabled */ + if ( ! class_exists( 'GFLogging' ) || ! get_option( 'gform_enable_logging' ) ) { + return; + } + + $gf_logger = GFLogging::get_instance(); + $gf_logger_settings = $gf_logger->get_plugin_settings(); + + /* Check logging is enabled for this plugin */ + if ( empty( $gf_logger_settings[ $this->slug ]['enable'] ) ) { + return; + } + + $log_level = (int) ( $gf_logger_settings[ $this->slug ]['log_level'] ?? 0 ); + $log_filename = $gf_logger->get_log_file_name( $this->slug ); + + /* Skip if log level is 0 or 6 ("off" in GF world) */ + if ( empty( $log_level ) || $log_level === 6 ) { + return; + } + + /* Check log file can be created */ + $log_path = dirname( $log_filename ); + if ( ! wp_mkdir_p( $log_path ) ) { + return; + } + + if ( ! @touch( $log_filename ) ) { // phpcs:ignore + return; + } + + /* Add support for rotating logs */ + $this->rotate_logs( $log_filename ); + + /* Convert Gravity Forms log levels to the appropriate Monolog level */ + $monolog_level = $log_level === 4 ? MonoLoggerPsrLog1::ERROR : MonoLoggerPsrLog1::DEBUG; + + /* Setup our stream and change the format to more-suit Gravity Forms */ + $formatter = new LineFormatter( "%datetime% - %level_name% --> %message%\n|--> %context%\n|--> %extra%\n", 'Y-m-d H:i:s.u (P)' ); + $stream = new StreamHandler( $log_filename, $monolog_level ); + $stream->setFormatter( $formatter ); + + /* Add our log file stream */ + $this->log->pushHandler( $stream ); + } + + /** + * Clean up log files. + * + * @param string $file_path Path to log. + * + * @since 6.14.0 + * @internal copied from \GFLogging::maybe_reset_logs() + */ + protected function rotate_logs( $file_path ) { + $gmt_offset = get_option( 'gmt_offset', 0 ) * 3600; + $path = pathinfo( $file_path ); + $folder = $path['dirname'] . '/'; + $file_base = $path['filename']; + $file_ext = $path['extension']; + + /* Check size of current file. If greater than max file size, rename using time. */ + if ( is_file( $file_path ) && filesize( $file_path ) > $this->max_file_size ) { + $adjusted_date = gmdate( $this->date_format_log_file, time() + $gmt_offset ); + $new_file_name = $file_base . '_' . $adjusted_date . '.' . $file_ext; + @rename( $file_path, $folder . $new_file_name ); // phpcs:ignore + } + + /* Get files which match the base name. */ + $similar_files = \GFCommon::glob( $file_base . '*.*', $folder ); + $file_count = count( $similar_files ); + + /* Check quantity of files and delete older ones if too many. */ + if ( false !== $similar_files && $file_count > $this->max_file_count ) { + + /* Sort by date so oldest are first. */ + usort( + $similar_files, + function ( $a, $b ) { + return filemtime( $a ) - filemtime( $b ); + } + ); + + $delete_count = $file_count - $this->max_file_count; + + for ( $i = 0; $i < $delete_count; $i++ ) { + if ( is_file( $similar_files[ $i ] ) ) { + @unlink( $similar_files[ $i ] ); // phpcs:ignore + } + } + } + } + + /** + * Return a class that is compatible with the PSR/Log version loaded + * + * This compatibility layer is necessary because: + * + * - \Psr\Log\LoggerInterface is type-hinted throughout Gravity PDF + add-ons and not easily altered + * - Gravity PDF includes v1 of the Psr\Log library, which is incompatible with v2 and v3 + * - While Gravity PDF supports PHP 7.3+ the Psr\Log library cannot be upgraded from v1 + * - Other WordPress plugins are shipping Psr\Log v2 and v3 + * - A PHP declaration error occurs when Gravity PDF runs alongside Psr\Log v2 or v3 + * + * This is a temporary measure. Over time our plugins will be updated to support both \Psr\Log\LoggerInterface and '\GFPDF_Vendor\Psr\Log\LoggerInterface' and this won't be required. + * + * @return LoggerInterface + * @since 6.14.0 + * + */ + protected function get_monolog() { + static $psr_log_version; + + if ( empty( $psr_log_version ) ) { + /* Check what version of \Psr\Log is actually loaded and return a compatible version of Monolog */ + if ( trait_exists( '\Psr\Log\LoggerTrait' ) ) { + $reflected = new \ReflectionClass( '\Psr\Log\LoggerTrait' ); + $psr_log_content = file_get_contents( $reflected->getFileName() ); //phpcs:ignore + + /* Test for v3 */ + if ( strpos( $psr_log_content, 'function log($level, string|\Stringable $message, array $context = []): void;' ) !== false ) { + $psr_log_version = 3; + } + + /* Test for v2 */ + if ( strpos( $psr_log_content, 'function log($level, string|\Stringable $message, array $context = []);' ) !== false ) { + $psr_log_version = 2; + } + + /* Default to v1 when no match found */ + if ( empty( $psr_log_version ) ) { + $psr_log_version = 1; + } + } else { + /* No PSR Log library loaded. Alias namespaced v1 */ + $psr_log_version = 1; + class_alias( '\GFPDF_Vendor\Psr\Log\AbstractLogger', '\Psr\Log\AbstractLogger' ); + class_alias( '\GFPDF_Vendor\Psr\Log\InvalidArgumentException', '\Psr\Log\InvalidArgumentException' ); + class_alias( '\GFPDF_Vendor\Psr\Log\LoggerAwareInterface', '\Psr\Log\LoggerAwareInterface' ); + class_alias( '\GFPDF_Vendor\Psr\Log\LoggerAwareTrait', '\Psr\Log\LoggerAwareTrait' ); + class_alias( '\GFPDF_Vendor\Psr\Log\LoggerInterface', '\Psr\Log\LoggerInterface' ); + class_alias( '\GFPDF_Vendor\Psr\Log\LoggerTrait', '\Psr\Log\LoggerTrait' ); + class_alias( '\GFPDF_Vendor\Psr\Log\LogLevel', '\Psr\Log\LogLevel' ); + class_alias( '\GFPDF_Vendor\Psr\Log\NullLogger', '\Psr\Log\NullLogger' ); + } + } + + switch ( $psr_log_version ) { + case 1: + return new MonoLoggerPsrLog1( $this->slug ); + + case 2: + case 3: + return new MonoLoggerPsrLog2And3( $this->slug ); + } + } +} diff --git a/src/Helper/Log/MonoLoggerPsrLog2And3.php b/src/Helper/Log/MonoLoggerPsrLog2And3.php new file mode 100644 index 000000000..ce7f33530 --- /dev/null +++ b/src/Helper/Log/MonoLoggerPsrLog2And3.php @@ -0,0 +1,73 @@ +monologger = new \GFPDF_Vendor\Monolog\Logger( $slug ); + } + + public function __call( $method_name, $args ) { + return call_user_func_array( [ $this->monologger, $method_name ], $args ); + } + + public function log( $level, string|\Stringable $message, array $context = [] ): void { + $this->monologger->log( $level, $message, $context ); + } + + public function debug( string|\Stringable $message, array $context = [] ): void { + $this->monologger->debug( $message, $context ); + } + + public function info( string|\Stringable $message, array $context = [] ): void { + $this->monologger->info( $message, $context ); + } + + public function notice( string|\Stringable $message, array $context = [] ): void { + $this->monologger->notice( $message, $context ); + } + + public function warning( string|\Stringable $message, array $context = [] ): void { + $this->monologger->warning( $message, $context ); + } + + public function error( string|\Stringable $message, array $context = [] ): void { + $this->monologger->error( $message, $context ); + } + + public function critical( string|\Stringable $message, array $context = [] ): void { + $this->monologger->critical( $message, $context ); + } + + public function alert( string|\Stringable $message, array $context = [] ): void { + $this->monologger->alert( $message, $context ); + } + + public function emergency( string|\Stringable $message, array $context = [] ): void { + $this->monologger->emergency( $message, $context ); + } +} diff --git a/tests/phpunit/unit-tests/test-logger.php b/tests/phpunit/unit-tests/test-logger.php index afae28fd4..58124760b 100644 --- a/tests/phpunit/unit-tests/test-logger.php +++ b/tests/phpunit/unit-tests/test-logger.php @@ -35,6 +35,8 @@ public function set_up() { parent::set_up(); $this->logger = new Helper_Logger( 'slug', 'Name' ); + + update_option( 'gform_enable_logging', true ); } /** @@ -62,4 +64,48 @@ public function test_register_gf_logger() { $this->assertArrayHasKey( 'slug', $results ); $this->assertEquals( 'Name', $results['slug'] ); } + + /** + * @since 6.14.0 + */ + public function test_logs_rotate() { + $gf_logger = \GFLogging::get_instance(); + $dir = $gf_logger->get_log_dir(); + + /* Prepare GF logging environment */ + $gf_logger->delete_log_files(); + $gf_logger->update_plugin_settings( [ + 'slug' => [ + 'enable' => true, + 'file_name' => sha1( time() ), + 'log_level' => 3, + ] + ] ); + + $log_filename = $gf_logger->get_log_file_name( 'slug' ); + + /* Create and verify log files */ + $path = pathinfo( $log_filename ); + $file_base = $path['filename']; + $file_ext = $path['extension']; + + wp_mkdir_p( $dir ); + for ( $x = 1; $x <= 15; $x ++ ) { + $adjusted_date = gmdate( 'YmdGis', time() ); + $new_file_name = $file_base . '_' . $adjusted_date . $x . '.' . $file_ext; + touch( $dir . $new_file_name ); + } + + $files = \GFCommon::glob( '*.txt', $dir ); + $this->assertNotEmpty( $files ); + $this->assertCount( 15, $files ); + + /* Set up logger + log rotation */ + $this->logger->get_logger(); + + /* Verify logs were rotated to the maximum number allowed */ + $files = \GFCommon::glob( '*.txt', $dir ); + $this->assertNotEmpty( $files ); + $this->assertCount( 10, $files ); + } } From 263d6796c23a98e9269e89bacb31c3d6d1025d93 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 28 Oct 2025 15:34:39 +1100 Subject: [PATCH 049/110] Version bump --- CHANGELOG.md | 5 +++++ pdf.php | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6cdc7be7..d3d4d2288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 6.14.0 +* 🎉 Feature: Rotate Gravity PDF log files when Gravity Forms logging is enabled. This prevents the log file getting to large. +* 🎉 Feature: Add support for using v1, v2, and v3 of the PSR/Log Composer library with Gravity PDF +* 🐞Bug: Fix PHP error if a third-party plugin loads PSR/Log v2 or v3 + ## 6.13.5 * 🐞Bug: Ensure background queue uses correct entry data when resending notifications * 🐞Bug: Prevent plugins corrupting PDF data when viewing/downloading (via output buffer) diff --git a/pdf.php b/pdf.php index e117ae793..807b135d7 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Tue, 18 Nov 2025 17:16:23 +1100 Subject: [PATCH 050/110] Use the field type (and not the input type) in the container CSS class and gfpdf_pdf_field_content_{$type} --- src/Helper/Helper_Abstract_Fields.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Helper/Helper_Abstract_Fields.php b/src/Helper/Helper_Abstract_Fields.php index bf762b5d2..1dcfb020c 100644 --- a/src/Helper/Helper_Abstract_Fields.php +++ b/src/Helper/Helper_Abstract_Fields.php @@ -349,10 +349,10 @@ public function html( $value = '', $show_label = true ) { * @since 4.2 */ $value = apply_filters( 'gfpdf_pdf_field_content', $value, $this->field, $this->entry, $this->form, $this ); - $value = apply_filters( 'gfpdf_pdf_field_content_' . $this->field->get_input_type(), $value, $this->field, $this->entry, $this->form, $this ); + $value = apply_filters( 'gfpdf_pdf_field_content_' . $this->field->type, $value, $this->field, $this->entry, $this->form, $this ); $label = $this->get_label(); - $type = $this->field->get_input_type(); + $type = $this->field->type; $html = '

'; From 3fe0571ca8685402a495d7a98f47d245ebbc5b46 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 18 Nov 2025 17:18:15 +1100 Subject: [PATCH 051/110] Version bump --- CHANGELOG.md | 4 ++++ pdf.php | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3d4d2288..5cd2ef2c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 6.14.1 +* 🧹 Housekeeping: Use the field type (not input type) in the field class name +* 🧹 Housekeeping: Use the field type (not input type) in the `gfpdf_pdf_field_content_{$type}` filter + ## 6.14.0 * 🎉 Feature: Rotate Gravity PDF log files when Gravity Forms logging is enabled. This prevents the log file getting to large. * 🎉 Feature: Add support for using v1, v2, and v3 of the PSR/Log Composer library with Gravity PDF diff --git a/pdf.php b/pdf.php index 807b135d7..d5cdb2be2 100644 --- a/pdf.php +++ b/pdf.php @@ -1,7 +1,7 @@ Date: Tue, 18 Nov 2025 17:16:23 +1100 Subject: [PATCH 052/110] Use the field type (and not the input type) in the container CSS class and gfpdf_pdf_field_content_{$type} --- src/Helper/Fields/Field_Page.php | 2 +- src/Helper/Helper_Abstract_Fields.php | 18 +++++++++++++++--- .../Helper/Fields/Test_Field_Image_Choice.php | 10 +++++----- .../Helper/Fields/Test_Field_Multi_Choice.php | 10 +++++----- .../Helper/Fields/Test_Field_Poll.php | 2 +- .../Helper/Fields/Test_Field_Post_Category.php | 2 +- .../Fields/Test_Field_Post_Custom_Field.php | 2 +- .../Helper/Fields/Test_Field_Product.php | 8 ++++---- tests/phpunit/unit-tests/test-field-markup.php | 6 ++---- tests/phpunit/unit-tests/test-pdf.php | 2 +- 10 files changed, 36 insertions(+), 26 deletions(-) diff --git a/src/Helper/Fields/Field_Page.php b/src/Helper/Fields/Field_Page.php index 0e2b0300e..2860d756e 100644 --- a/src/Helper/Fields/Field_Page.php +++ b/src/Helper/Fields/Field_Page.php @@ -38,7 +38,7 @@ public function html( $value = '', $label = true ) { ob_start(); ?> -

+

value() ); ?>

field->type, $value, $this->field, $this->entry, $this->form, $this ); $label = $this->get_label(); - $type = $this->field->type; - $html = '
+ $html = '
'; if ( $show_label ) { @@ -413,9 +412,22 @@ public function encode_tags( $value ) { * @since 6.5 */ public function get_field_classes(): string { + + $core_classes = [ + 'gfpdf-field', + 'gfpdf-' . $this->field->get_input_type(), + ]; + + if ( $this->field->type !== $this->field->get_input_type() ) { + $core_classes[] = 'gfpdf-' . $this->field->type; + } + return implode( ' ', - array_slice( explode( ' ', $this->field->cssClass ), 0, 8 ) + array_merge( + $core_classes, + array_slice( explode( ' ', $this->field->cssClass ), 0, 8 ), + ) ); } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php index 4d64a73f9..6fa2b3d83 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Image_Choice.php @@ -139,7 +139,7 @@ public function test_radio_html() { $pdf_field = new Field_Image_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Option 2
', $html ); } @@ -153,7 +153,7 @@ public function test_radio_html_with_markup() { $pdf_field = new Field_Image_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Option 3
', $html ); /* pass user-defined string and verify response is escaped in the PDF */ @@ -165,7 +165,7 @@ public function test_radio_html_with_markup() { $pdf_field = new Field_Image_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
<em>My answer</em>
', $html ); } @@ -179,7 +179,7 @@ public function test_radio_html_with_empty_value_but_not_label() { $pdf_field = new Field_Image_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Select an option
', $html ); } @@ -226,7 +226,7 @@ public function test_checkbox_html() { $pdf_field = new Field_Image_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Checkbox Multi Choice
  • Option 1
  • Option 3
', $html ); } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php index 57ff9e2a6..48151679b 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Multi_Choice.php @@ -131,7 +131,7 @@ public function test_radio_html() { $pdf_field = new Field_Multi_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Option 2
', $html ); } @@ -145,7 +145,7 @@ public function test_radio_html_with_markup() { $pdf_field = new Field_Multi_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Option 3
', $html ); /* pass user-defined string and verify response is escaped in the PDF */ @@ -157,7 +157,7 @@ public function test_radio_html_with_markup() { $pdf_field = new Field_Multi_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
<em>My answer</em>
', $html ); } @@ -171,7 +171,7 @@ public function test_radio_html_with_empty_value_but_not_label() { $pdf_field = new Field_Multi_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Radio Multi Choice
Select an option
', $html ); } @@ -207,7 +207,7 @@ public function test_checkbox_html() { $pdf_field = new Field_Multi_Choice( $field, $entry, \GPDFAPI::get_form_class(), \GPDFAPI::get_misc_class() ); $html = $pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Checkbox Multi Choice
  • Option 1
  • Option 3
', $html ); } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php index a411dbbc8..f1b65fa65 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Poll.php @@ -53,7 +53,7 @@ public function set_up() { public function test_html() { $html = $this->pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Poll Dropdown - First Choice
', $html ); } } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php index e70deb31f..37df1cf1d 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Category.php @@ -53,7 +53,7 @@ public function set_up() { public function test_html() { $html = $this->pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Post Category
Test Category 2:30
', $html ); } } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php index e3a93755e..2d0ad06e3 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Post_Custom_Field.php @@ -53,7 +53,7 @@ public function set_up() { public function test_html() { $html = $this->pdf_field->html(); - $this->assertStringContainsString( '
', $html ); + $this->assertStringContainsString( '
Post Custom Field
post_custom_field
', $html ); } } diff --git a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Product.php b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Product.php index ba255bf82..a7f9f9039 100644 --- a/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Product.php +++ b/tests/phpunit/unit-tests/Helper/Fields/Test_Field_Product.php @@ -54,7 +54,7 @@ public function test_grouped_default_html() { $pdf_field = $this->set_products( $this->form['fields'][0] ); $html = $pdf_field->html(); - $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ">', $html ); + $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ', $html ); $this->assertStringContainsString( '
$1.00 x 50 = $50.00
', $html ); } @@ -62,7 +62,7 @@ public function test_grouped_disabled_qty_html() { $pdf_field = $this->set_products( $this->form['fields'][1] ); $html = $pdf_field->html(); - $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ">', $html ); + $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ', $html ); $this->assertStringContainsString( '
$2.00 x 1
', $html ); } @@ -70,7 +70,7 @@ public function test_grouped_linked_quantity_html() { $pdf_field = $this->set_products( $this->form['fields'][2] ); $html = $pdf_field->html(); - $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ">', $html ); + $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ', $html ); $this->assertStringContainsString( '
$3.00 x 42 = $126.00
', $html ); } @@ -78,7 +78,7 @@ public function test_grouped_option_html() { $pdf_field = $this->set_products( $this->form['fields'][4] ); $html = $pdf_field->html(); - $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ">', $html ); + $this->assertStringContainsString( 'class="gfpdf-field gfpdf-singleproduct ', $html ); $this->assertStringContainsString( '
$4.00 x 32 = $128.00
', $html ); } diff --git a/tests/phpunit/unit-tests/test-field-markup.php b/tests/phpunit/unit-tests/test-field-markup.php index 229eea8c8..208dfbf84 100644 --- a/tests/phpunit/unit-tests/test-field-markup.php +++ b/tests/phpunit/unit-tests/test-field-markup.php @@ -88,7 +88,7 @@ public function test_maximum_allowed_css_each_field(){ $field = new Field_Text( $text_field, GFAPI::get_entry( $entry_id ), GPDFAPI::get_form_class(), GPDFAPI::get_misc_class() ); $array_css = explode( ' ', $field->get_field_classes() ); - $this->assertCount( 8, $array_css ); + $this->assertCount( 10, $array_css ); $this->assertContains( 'exclude', $array_css ); $this->assertContains( 'class7', $array_css ); @@ -101,8 +101,6 @@ public function test_maximum_allowed_css_each_field(){ $field = new Field_Textarea( $text_field, GFAPI::get_entry( $entry_id ), GPDFAPI::get_form_class(), GPDFAPI::get_misc_class() ); $array_css = explode( ' ', $field->get_field_classes() ); - $this->assertCount( 2, $array_css ); - - $this->assertCount( 2, $array_css ); + $this->assertCount( 4, $array_css ); } } diff --git a/tests/phpunit/unit-tests/test-pdf.php b/tests/phpunit/unit-tests/test-pdf.php index 3ba4d67b6..fe86eafd3 100644 --- a/tests/phpunit/unit-tests/test-pdf.php +++ b/tests/phpunit/unit-tests/test-pdf.php @@ -1830,7 +1830,7 @@ public function test_page_break_field() { $this->assertStringContainsString('First Page', $html ); $this->assertStringContainsString('

assertStringContainsString('class="gfpdf-page gfpdf-field my-test-class"', $html ); + $this->assertStringContainsString('class="gfpdf-field gfpdf-page my-test-class"', $html ); $this->assertStringContainsString('
', $html ); ob_start(); From 21373f30dc2938016d05bb6abb3150e221455623 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 18 Nov 2025 17:18:15 +1100 Subject: [PATCH 053/110] Version bump --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cd2ef2c3..7d20e5331 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog ## 6.14.1 -* 🧹 Housekeeping: Use the field type (not input type) in the field class name +* 🧹 Housekeeping: Add `gfpdf-{$type}` CSS class to the HTML mark-up when a field uses a different input type * 🧹 Housekeeping: Use the field type (not input type) in the `gfpdf_pdf_field_content_{$type}` filter ## 6.14.0 From b06235eb84dd62e5f7d872303d2481355d84af3c Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 7 Jan 2026 14:27:53 +1100 Subject: [PATCH 054/110] Exclude LoggerAwareInterface from typehint removal Resolves issue with plugins loading PSR/Log v1 after Gravity PDF initializes (e.g. lazy load composer) --- .php-scoper/mpdf.php | 1 - CHANGELOG.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.php-scoper/mpdf.php b/.php-scoper/mpdf.php index 207111718..9f43f5bfc 100644 --- a/.php-scoper/mpdf.php +++ b/.php-scoper/mpdf.php @@ -68,7 +68,6 @@ function( string $filePath, string $prefix, string $content ): string { /* Remove type hinting from prefixed logger */ $files = [ - 'LoggerAwareInterface.php', 'LoggerAwareTrait.php', 'MpdfPsrLogAwareTrait.php', 'PsrLogAwareTrait.php' diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d20e5331..386f9e94c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 6.14.1 * 🧹 Housekeeping: Add `gfpdf-{$type}` CSS class to the HTML mark-up when a field uses a different input type * 🧹 Housekeeping: Use the field type (not input type) in the `gfpdf_pdf_field_content_{$type}` filter +* 🐞Bug: Fix PHP error if another plugin lazy loads the PSR/Log v1 library ## 6.14.0 * 🎉 Feature: Rotate Gravity PDF log files when Gravity Forms logging is enabled. This prevents the log file getting to large. From 12cf4a6a4f6007795f04a8ad9e530c96f1c1f9cd Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 7 Jan 2026 15:37:25 +1100 Subject: [PATCH 055/110] Fix deprecation notice for multisite unit tests --- tests/phpunit/unit-tests/test-form-settings.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/unit-tests/test-form-settings.php b/tests/phpunit/unit-tests/test-form-settings.php index 23f4f7166..85ae33fd0 100644 --- a/tests/phpunit/unit-tests/test-form-settings.php +++ b/tests/phpunit/unit-tests/test-form-settings.php @@ -295,7 +295,7 @@ public function test_maybe_save_pdf_settings() { * @since 4.0 */ public function test_process_list_view() { - + $GLOBALS['plugin_page'] = ''; $GLOBALS['hook_suffix'] = ''; require_once( GFCommon::get_base_path() . '/form_settings.php' ); @@ -333,6 +333,8 @@ public function test_process_list_view() { * @since 4.0 */ public function test_show_edit_view() { + $GLOBALS['plugin_page'] = ''; + $GLOBALS['hook_suffix'] = ''; require_once( GFCommon::get_base_path() . '/form_settings.php' ); From 8b768a6d93b416b60ab0815fdd6a72977e1b9ad3 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 7 Jan 2026 16:24:39 +1100 Subject: [PATCH 056/110] Restore original LogInterface typehint --- .php-scoper/mpdf.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.php-scoper/mpdf.php b/.php-scoper/mpdf.php index 9f43f5bfc..c4cfa3fa7 100644 --- a/.php-scoper/mpdf.php +++ b/.php-scoper/mpdf.php @@ -68,13 +68,14 @@ function( string $filePath, string $prefix, string $content ): string { /* Remove type hinting from prefixed logger */ $files = [ + 'LoggerAwareInterface.php', 'LoggerAwareTrait.php', 'MpdfPsrLogAwareTrait.php', 'PsrLogAwareTrait.php' ]; if ( in_array( basename( $filePath ), $files, true ) ) { - $content = str_replace( "\\$prefix\\Psr\\Log\\LoggerInterface", '', $content ); + $content = str_replace( "\\$prefix\\Psr\\Log\\LoggerInterface", '\\Psr\\Log\\LoggerInterface', $content ); } /* Global polyfills */ From 5be2b3f7883c1844b27a51e136214ff2653ab7b4 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 7 Jan 2026 16:27:31 +1100 Subject: [PATCH 057/110] Update composer dependencies --- composer.lock | 884 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 568 insertions(+), 316 deletions(-) diff --git a/composer.lock b/composer.lock index 7f7010403..7ac9c1c22 100644 --- a/composer.lock +++ b/composer.lock @@ -8,21 +8,21 @@ "packages": [ { "name": "gravitypdf/querypath", - "version": "4.0.1", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/GravityPDF/querypath.git", - "reference": "a664e7706b3224f3c5d8cec382112c7cf1b90ce5" + "reference": "32b08b5b5295fa3b84baeb91685c66ca86b1c591" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GravityPDF/querypath/zipball/a664e7706b3224f3c5d8cec382112c7cf1b90ce5", - "reference": "a664e7706b3224f3c5d8cec382112c7cf1b90ce5", + "url": "https://api.github.com/repos/GravityPDF/querypath/zipball/32b08b5b5295fa3b84baeb91685c66ca86b1c591", + "reference": "32b08b5b5295fa3b84baeb91685c66ca86b1c591", "shasum": "" }, "require": { "masterminds/html5": "^2.0", - "php": "^7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "^7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "replace": { "arthurkushman/query-path": "3.1.4", @@ -68,7 +68,7 @@ "type": "paypal" } ], - "time": "2024-11-07T06:15:48+00:00" + "time": "2025-02-04T05:00:04+00:00" }, { "name": "gravitypdf/upload", @@ -389,16 +389,16 @@ }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -450,22 +450,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "monolog/monolog", - "version": "2.9.3", + "version": "2.11.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215" + "reference": "37308608e599f34a1a4845b16440047ec98a172a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/a30bfe2e142720dfa990d0a7e573997f5d884215", - "reference": "a30bfe2e142720dfa990d0a7e573997f5d884215", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/37308608e599f34a1a4845b16440047ec98a172a", + "reference": "37308608e599f34a1a4845b16440047ec98a172a", "shasum": "" }, "require": { @@ -483,7 +483,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "phpspec/prophecy": "^1.15", "phpstan/phpstan": "^1.10", @@ -542,7 +542,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.3" + "source": "https://github.com/Seldaek/monolog/tree/2.11.0" }, "funding": [ { @@ -554,20 +554,20 @@ "type": "tidelift" } ], - "time": "2024-04-12T20:52:51+00:00" + "time": "2026-01-01T13:05:00+00:00" }, { "name": "mpdf/mpdf", - "version": "v8.2.4", + "version": "v8.2.7", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88" + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/9e3ff91606fed11cd58a130eabaaf60e56fdda88", - "reference": "9e3ff91606fed11cd58a130eabaaf60e56fdda88", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/b59670a09498689c33ce639bac8f5ba26721dab3", + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3", "shasum": "" }, "require": { @@ -577,7 +577,7 @@ "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/http-message": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" @@ -625,7 +625,7 @@ "utf-8" ], "support": { - "docs": "http://mpdf.github.io", + "docs": "https://mpdf.github.io", "issues": "https://github.com/mpdf/mpdf/issues", "source": "https://github.com/mpdf/mpdf" }, @@ -635,7 +635,7 @@ "type": "custom" } ], - "time": "2024-06-14T16:06:41+00:00" + "time": "2025-12-01T10:18:02+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -731,16 +731,16 @@ }, { "name": "mpdf/qrcode", - "version": "v1.2.1", + "version": "v1.2.2", "source": { "type": "git", "url": "https://github.com/mpdf/qrcode.git", - "reference": "5320c512776aa3c199bd8be8f707ec83d9779d85" + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/qrcode/zipball/5320c512776aa3c199bd8be8f707ec83d9779d85", - "reference": "5320c512776aa3c199bd8be8f707ec83d9779d85", + "url": "https://api.github.com/repos/mpdf/qrcode/zipball/d4fa19117a7241c30ac84902b6236a02c7a3f268", + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268", "shasum": "" }, "require": { @@ -748,7 +748,7 @@ "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "mockery/mockery": "^0.9.5", + "mockery/mockery": "^0.9.5 || ^1.0", "squizlabs/php_codesniffer": "^3.4", "tracy/tracy": "^2.5", "yoast/phpunit-polyfills": "^1.0" @@ -787,7 +787,7 @@ ], "support": { "issues": "https://github.com/mpdf/qrcode/issues", - "source": "https://github.com/mpdf/qrcode/tree/v1.2.1" + "source": "https://github.com/mpdf/qrcode/tree/v1.2.2" }, "funding": [ { @@ -795,20 +795,20 @@ "type": "custom" } ], - "time": "2024-06-04T13:40:39+00:00" + "time": "2025-12-19T16:21:49+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.12.1", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", - "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -847,7 +847,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -855,7 +855,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T17:47:46+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "paragonie/random_compat", @@ -1012,31 +1012,31 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.1", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "09a816004fcee9ed3405bd164147e3fdbb79a56f" + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/09a816004fcee9ed3405bd164147e3fdbb79a56f", - "reference": "09a816004fcee9ed3405bd164147e3fdbb79a56f", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", "shasum": "" }, "require": { "ext-zlib": "*", - "php": "^5.6 || ^7.0 || ^8.0" + "php": "^7.1 || ^8.0" }, "conflict": { "setasign/tfpdf": "<1.31" }, "require-dev": { - "phpunit/phpunit": "~5.7", + "phpunit/phpunit": "^7", "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "~6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -1072,7 +1072,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.1" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" }, "funding": [ { @@ -1080,7 +1080,7 @@ "type": "tidelift" } ], - "time": "2024-09-02T10:17:15+00:00" + "time": "2025-08-05T09:57:14+00:00" }, { "name": "spatie/url-signer", @@ -1149,29 +1149,29 @@ "packages-dev": [ { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.0.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "4be43904336affa5c2f70744a348312336afd0da" + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", - "reference": "4be43904336affa5c2f70744a348312336afd0da", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", + "composer-plugin-api": "^2.2", "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" }, "require-dev": { - "composer/composer": "*", + "composer/composer": "^2.2", "ext-json": "*", "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", @@ -1190,9 +1190,9 @@ "authors": [ { "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" }, { "name": "Contributors", @@ -1200,7 +1200,6 @@ } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", "keywords": [ "PHPCodeSniffer", "PHP_CodeSniffer", @@ -1221,9 +1220,28 @@ ], "support": { "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2023-01-05T11:28:13+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-11-11T04:32:07+00:00" }, { "name": "doctrine/instantiator", @@ -1297,16 +1315,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.19.4", + "version": "v4.19.5", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", - "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", + "reference": "51bd93cc741b7fc3d63d20b6bdcd99fdaa359837", "shasum": "" }, "require": { @@ -1321,11 +1339,6 @@ "bin/php-parse" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" @@ -1347,9 +1360,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.5" }, - "time": "2024-09-29T15:01:53+00:00" + "time": "2025-12-06T11:45:25+00:00" }, { "name": "phar-io/manifest", @@ -1533,16 +1546,16 @@ }, { "name": "phpcompatibility/phpcompatibility-paragonie", - "version": "1.3.3", + "version": "1.3.4", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", - "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac" + "reference": "244d7b04fc4bc2117c15f5abe23eb933b5f02bbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac", - "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/244d7b04fc4bc2117c15f5abe23eb933b5f02bbf", + "reference": "244d7b04fc4bc2117c15f5abe23eb933b5f02bbf", "shasum": "" }, "require": { @@ -1599,27 +1612,32 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcompatibility", + "type": "thanks_dev" } ], - "time": "2024-04-24T21:30:46+00:00" + "time": "2025-09-19T17:43:28+00:00" }, { "name": "phpcompatibility/phpcompatibility-wp", - "version": "2.1.5", + "version": "2.1.8", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082" + "reference": "7c8d18b4d90dac9e86b0869a608fa09158e168fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/01c1ff2704a58e46f0cb1ca9d06aee07b3589082", - "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/7c8d18b4d90dac9e86b0869a608fa09158e168fa", + "reference": "7c8d18b4d90dac9e86b0869a608fa09158e168fa", "shasum": "" }, "require": { "phpcompatibility/php-compatibility": "^9.0", - "phpcompatibility/phpcompatibility-paragonie": "^1.0" + "phpcompatibility/phpcompatibility-paragonie": "^1.0", + "squizlabs/php_codesniffer": "^3.3" }, "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^1.0" @@ -1669,35 +1687,39 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcompatibility", + "type": "thanks_dev" } ], - "time": "2024-04-24T21:37:59+00:00" + "time": "2025-10-18T00:05:59+00:00" }, { "name": "phpcsstandards/phpcsextra", - "version": "1.2.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", - "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" + "reference": "b598aa890815b8df16363271b659d73280129101" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", - "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/b598aa890815b8df16363271b659d73280129101", + "reference": "b598aa890815b8df16363271b659d73280129101", "shasum": "" }, "require": { "php": ">=5.4", - "phpcsstandards/phpcsutils": "^1.0.9", - "squizlabs/php_codesniffer": "^3.8.0" + "phpcsstandards/phpcsutils": "^1.2.0", + "squizlabs/php_codesniffer": "^3.13.5 || ^4.0.1" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpcsstandards/phpcsdevcs": "^1.1.6", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcsstandards/phpcsdevcs": "^1.2.0", "phpcsstandards/phpcsdevtools": "^1.2.1", - "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "type": "phpcodesniffer-standard", "extra": { @@ -1747,35 +1769,39 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2023-12-08T16:49:07+00:00" + "time": "2025-11-12T23:06:57+00:00" }, { "name": "phpcsstandards/phpcsutils", - "version": "1.0.12", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", - "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c" + "reference": "c216317e96c8b3f5932808f9b0f1f7a14e3bbf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c", - "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/c216317e96c8b3f5932808f9b0f1f7a14e3bbf55", + "reference": "c216317e96c8b3f5932808f9b0f1f7a14e3bbf55", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev" + "squizlabs/php_codesniffer": "^3.13.5 || ^4.0.1" }, "require-dev": { "ext-filter": "*", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpcsstandards/phpcsdevcs": "^1.1.6", - "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcsstandards/phpcsdevcs": "^1.2.0", + "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0 || ^3.0.0" }, "type": "phpcodesniffer-standard", "extra": { @@ -1812,6 +1838,7 @@ "phpcodesniffer-standard", "phpcs", "phpcs3", + "phpcs4", "standards", "static analysis", "tokens", @@ -1835,9 +1862,13 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-05-20T13:34:27+00:00" + "time": "2025-12-08T14:27:58+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2160,16 +2191,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.21", + "version": "9.6.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" + "reference": "945d0b7f346a084ce5549e95289962972c4272e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/945d0b7f346a084ce5549e95289962972c4272e5", + "reference": "945d0b7f346a084ce5549e95289962972c4272e5", "shasum": "" }, "require": { @@ -2180,7 +2211,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=7.3", @@ -2191,11 +2222,11 @@ "phpunit/php-timer": "^5.0.3", "sebastian/cli-parser": "^1.0.2", "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", + "sebastian/comparator": "^4.0.9", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", + "sebastian/exporter": "^4.0.8", + "sebastian/global-state": "^5.0.8", "sebastian/object-enumerator": "^4.0.4", "sebastian/resource-operations": "^3.0.4", "sebastian/type": "^3.2.1", @@ -2243,7 +2274,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.31" }, "funding": [ { @@ -2254,12 +2285,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2024-09-19T10:50:18+00:00" + "time": "2025-12-06T07:45:52+00:00" }, { "name": "roave/security-advisories", @@ -2267,29 +2306,34 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e63317470a1b96346be224a68f9e64567e1001c3" + "reference": "9a341b84b3ebb8ad254193ce440b44c7d4375a4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e63317470a1b96346be224a68f9e64567e1001c3", - "reference": "e63317470a1b96346be224a68f9e64567e1001c3", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9a341b84b3ebb8ad254193ce440b44c7d4375a4f", + "reference": "9a341b84b3ebb8ad254193ce440b44c7d4375a4f", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.3.12", - "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "adaptcms/adaptcms": "<=1.3", + "admidio/admidio": "<=4.3.16", + "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", "aimeos/ai-admin-jsonadm": "<2020.10.13|>=2021.04.1,<2021.10.6|>=2022.04.1,<2022.10.3|>=2023.04.1,<2023.10.4|==2024.04.1", "aimeos/ai-client-html": ">=2020.04.1,<2020.10.27|>=2021.04.1,<2021.10.22|>=2022.04.1,<2022.10.13|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.04.7", + "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<1.5", + "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alexusmai/laravel-file-manager": "<=3.3.1", + "alt-design/alt-redirect": "<1.6.4", + "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", "amazing/media2click": ">=1,<1.3.3", "ameos/ameos_tarteaucitron": "<1.2.23", @@ -2299,9 +2343,11 @@ "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", + "aoe/restler": "<1.7.1", "apache-solr-for-typo3/solr": "<2.8.3", "apereo/phpcas": "<1.6", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "api-platform/core": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", + "api-platform/graphql": "<3.4.17|>=4,<4.0.22|>=4.1,<4.1.5", "appwrite/server-ce": "<=1.2.1", "arc/web": "<3", "area17/twill": "<1.2.5|>=2,<2.5.3", @@ -2309,29 +2355,38 @@ "asymmetricrypt/asymmetricrypt": "<9.9.99", "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", + "athlon1600/youtube-downloader": "<=4", "austintoddj/canvas": "<=3.4.2", - "auth0/wordpress": "<=4.6", + "auth0/auth0-php": ">=3.3,<8.18", + "auth0/login": "<7.20", + "auth0/symfony": "<=5.5", + "auth0/wordpress": "<=5.4", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.288.1", - "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.27.3|>=1.28,<1.28.2", + "aws/aws-sdk-php": "<3.368", + "azuracast/azuracast": "<=0.23.1", + "b13/seo_basics": "<0.8.2", + "backdrop/backdrop": "<=1.32", "backpack/crud": "<3.4.9", - "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", - "badaso/core": "<2.7", - "bagisto/bagisto": "<2.1", + "backpack/filemanager": "<2.0.2|>=3,<3.0.9", + "bacula-web/bacula-web": "<9.7.1", + "badaso/core": "<=2.9.11", + "bagisto/bagisto": "<2.3.10", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", - "barryvdh/laravel-translation-manager": "<0.6.2", + "barryvdh/laravel-translation-manager": "<0.6.8", "barzahlen/barzahlen-php": "<2.0.1", "baserproject/basercms": "<=5.1.1", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bbpress/bbpress": "<2.6.5", + "bcit-ci/codeigniter": "<3.1.3", "bcosca/fatfree": "<3.7.2", "bedita/bedita": "<4", + "bednee/cooluri": "<1.0.30", "bigfork/silverstripe-form-capture": ">=3,<3.1.1", - "billz/raspap-webgui": "<=3.1.4", + "billz/raspap-webgui": "<3.3.6", + "binarytorch/larecipe": "<2.8.1", "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", "blueimp/jquery-file-upload": "==6.4.4", "bmarshall511/wordpress_zero_spam": "<5.2.13", @@ -2346,8 +2401,10 @@ "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "bvbmedia/multishop": "<2.0.39", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", + "cadmium-org/cadmium-cms": "<=0.4.9", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", @@ -2356,33 +2413,42 @@ "cart2quote/module-quotation-encoded": ">=4.1.6,<=4.4.5|>=5,<5.4.4", "cartalyst/sentry": "<=2.1.6", "catfan/medoo": "<1.7.5", - "causal/oidc": "<2.1", + "causal/oidc": "<4", "cecil/cecil": "<7.47.1", "centreon/centreon": "<22.10.15", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "chrome-php/chrome": "<1.14", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", - "ckeditor/ckeditor": "<4.24", - "cockpit-hq/cockpit": "<2.7|==2.7", + "ckeditor/ckeditor": "<4.25", + "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", + "co-stack/fal_sftp": "<0.2.6", + "cockpit-hq/cockpit": "<2.11.4", + "code16/sharp": "<9.11.1", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<3.1.9", - "codeigniter4/framework": "<4.4.7", + "codeigniter/framework": "<3.1.10", + "codeigniter4/framework": "<4.6.2", "codeigniter4/shield": "<1.0.0.0-beta8", "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.27|>=2,<2.2.24|>=2.3,<2.7.7", - "concrete5/concrete5": "<9.3.4", + "codingms/additional-tca": ">=1.7,<1.15.17|>=1.16,<1.16.9", + "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", + "commerceteam/commerce": ">=0.9.6,<0.9.9", + "components/jquery": ">=1.0.3,<3.5", + "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", + "concrete5/concrete5": "<9.4.3", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", - "contao/contao": "<=5.4.1", + "contao/contao": ">=3,<3.5.37|>=4,<4.4.56|>=4.5,<4.13.56|>=5,<5.3.38|>=5.4.0.0-RC1-dev,<5.6.1", "contao/core": "<3.5.39", - "contao/core-bundle": "<4.13.49|>=5,<5.3.15|>=5.4,<5.4.3", + "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<4.6.2|>=5,<=5.2.2", - "croogo/croogo": "<4", + "couleurcitron/tarteaucitron-wp": "<0.3", + "craftcms/cms": "<=4.16.16|>=5,<=5.8.20", + "croogo/croogo": "<=4.0.7", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", "czproject/git-php": "<4.0.3", @@ -2390,16 +2456,22 @@ "dapphp/securimage": "<3.6.6", "darylldoyle/safe-svg": "<1.9.10", "datadog/dd-trace": ">=0.30,<0.30.2", + "datahihi1/tiny-env": "<1.0.3|>=1.0.9,<1.0.11", "datatables/datatables": "<1.10.10", "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", - "dcat/laravel-admin": "<=2.1.3", + "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", + "devcode-it/openstamanager": "<=2.9.4", "devgroup/dotplant": "<2020.09.14-dev", + "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "dl/yag": "<3.0.1", + "dmk/webkitpdf": "<1.1.4", + "dnadesign/silverstripe-elemental": "<5.3.12", "doctrine/annotations": "<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": "<2.4.3|>=2.5,<2.5.1", @@ -2409,12 +2481,45 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<19.0.2", + "dolibarr/dolibarr": "<21.0.3", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", - "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/core-recommended": ">=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "drupal-pattern-lab/unified-twig-extensions": "<=0.1", + "drupal/access_code": "<2.0.5", + "drupal/acquia_dam": "<1.1.5", + "drupal/admin_audit_trail": "<1.0.5", + "drupal/ai": "<1.0.5", + "drupal/alogin": "<2.0.6", + "drupal/cache_utility": "<1.2.1", + "drupal/civictheme": "<1.12", + "drupal/commerce_alphabank_redirect": "<1.0.3", + "drupal/commerce_eurobank_redirect": "<2.1.1", + "drupal/config_split": "<1.10|>=2,<2.0.2", + "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.4.9|>=10.5,<10.5.6|>=11,<11.1.9|>=11.2,<11.2.8", + "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/currency": "<3.5", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/email_tfa": "<2.0.6", + "drupal/formatter_suite": "<2.1", + "drupal/gdpr": "<3.0.1|>=3.1,<3.1.2", + "drupal/google_tag": "<1.8|>=2,<2.0.8", + "drupal/ignition": "<1.0.4", + "drupal/json_field": "<1.5", + "drupal/lightgallery": "<1.6", + "drupal/link_field_display_mode_formatter": "<1.6", + "drupal/matomo": "<1.24", + "drupal/oauth2_client": "<4.1.3", + "drupal/oauth2_server": "<2.1", + "drupal/obfuscate": "<2.0.1", + "drupal/plausible_tracking": "<1.0.2", + "drupal/quick_node_block": "<2", + "drupal/rapidoc_elements_field_formatter": "<1.0.1", + "drupal/reverse_proxy_header": "<1.1.2", + "drupal/simple_multistep": "<2", + "drupal/simple_oauth": ">=6,<6.0.7", + "drupal/spamspan": "<3.2.1", + "drupal/tfa": "<1.10", + "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", @@ -2424,10 +2529,11 @@ "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "elijaa/phpmemcacheadmin": "<=1.3", + "elmsln/haxcms": "<11.0.14", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", "enhavo/enhavo-app": "<=0.13.1", - "enshrined/svg-sanitize": "<0.15", + "enshrined/svg-sanitize": "<0.22", "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "evolutioncms/evolution": "<=3.2.3", @@ -2438,12 +2544,13 @@ "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.39|>=3.3,<3.3.39", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-http-cache": "<2.3.16", "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", @@ -2452,12 +2559,13 @@ "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.08", + "facturascripts/facturascripts": "<=2025.4|==2025.11|==2025.41|==2025.43", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", "filament/actions": ">=3.2,<3.2.123", + "filament/filament": ">=4,<4.3.1", "filament/infolists": ">=3,<3.2.115", "filament/tables": ">=3,<3.2.115", "filegator/filegator": "<7.8", @@ -2466,16 +2574,17 @@ "firebase/php-jwt": "<6", "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", - "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.8.5", + "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.8.10", "flarum/flarum": "<0.1.0.0-beta8", - "flarum/framework": "<1.8.5", + "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", + "fof/pretty-mail": "<=1.1.2", "fof/upload": "<1.2.3", "foodcoopshop/foodcoopshop": ">=3.2,<3.6.1", "fooman/tcpdf": "<6.2.22", @@ -2490,32 +2599,38 @@ "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", - "froala/wysiwyg-editor": "<3.2.7|>=4.0.1,<=4.1.3", - "froxlor/froxlor": "<=2.2.0.0-RC3", + "froala/wysiwyg-editor": "<=4.3", + "froxlor/froxlor": "<=2.2.5", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=5.0.2", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "getformwork/formwork": "<1.13.1|==2.0.0.0-beta1", - "getgrav/grav": "<1.7.46", - "getkirby/cms": "<=3.6.6.5|>=3.7,<=3.7.5.4|>=3.8,<=3.8.4.3|>=3.9,<=3.9.8.1|>=3.10,<=3.10.1|>=4,<=4.3", - "getkirby/kirby": "<=2.5.12", + "georgringer/news": "<1.3.3", + "geshi/geshi": "<=1.0.9.1", + "getformwork/formwork": "<2.2", + "getgrav/grav": "<1.11.0.0-beta1", + "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", + "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", "gilacms/gila": "<=1.15.4", "gleez/cms": "<=1.3|==2", "globalpayments/php-sdk": "<2", + "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.15", + "google/protobuf": "<3.4", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", + "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", "grumpydictator/firefly-iii": "<6.1.17", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/oauth-subscriber": "<0.8.1", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "handcraftedinthealps/goodby-csv": "<1.4.3", "harvesthq/chosen": "<1.8.7", "helloxz/imgurl": "<=2.31", "hhxsv5/laravel-s": "<3.7.36", @@ -2525,13 +2640,15 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", + "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", - "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", + "ibexa/fieldtype-richtext": ">=4.6,<4.6.25|>=5,<5.0.3", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", + "ibexa/http-cache": ">=4.6,<4.6.14", + "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", - "ibexa/user": ">=4,<4.4.3", + "ibexa/user": ">=4,<4.4.3|>=5,<5.0.4", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", "ilicmiljan/secure-props": ">=1.2,<1.2.2", @@ -2542,36 +2659,43 @@ "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", - "impresspages/impresspages": "<=1.0.12", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.2.3", + "impresspages/impresspages": "<1.0.13", + "in2code/femanager": "<6.4.2|>=7,<7.5.3|>=8,<8.3.1", "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", - "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.4.1", + "in2code/powermail": "<7.5.1|>=8,<8.5.1|>=9,<10.9.1|>=11,<12.5.3|==13", "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", "ipl/web": "<0.10.1", + "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", - "james-heinrich/phpthumb": "<1.7.12", + "james-heinrich/phpthumb": "<=1.7.23", "jasig/phpcas": "<1.3.3", + "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", - "johnbillion/wp-crontrol": "<1.16.2", + "joelbutcher/socialstream": "<5.6|>=6,<6.2", + "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/database": ">=1,<2.2|>=3,<3.4", "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/filter": "<2.0.6|>=3,<3.0.5|==4", "joomla/framework": "<1.5.7|>=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", - "joomla/joomla-cms": ">=2.5,<3.9.12", + "joomla/joomla-cms": "<3.9.12|>=4,<4.4.13|>=5,<5.2.6", + "joomla/joomla-platform": "<1.5.4", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", "jsmitty12/phpwhois": "<5.1", - "juzaweb/cms": "<=3.4", + "juzaweb/cms": "<=3.4.2", "jweiland/events2": "<8.3.8|>=9,<9.0.6", + "jweiland/kk-downloader": "<1.2.2", "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", @@ -2581,6 +2705,7 @@ "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", + "koillection/koillection": "<1.6.12", "krayin/laravel-crm": "<=1.3", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", @@ -2591,77 +2716,99 @@ "lara-zeus/artemis": ">=1,<=1.0.6", "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.4", "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=9|==10.1", + "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", + "league/commonmark": "<2.7", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<2017.08.18", + "librenms/librenms": "<25.12", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.5.2", + "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", + "livewire/volt": "<1.7", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "lomkit/laravel-rest-api": "<2.13", + "luracast/restler": "<3.1", "luyadev/yii-helpers": "<1.2.1", + "macropay-solutions/laravel-crud-wizard-free": "<3.4.17", "maestroerror/php-heic-to-jpg": "<1.0.5", - "magento/community-edition": "<2.4.5|==2.4.5|>=2.4.5.0-patch1,<2.4.5.0-patch10|==2.4.6|>=2.4.6.0-patch1,<2.4.6.0-patch8|>=2.4.7.0-beta1,<2.4.7.0-patch3", + "magento/community-edition": "<2.4.6.0-patch13|>=2.4.7.0-beta1,<2.4.7.0-patch8|>=2.4.8.0-beta1,<2.4.8.0-patch3|>=2.4.9.0-alpha1,<2.4.9.0-alpha3|==2.4.9", "magento/core": "<=1.9.4.5", "magento/magento1ce": "<1.9.4.3-dev", "magento/magento1ee": ">=1,<1.14.4.3-dev", "magento/product-community-edition": "<2.4.4.0-patch9|>=2.4.5,<2.4.5.0-patch8|>=2.4.6,<2.4.6.0-patch6|>=2.4.7,<2.4.7.0-patch1", + "magento/project-community-edition": "<=2.0.2", "magneto/core": "<1.9.4.4-dev", + "mahocommerce/maho": "<25.9", "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", - "mantisbt/mantisbt": "<=2.26.3", + "manogi/nova-tiptap": "<=3.2.6", + "mantisbt/mantisbt": "<2.27.2", "marcwillmann/turn": "<0.3.3", + "marshmallow/nova-tiptap": "<5.7", + "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.4.13|>=5,<5.1.1", + "mautic/core": "<5.2.9|>=6,<6.0.7", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", + "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", - "mediawiki/cargo": "<3.6.1", + "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", + "mediawiki/cargo": "<3.8.3", "mediawiki/core": "<1.39.5|==1.40", + "mediawiki/data-transfer": ">=1.39,<1.39.11|>=1.41,<1.41.3|>=1.42,<1.42.2", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", + "mehrwert/phpmyadmin": "<3.2", "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-cms": "<5.3.4", + "melisplatform/melis-cms-slider": "<5.3.1", + "melisplatform/melis-core": "<5.3.11", "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", "microsoft/microsoft-graph-beta": "<2.0.1", "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<=2.0.16", + "microweber/microweber": "<=2.0.19", "mikehaertl/php-shellcommand": "<1.6.1", + "mineadmin/mineadmin": "<=3.0.9", "miniorange/miniorange-saml": "<1.4.3", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<=2.8.3.0-patch", + "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", + "mongodb/mongodb-extension": "<1.21.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.6|>=4.4.0.0-beta,<4.4.2", + "moodle/moodle": "<4.4.11|>=4.5.0.0-beta,<4.5.7|>=5.0.0.0-beta,<5.0.3", + "moonshine/moonshine": "<=3.12.5", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "movingbytes/social-network": "<=1.2.1", "mpdf/mpdf": "<=7.1.7", - "munkireport/comment": "<4.1", + "munkireport/comment": "<4", "munkireport/managedinstalls": "<2.6", "munkireport/munki_facts": "<1.5", - "munkireport/munkireport": ">=2.5.3,<5.6.3", "munkireport/reportdata": "<3.5", "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", + "mwdelaney/wp-enable-svg": "<=0.2", "namshi/jose": "<2.2", + "nasirkhan/laravel-starter": "<11.11", "nategood/httpful": "<1", "neoan3-apps/template": "<1.1.1", "neorazorx/facturascripts": "<2022.04", @@ -2670,14 +2817,19 @@ "neos/media-browser": "<7.3.19|>=8,<8.0.16|>=8.1,<8.1.11|>=8.2,<8.2.11|>=8.3,<8.3.9", "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", "neos/swiftmailer": "<5.4.5", + "nesbot/carbon": "<2.72.6|>=3,<3.8.4", + "netcarver/textile": "<=4.1.2", "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.10", + "neuron-core/neuron-ai": "<=2.8.11", + "nilsteampassnet/teampass": "<3.1.3.1-dev", + "nitsan/ns-backup": "<13.0.1", "nonfiction/nterchange": "<4.1.1", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", "novaksolutions/infusionsoft-php-sdk": "<1", + "novosga/novosga": "<=2.2.12", "nukeviet/nukeviet": "<4.5.02", "nyholm/psr7": "<1.6.1", "nystudio107/craft-seomatic": "<3.4.12", @@ -2685,19 +2837,20 @@ "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", "october/backend": "<1.1.2", "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", - "october/october": "<=3.6.4", + "october/october": "<3.7.5", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.5.15", + "october/system": "<3.7.5", + "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", - "onelogin/php-saml": "<2.10.4", + "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", "oneup/uploader-bundle": ">=1,<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", + "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.10.1", + "openmage/magento-lts": "<20.16", "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", - "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", + "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", @@ -2705,7 +2858,7 @@ "oro/customer-portal": ">=4.1,<=4.1.13|>=4.2,<=4.2.10|>=5,<=5.0.11|>=5.1,<=5.1.3", "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<=4.2.10|>=5,<=5.0.12|>=5.1,<=5.1.3", "oveleon/contao-cookiebar": "<1.16.3|>=2,<2.1.3", - "oxid-esales/oxideshop-ce": "<4.5", + "oxid-esales/oxideshop-ce": "<=7.0.5", "oxid-esales/paymorrow-module": ">=1,<1.0.2|>=2,<2.0.1", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", @@ -2713,6 +2866,7 @@ "pagekit/pagekit": "<=1.0.18", "paragonie/ecc": "<2.0.1", "paragonie/random_compat": "<2", + "paragonie/sodium_compat": "<1.24|>=2,<2.5", "passbolt/passbolt_api": "<4.6.2", "paypal/adaptivepayments-sdk-php": "<=3.9.2", "paypal/invoice-sdk-php": "<=3.9", @@ -2721,6 +2875,7 @@ "pear/archive_tar": "<1.4.14", "pear/auth": "<1.2.4", "pear/crypt_gpg": "<1.6.7", + "pear/http_request2": "<2.7", "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", @@ -2733,11 +2888,13 @@ "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<3.2.5|==3.2.5", + "phpmyadmin/phpmyadmin": "<5.2.2", + "phpmyfaq/phpmyfaq": "<=4.0.13", "phpoffice/common": "<0.2.9", - "phpoffice/phpexcel": "<1.8.1", - "phpoffice/phpspreadsheet": "<1.29.2|>=2,<2.1.1|>=2.2,<2.3", + "phpoffice/math": "<=0.2", + "phpoffice/phpexcel": "<=1.8.2", + "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", + "phppgadmin/phppgadmin": "<=7.13", "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", @@ -2746,18 +2903,19 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.5.4", - "pimcore/customer-management-framework-bundle": "<4.0.6", + "pimcore/admin-ui-classic-bundle": "<1.7.6", + "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.2.4", - "pixelfed/pixelfed": "<0.11.11", + "pimcore/pimcore": "<11.5.4", + "piwik/piwik": "<1.11", + "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.11.2", + "pocketmine/pocketmine-mp": "<5.32.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -2765,19 +2923,22 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.1.6", + "prestashop/prestashop": "<8.2.3", "prestashop/productcomments": "<5.0.2", + "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", + "prestashop/ps_contactinfo": "<=3.3.2", "prestashop/ps_emailsubscription": "<2.6.1", "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4|>=1.5,<1.7.4", - "processwire/processwire": "<=3.0.229", + "privatebin/privatebin": "<1.4|>=1.5,<1.7.4|>=1.7.7,<2.0.3", + "processwire/processwire": "<=3.0.246", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.11.8", + "pterodactyl/panel": "<1.12", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", + "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", @@ -2791,37 +2952,43 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.17.1", + "redaxo/source": "<=5.20.1", "remdex/livehelperchat": "<4.29", + "renolit/reint-downloadmanager": "<4.0.2|>=5,<5.0.1", "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": ">=1,<3.0.4", + "robrichards/xmlseclibs": "<=3.1.3", "roots/soil": "<4.1", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", "rudloff/alltube": "<3.0.3", - "s-cart/core": "<6.9", + "rudloff/rtmpdump-bin": "<=2.3.1", + "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "samwilson/unlinked-wikibase": "<1.42", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", + "setasign/fpdi": "<2.6.4", "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<=1.2", - "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", - "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", + "sheng/yiicms": "<1.2.1", + "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.4.1-dev", + "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17", - "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", - "shopxo/shopxo": "<=6.1", + "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", + "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", + "shopxo/shopxo": "<=6.4", "showdoc/showdoc": "<2.10.4", + "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<5.2.16", + "silverstripe/framework": "<5.3.23", "silverstripe/graphql": ">=2,<2.0.5|>=3,<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", @@ -2833,48 +3000,61 @@ "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", + "simogeo/filemanager": "<=2.5", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19", + "simplesamlphp/saml2-legacy": "<=4.16.15", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-common": "<1.20", "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", + "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", "sjbr/sr-freecap": "<2.4.6|>=2.5,<2.5.3", + "sjbr/static-info-tables": "<2.3.1", "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<7.0.10", + "snipe/snipe-it": "<=8.3.4", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", + "solspace/craft-freeform": ">=5,<5.10.16", + "soosyze/soosyze": "<=2", + "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", + "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", + "spiral/roadrunner": "<2025.1", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<24.05.1", - "starcitizentools/citizen-skin": ">=2.6.3,<2.31", - "statamic/cms": "<4.46|>=5.3,<5.6.2", + "starcitizentools/citizen-skin": ">=1.9.4,<3.9", + "starcitizentools/short-description": ">=4,<4.0.1", + "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", + "starcitizenwiki/embedvideo": "<=4", + "statamic/cms": "<=5.22", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.5.21|>=2.6,<2.6.5", + "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", + "svewap/a21glossary": "<=0.4.10", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": "<6.2.5", "swiftyedit/swiftyedit": "<1.2", "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", "sylius/grid-bundle": "<1.10.1", - "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", @@ -2887,8 +3067,8 @@ "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-client": ">=4.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", - "symfony/http-foundation": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", + "symfony/http-foundation": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", @@ -2905,12 +3085,14 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/symfony": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", + "symfony/ux-live-component": "<2.25.1", + "symfony/ux-twig-component": "<2.25.1", "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", @@ -2920,40 +3102,55 @@ "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", "t3s/content-consent": "<1.0.3|>=2,<2.0.2", - "tastyigniter/tastyigniter": "<3.3", - "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<=6.7.4", + "tastyigniter/tastyigniter": "<4", + "tcg/voyager": "<=1.8", + "tecnickcom/tc-lib-pdf-font": "<2.6.4", + "tecnickcom/tcpdf": "<6.8", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<3.2.2", + "thorsten/phpmyfaq": "<4.0.16|>=4.1.0.0-alpha,<=4.1.0.0-beta2", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", "tinymighty/wiki-seo": "<1.2.2", "titon/framework": "<9.9.99", + "tltneon/lgsl": "<7", "tobiasbg/tablepress": "<=2.0.0.0-RC1", "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4", - "torrentpier/torrentpier": "<=2.4.3", + "torrentpier/torrentpier": "<=2.8.8", "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", "tribalsystems/zenario": "<=9.7.61188", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", - "twbs/bootstrap": "<=3.4.1|>=4,<=4.6.2", - "twig/twig": "<3.11.2|>=3.12,<3.14.1", + "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", + "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<10.4.46|>=11,<11.5.40|>=12,<12.4.21|>=13,<13.3.1", - "typo3/cms-core": "<=8.7.56|>=9,<=9.5.47|>=10,<=10.4.44|>=11,<=11.5.36|>=12,<=12.4.14|>=13,<=13.1", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-felogin": ">=4.2,<4.2.3", "typo3/cms-fluid": "<4.3.4|>=4.4,<4.4.1", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-frontend": "<4.3.9|>=4.4,<4.4.5", - "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8", + "typo3/cms-indexed-search": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", + "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", + "typo3/cms-lowlevel": ">=11,<=11.5.41", + "typo3/cms-recordlist": ">=11,<11.5.48", + "typo3/cms-recycler": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "typo3/cms-scheduler": ">=11,<=11.5.41", + "typo3/cms-setup": ">=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", + "typo3/cms-webhooks": ">=12,<=12.4.30|>=13,<=13.4.11", + "typo3/cms-workspaces": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", "typo3/html-sanitizer": ">=1,<=1.5.2|>=2,<=2.1.3", "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", @@ -2962,38 +3159,44 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<2.6.4", - "unopim/unopim": "<0.1.4", + "unisharp/laravel-filemanager": "<2.9.1", + "universal-omega/dynamic-page-list3": "<3.6.4", + "unopim/unopim": "<=0.3", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", "uvdesk/community-skeleton": "<=1.1.1", "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", - "verbb/formie": "<2.1.6", + "verbb/formie": "<=2.1.43", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", + "vertexvaar/falsftp": "<0.2.6", "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<4.8.1", + "vrana/adminer": "<=4.8.1", "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.6.7", + "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", + "wapplersystems/a21glossary": "<=0.4.10", "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", "web-auth/webauthn-lib": ">=4.5,<4.9", "web-feet/coastercms": "==5.5", + "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", + "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", @@ -3009,23 +3212,25 @@ "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", - "yeswiki/yeswiki": "<=4.4.4", - "yetiforce/yetiforce-crm": "<=6.4", + "yeswiki/yeswiki": "<=4.5.4", + "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.29", - "yiisoft/yii2": "<2.0.49.4-dev", + "yiisoft/yii": "<1.1.31", + "yiisoft/yii2": "<2.0.52", "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-dev": "<=2.0.45", "yiisoft/yii2-elasticsearch": "<2.0.5", "yiisoft/yii2-gii": "<=2.2.4", "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.8", + "yiisoft/yii2-redis": "<2.0.20", "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", - "yourls/yourls": "<=1.8.2", + "yourls/yourls": "<=1.10.2", "yuan1994/tpadmin": "<=1.3.12", + "yungifez/skuul": "<=2.6.5", + "z-push/z-push-dev": "<2.7.6", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", @@ -3099,7 +3304,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T19:04:57+00:00" + "time": "2026-01-05T20:06:42+00:00" }, { "name": "sebastian/cli-parser", @@ -3270,16 +3475,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "4.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5", + "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5", "shasum": "" }, "require": { @@ -3332,15 +3537,27 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2025-08-10T06:51:50+00:00" }, { "name": "sebastian/complexity", @@ -3530,16 +3747,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c", + "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c", "shasum": "" }, "require": { @@ -3595,28 +3812,40 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2025-09-24T06:03:27+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.7", + "version": "5.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6", + "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6", "shasum": "" }, "require": { @@ -3659,15 +3888,27 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2025-08-10T07:10:35+00:00" }, { "name": "sebastian/lines-of-code", @@ -3840,16 +4081,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0", + "reference": "539c6691e0623af6dc6f9c20384c120f963465a0", "shasum": "" }, "require": { @@ -3891,15 +4132,27 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T06:07:39+00:00" + "time": "2025-08-10T06:57:39+00:00" }, { "name": "sebastian/resource-operations", @@ -4066,16 +4319,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.3", + "version": "3.13.5", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", - "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", "shasum": "" }, "require": { @@ -4092,11 +4345,6 @@ "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -4140,22 +4388,26 @@ { "url": "https://opencollective.com/php_codesniffer", "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2024-09-18T10:38:58+00:00" + "time": "2025-11-04T16:30:35+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -4184,7 +4436,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -4192,20 +4444,20 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" }, { "name": "wp-coding-standards/wpcs", - "version": "3.1.0", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7" + "reference": "7795ec6fa05663d716a549d0b44e47ffc8b0d4a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/9333efcbff231f10dfd9c56bb7b65818b4733ca7", - "reference": "9333efcbff231f10dfd9c56bb7b65818b4733ca7", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7795ec6fa05663d716a549d0b44e47ffc8b0d4a6", + "reference": "7795ec6fa05663d716a549d0b44e47ffc8b0d4a6", "shasum": "" }, "require": { @@ -4213,17 +4465,17 @@ "ext-libxml": "*", "ext-tokenizer": "*", "ext-xmlreader": "*", - "php": ">=5.4", - "phpcsstandards/phpcsextra": "^1.2.1", - "phpcsstandards/phpcsutils": "^1.0.10", - "squizlabs/php_codesniffer": "^3.9.0" + "php": ">=7.2", + "phpcsstandards/phpcsextra": "^1.5.0", + "phpcsstandards/phpcsutils": "^1.1.0", + "squizlabs/php_codesniffer": "^3.13.4" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpcompatibility/php-compatibility": "^9.0", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^10.0.0@dev", "phpcsstandards/phpcsdevtools": "^1.2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^8.0 || ^9.0" }, "suggest": { "ext-iconv": "For improved results", @@ -4258,20 +4510,20 @@ "type": "custom" } ], - "time": "2024-03-25T16:39:00+00:00" + "time": "2025-11-25T12:08:04+00:00" }, { "name": "wp-phpunit/wp-phpunit", - "version": "6.6.2", + "version": "6.9.0", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "7a1d3a2150033a3d3e19de40aa5b2ef2fee36bc3" + "reference": "448dc57a97c7225d2ac6271876682fca4c2ed340" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/7a1d3a2150033a3d3e19de40aa5b2ef2fee36bc3", - "reference": "7a1d3a2150033a3d3e19de40aa5b2ef2fee36bc3", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/448dc57a97c7225d2ac6271876682fca4c2ed340", + "reference": "448dc57a97c7225d2ac6271876682fca4c2ed340", "shasum": "" }, "type": "library", @@ -4306,20 +4558,20 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2024-07-17T01:13:44+00:00" + "time": "2025-12-03T01:19:46+00:00" }, { "name": "yoast/phpunit-polyfills", - "version": "3.0.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "19e6d5fb8aad31f731f774f9646a10c64a8843d2" + "reference": "9cf2ccd990eadfc4a1e390592d4731e590b2c618" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/19e6d5fb8aad31f731f774f9646a10c64a8843d2", - "reference": "19e6d5fb8aad31f731f774f9646a10c64a8843d2", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/9cf2ccd990eadfc4a1e390592d4731e590b2c618", + "reference": "9cf2ccd990eadfc4a1e390592d4731e590b2c618", "shasum": "" }, "require": { @@ -4334,7 +4586,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-main": "4.x-dev" } }, "autoload": { @@ -4369,7 +4621,7 @@ "security": "https://github.com/Yoast/PHPUnit-Polyfills/security/policy", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2024-09-07T00:24:25+00:00" + "time": "2025-02-09T18:36:24+00:00" } ], "aliases": [], From 74c19dda0e9ca244a1a66f8380d73fa7bfd60746 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 16 Feb 2026 11:45:21 +1100 Subject: [PATCH 058/110] Update link to Gravity Forms --- .github/README.md | 2 +- pdf.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/README.md b/.github/README.md index f483493b3..a036f6c3c 100644 --- a/.github/README.md +++ b/.github/README.md @@ -3,7 +3,7 @@ Gravity PDF [![codecov](https://codecov.io/gh/GravityPDF/gravity-pdf/branch/development/graph/badge.svg)](https://codecov.io/gh/GravityPDF/gravity-pdf) -Gravity PDF is a GPLv2-licensed WordPress plugin that allows you to automatically generate, email and download PDF documents using the popular form-builder plugin, [Gravity Forms](https://rocketgenius.pxf.io/c/1211356/445235/7938) (affiliate link). Find out more about Gravity PDF at [https://gravitypdf.com](https://gravitypdf.com/). +Gravity PDF is a GPLv2-licensed WordPress plugin that allows you to automatically generate, email and download PDF documents using the popular form-builder plugin, [Gravity Forms](https://gpdf.us/gf) (affiliate link). Find out more about Gravity PDF at [https://gravitypdf.com](https://gravitypdf.com/). # About diff --git a/pdf.php b/pdf.php index d5cdb2be2..0db106f3a 100644 --- a/pdf.php +++ b/pdf.php @@ -222,7 +222,7 @@ public function check_gravity_forms() { if ( ! class_exists( 'GFCommon' ) ) { $this->notices[] = static function () { /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Open Tag 3. Html Anchor Close Tag */ - return sprintf( esc_html__( '%1$sGravity Forms%3$s is required to use Gravity PDF. %2$sGet more information%3$s.', 'gravity-pdf' ), '', '', '' ); + return sprintf( esc_html__( '%1$sGravity Forms%3$s is required to use Gravity PDF. %2$sGet more information%3$s.', 'gravity-pdf' ), '', '', '' ); }; return false; @@ -231,7 +231,7 @@ public function check_gravity_forms() { if ( ! version_compare( GFCommon::$version, $this->required_gf_version, '>=' ) ) { $this->notices[] = function () { /* translators: 1. HTML Anchor Open Tag 2. HTML Anchor Close Tag 3. Plugin version number 4. Html Anchor Open Tag */ - return sprintf( esc_html__( '%1$sGravity Forms%2$s version %3$s or higher is required. %4$sGet more information%2$s.', 'gravity-pdf' ), '', '', $this->required_gf_version, '' ); + return sprintf( esc_html__( '%1$sGravity Forms%2$s version %3$s or higher is required. %4$sGet more information%2$s.', 'gravity-pdf' ), '', '', $this->required_gf_version, '' ); }; return false; From 168a0ca8657a8e77b04c354e630aeb50164a6e82 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 11 Mar 2026 14:15:01 +1100 Subject: [PATCH 059/110] Fix PHP error due to breaking change to GFCommon::get_lead_field_display() added in 2.9.29 --- src/Helper/Fields/Field_Chainedselect.php | 4 +++- src/Helper/Fields/Field_Default.php | 3 ++- src/Helper/Fields/Field_Likert.php | 3 ++- src/Helper/Fields/Field_Rank.php | 3 ++- src/Helper/Fields/Field_Rating.php | 3 ++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Helper/Fields/Field_Chainedselect.php b/src/Helper/Fields/Field_Chainedselect.php index f8f2bb6e2..3214fb132 100644 --- a/src/Helper/Fields/Field_Chainedselect.php +++ b/src/Helper/Fields/Field_Chainedselect.php @@ -61,7 +61,9 @@ public function __construct( $field, $entry, Helper_Abstract_Form $gform, Helper * @since 4.0 */ public function html( $value = '', $label = true ) { - $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $this->entry['currency'] ); + $property = version_compare( \GFForms::$version, '2.9.29', '>=' ) ? $this->entry : $this->entry['currency']; + + $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $property ); $html = apply_filters( 'gform_entry_field_value', $html, $this->field, $this->entry, $this->form ); return parent::html( $html ); diff --git a/src/Helper/Fields/Field_Default.php b/src/Helper/Fields/Field_Default.php index 3cb298ece..d0a779385 100644 --- a/src/Helper/Fields/Field_Default.php +++ b/src/Helper/Fields/Field_Default.php @@ -34,8 +34,9 @@ class Field_Default extends Helper_Abstract_Fields { * @since 4.0 */ public function html( $value = '', $label = true ) { + $property = version_compare( \GFForms::$version, '2.9.29', '>=' ) ? $this->entry : $this->entry['currency']; - $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $this->entry['currency'] ); + $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $property ); $html = apply_filters( 'gform_entry_field_value', $html, $this->field, $this->entry, $this->form ); return parent::html( $html ); diff --git a/src/Helper/Fields/Field_Likert.php b/src/Helper/Fields/Field_Likert.php index f97aed428..be0899161 100644 --- a/src/Helper/Fields/Field_Likert.php +++ b/src/Helper/Fields/Field_Likert.php @@ -82,8 +82,9 @@ public function form_data() { * @since 4.0 */ public function html( $value = '', $label = true ) { + $property = version_compare( \GFForms::$version, '2.9.29', '>=' ) ? $this->entry : $this->entry['currency']; - $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $this->entry['currency'] ); + $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $property ); $html = apply_filters( 'gform_entry_field_value', $html, $this->field, $this->entry, $this->form ); return parent::html( $html ); diff --git a/src/Helper/Fields/Field_Rank.php b/src/Helper/Fields/Field_Rank.php index 04401efe8..e35f17c0f 100644 --- a/src/Helper/Fields/Field_Rank.php +++ b/src/Helper/Fields/Field_Rank.php @@ -51,8 +51,9 @@ public function form_data() { * @since 4.0 */ public function html( $value = '', $label = true ) { + $property = version_compare( \GFForms::$version, '2.9.29', '>=' ) ? $this->entry : $this->entry['currency']; - $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $this->entry['currency'] ); + $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $property ); $html = apply_filters( 'gform_entry_field_value', $html, $this->field, $this->entry, $this->form ); return parent::html( $html ); diff --git a/src/Helper/Fields/Field_Rating.php b/src/Helper/Fields/Field_Rating.php index 0a169073f..01d89b48d 100644 --- a/src/Helper/Fields/Field_Rating.php +++ b/src/Helper/Fields/Field_Rating.php @@ -51,8 +51,9 @@ public function form_data() { * @since 4.0 */ public function html( $value = '', $label = true ) { + $property = version_compare( \GFForms::$version, '2.9.29', '>=' ) ? $this->entry : $this->entry['currency']; - $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $this->entry['currency'] ); + $html = GFCommon::get_lead_field_display( $this->field, $this->get_value(), $property ); $html = apply_filters( 'gform_entry_field_value', $html, $this->field, $this->entry, $this->form ); return parent::html( $html ); From 5b08578901973fb3c44e09701ded19741577e970 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Fri, 17 Oct 2025 08:52:03 +1100 Subject: [PATCH 060/110] Fix Chinese language file --- .../{gravity-pdf-zh_ZH.mo => gravity-pdf-zh_CN.mo} | Bin .../{gravity-pdf-zh_ZH.po => gravity-pdf-zh_CN.po} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/assets/languages/{gravity-pdf-zh_ZH.mo => gravity-pdf-zh_CN.mo} (100%) rename src/assets/languages/{gravity-pdf-zh_ZH.po => gravity-pdf-zh_CN.po} (100%) diff --git a/src/assets/languages/gravity-pdf-zh_ZH.mo b/src/assets/languages/gravity-pdf-zh_CN.mo similarity index 100% rename from src/assets/languages/gravity-pdf-zh_ZH.mo rename to src/assets/languages/gravity-pdf-zh_CN.mo diff --git a/src/assets/languages/gravity-pdf-zh_ZH.po b/src/assets/languages/gravity-pdf-zh_CN.po similarity index 100% rename from src/assets/languages/gravity-pdf-zh_ZH.po rename to src/assets/languages/gravity-pdf-zh_CN.po From 9137e349035c2f2407d8e88e28f504a5d07cff83 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Fri, 17 Oct 2025 08:51:53 +1100 Subject: [PATCH 061/110] Remove wp-org deployment --- bin/build-wp.sh | 94 ------------------------------------------------- 1 file changed, 94 deletions(-) delete mode 100755 bin/build-wp.sh diff --git a/bin/build-wp.sh b/bin/build-wp.sh deleted file mode 100755 index c603fa5a1..000000000 --- a/bin/build-wp.sh +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env bash - -echo $0 $1 - -if [ $# -lt 1 ]; then - echo "usage: $0 " - exit 1 -fi - -VERSION=$1 -TMP_DIR="./tmp/package/wporg/" -PACKAGE_DIR="${TMP_DIR}${VERSION}" -WORKING_DIR=$PWD -PACKAGE_NAME="gravity-forms-pdf-extended" - -# Create the working directory -mkdir -p ${PACKAGE_DIR} - -# Get an archive of our plugin -git archive HEAD ${BRANCH} --output ${PACKAGE_DIR}/package.tar.gz -tar -zxf ${PACKAGE_DIR}/package.tar.gz --directory ${PACKAGE_DIR} && rm -f ${PACKAGE_DIR}/package.tar.gz - -# Run Composer -yarn install --cwd ${PACKAGE_DIR} -yarn --cwd ${PACKAGE_DIR} build:production -composer install --no-dev --prefer-dist --optimize-autoloader --working-dir ${PACKAGE_DIR} - -PLUGIN_DIR="$PACKAGE_DIR/" bash ./bin/vendor-prefix.sh - -# Cleanup Node JS -rm -f -R ${PACKAGE_DIR}/node_modules - -# Cleanup additional build files -FILES=( -"${PACKAGE_DIR}/composer.json" -"${PACKAGE_DIR}/composer.lock" -"${PACKAGE_DIR}/package.json" -"${PACKAGE_DIR}/yarn.lock" -"${PACKAGE_DIR}/.babelrc" -"${PACKAGE_DIR}/webpack.config.js" -"${PACKAGE_DIR}/php-scoper.phar" -"${PACKAGE_DIR}/vendor_prefixed/.gitkeep" -"${PACKAGE_DIR}/.nvmrc" -"${PACKAGE_DIR}/.wp-env.json" -"${PACKAGE_DIR}/.testcaferc.js" -) - -for i in "${FILES[@]}" -do - rm -f ${i} -done - -rm -f -R "${PACKAGE_DIR}/src/assets/scss" -rm -f -R "${PACKAGE_DIR}/src/assets/js" -rm -f -R "${PACKAGE_DIR}/bin" -rm -f -R "${PACKAGE_DIR}/.php-scoper" -rm -f -R "${PACKAGE_DIR}/webpack-configs" - -# Generate language files -cd "${PACKAGE_DIR}" -npm install --global wp-pot-cli -wp-pot --domain gravity-pdf --src 'src/**/*.php' --src 'pdf.php' --src 'api.php' --package 'Gravity PDF' --dest-file src/assets/languages/gravity-pdf.pot > /dev/null - -# Replace text domain -if [[ "$OSTYPE" == "darwin"* ]]; then - # OSX support - find . -type f -name '*.php' -print0 | LC_ALL=C xargs -0 sed -i '' -e "s/'gravity-pdf'/'gravity-forms-pdf-extended'/g" - find "./src/assets/languages" -name 'gravity-pdf*' -type f -exec bash -c 'mv "$1" "${1/\/gravity-pdf//gravity-forms-pdf-extended}"' -- {} \; - sed -i '' -e "s/gravity-pdf/gravity-forms-pdf-extended/g" "./src/assets/languages/README.MD" - sed -i '' -e "s/Text Domain: gravity-pdf/Text Domain: gravity-forms-pdf-extended/g" "./pdf.php" - sed -i '' -E "s/Description: (.+) \(canonical\)/Description: \1/g" "./pdf.php" - sed -i '' -e "s|Update URI: https://gravitypdf.com||g" "./pdf.php" - sed -i '' -e "s|/vdp/gravity-pdf|/vdp/gravity-forms-pdf-extended|g" "./readme.txt" -else - # unix support - find "." -type f -name '*.php' -print0 | LC_ALL=C xargs -0 sed -i -e "s/'gravity-pdf'/'gravity-forms-pdf-extended'/g" - find "./src/assets/languages" -name 'gravity-pdf*' -type f -exec bash -c 'mv "$1" "${1/\/gravity-pdf//gravity-forms-pdf-extended}"' -- {} \; - sed -i -e "s/gravity-pdf/gravity-forms-pdf-extended/g" "./src/assets/languages/README.MD" - sed -i -e "s/Text Domain: gravity-pdf/Text Domain: gravity-forms-pdf-extended/g" "./pdf.php" - sed -i -E "s/Description: (.+) \(canonical\)/Description: \1/g" "./pdf.php" - sed -i -e "s|Update URI: https://gravitypdf.com||g" "./pdf.php" - sed -i -e "s|/vdp/gravity-pdf|/vdp/gravity-forms-pdf-extended|g" "./readme.txt" -fi; - -# Remove updater -rm -f "./gravity-pdf-updater.php" - -# Create zip package -cd "../" - -rm -r -f "${PACKAGE_NAME}" -mv ${VERSION} "${PACKAGE_NAME}" -zip -r -q "${PACKAGE_NAME}-${VERSION}.zip" "${PACKAGE_NAME}" -mv "${PACKAGE_NAME}" ${VERSION} From 188cb0257c9b4daca7b1f1d5671621a4e5b1e909 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Fri, 17 Oct 2025 08:51:37 +1100 Subject: [PATCH 062/110] Speed up deployment be disabling coverage --- .github/workflows/deployment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index a0e89e11d..e00f852fc 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -16,6 +16,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: 7.4 + coverage: none env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From da5ee88c954c6e28cf186c8c67acfff4462de1fb Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 28 Aug 2025 15:05:52 +1000 Subject: [PATCH 063/110] Fix changelog levels --- CHANGELOG.md | 310 ++++++++++++++++++++++++++------------------------- 1 file changed, 156 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 386f9e94c..c5ffc1c0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,35 +1,37 @@ # Changelog -## 6.14.1 +## Gravity PDF + +### 6.14.1 * 🧹 Housekeeping: Add `gfpdf-{$type}` CSS class to the HTML mark-up when a field uses a different input type * 🧹 Housekeeping: Use the field type (not input type) in the `gfpdf_pdf_field_content_{$type}` filter * 🐞Bug: Fix PHP error if another plugin lazy loads the PSR/Log v1 library -## 6.14.0 +### 6.14.0 * 🎉 Feature: Rotate Gravity PDF log files when Gravity Forms logging is enabled. This prevents the log file getting to large. * 🎉 Feature: Add support for using v1, v2, and v3 of the PSR/Log Composer library with Gravity PDF * 🐞Bug: Fix PHP error if a third-party plugin loads PSR/Log v2 or v3 -## 6.13.5 +### 6.13.5 * 🐞Bug: Ensure background queue uses correct entry data when resending notifications * 🐞Bug: Prevent plugins corrupting PDF data when viewing/downloading (via output buffer) -## 6.13.4 +### 6.13.4 * 🐞Bug: Resolve PDF View/Download issue if both Event Espresso and LifterLMS plugin are installed -## 6.13.3 +### 6.13.3 * 🔒 Security: Remove the mPDF and Gravity PDF version numbers in the PDF metadata * 🐞Bug: Resolve PHP error in 6.13.2 upgrade routine if the temporary PDF directory has been incorrectly set to a shared system folder * 🐞Bug: Resolve PHP error if the `page` or `subview` admin URL parameters are arrays -## 6.13.2 +### 6.13.2 * 🐞 Bug: Fix plugin build issue preventing the mPDF cache filesystem fix (6.13.0) from working * 🧹 Housekeeping: Add upgrade routine to reset the temporary directory permissions -## 6.13.1 +### 6.13.1 * 🐞 Bug: Only enable image PDF debugging when both `WP_DEBUG` and `WP_DEBUG_DISPLAY` constants are set to true -## 6.13.0 +### 6.13.0 * 🔒 Security: Switch from cURL to wp_safe_remote_get() when getting remote assets for PDFs (eg. images, CSS) * 🔒 Security: Cleanup routine will only allow directories created and managed by Gravity PDF to be deleted * 🐞 Bug: Ensure mPDF cache honors filesystem permissions when creating new folders @@ -40,7 +42,7 @@ * 🧹 Housekeeping: Add `gfpdf_remote_request_args` filter to let developers modify the PDF remote request configuration * 🧹 Housekeeping: Add `gfpdf_mpdf_class_container` filter to let developers replace the `httpClient` class used by mPDF -## 6.12.6 +### 6.12.6 * 🐞 Bug: Add additional guards for expected value when displaying File Upload field in PDFs (prevents PHP notice) * 🐞 Bug: Cleanup Background Processing queue when setting is toggled on/off * 🐞 Bug: Add additional guards for expected value when displaying List field in PDFs (prevents PHP notice if the first row in a list is empty) @@ -51,37 +53,37 @@ * 🐞 Bug: Pass the filtered 'use_value' and 'use_admin_label' arguments when determining if the product table is empty * 🧹 Housekeeping: Move Gravity PDF system status information to the bottom of the report -## 6.12.5.1 +### 6.12.5.1 * 🧹 Housekeeping: Update version number in readme.txt file -## 6.12.5 +### 6.12.5 * 🐞 Bug: Fix slow PDF Background Processing queue after a retry delay was added to the background processing library in Gravity Forms 2.9.7+ * 🧹 Housekeeping: Update PDF Background Processing queue to be compatible with Gravity Forms 2.9.7+ background processing library update * 🧹 Housekeeping: Fix Background Processing deprecation notice when running Gravity Forms 2.9.7+ -## 6.12.4 +### 6.12.4 * 🔒Security: Escape variables in PHP Exceptions * 🐞 Bug: Improve PDF column support when Gravity Forms includes a spacer * 🐞 Bug: Fix display of Website field when it isn't filled in and *Show Empty Fields* is enabled * 🧹 Housekeeping: Mark as compatible with WP 6.7 * 🧹 Housekeeping: Update PHP dependencies -## 6.12.3 +### 6.12.3 * 🐞 Bug: Resolve PHP error when a license has not been activated for a Gravity PDF extension * 🐞 Bug: Resolve PHP error when all plugin dependencies are not met * 🧹 Housekeeping: Open canonical plugin upgrade link in new window -## 6.12.2 +### 6.12.2 * 🔒Security: Fix bug that caused the 'Restrict Owner' PDF setting to be ignored when it was enabled * 🧹 Housekeeping: Adjust canonical plugin notice * 🧹 Housekeeping: Add canonical plugin check on system report * 🧹 Housekeeping: Log license check API calls (canonical only) * 🐞 Bug: Fix PHP Notices in admin area -## 6.12.1 +### 6.12.1 * 🧹 Housekeeping: Update translations -## 6.12.0 +### 6.12.0 * 🎉 Feature: Add basic support for Gravity Forms 2.9 Image Choice and Multiple Choice fields (Gravity PDF Core Booster v2.2 can show the images) * 🎉 Feature: Add support for Digital Signature for Gravity Forms plugin (https://wordpress.org/plugins/digital-signature-for-gravity-forms/) * 🧹 Housekeeping: Allow approved HTML to be displayed in the PDF for Product and Option field choices @@ -89,20 +91,20 @@ * 🐞 Bug: Fix column ordering issue in Blank Slate, Focus Gravity, and Rubix when the RTL setting is enabled * 🐞 Bug: Allow Password and Privileges PDF setting description to be translated -## 6.11.4 +### 6.11.4 * 🐞 Bug: Allow numbers with decimals when saving number fields in the PDF Settings -## 6.11.3 +### 6.11.3 * 🐞 Bug: Fix truncated merge tags in HTML attribute when included in PDF setting Rich Text fields -## 6.11.2 +### 6.11.2 * 🐞 Bug: Resolve race condition by skipping PDF cleanup at the end of form submission process if PDF Background Processing is enabled * 🐞 Bug: Fix issue where some Notifications with PDFs attached were not being handled in a background task when PDF Background Processing is enabled -## 6.11.1 +### 6.11.1 * 🐞 Bug: Only process enabled notifications during form submission when using PDF Background Processing. Notifications are enabled if they are active and have conditional logic that passes. -## 6.11.0 +### 6.11.0 * 🧹 Housekeeping: Limit pages admin notices are displayed on to reduce notice fatigue * 🧹 Housekeeping: Add specific check for the PHP extension `Ctype` when the plugin loads * 🧹 Housekeeping: Tweak admin notice text to make error messages more clear @@ -117,10 +119,10 @@ * 🐞 Bug: Prevent the page reloading when selecting a tooltip on PDF settings pages * 🐞 Bug: Register language files early so startup errors can be translated -## 6.10.2 +### 6.10.2 * 🐞 Bug: Hydrate Nested Forms with Gravity Wiz Populate Anything data -## 6.10.1 +### 6.10.1 * 🐞 Bug: Resolve PHP error when processing shortcode with invalid entry object * 🐞 Bug: Adhere to conditional logic and exclude CSS class for Page Break fields * 🐞 Bug: In more situations the Gravity PDF settings will be refreshed before the form meta is saved to the database @@ -129,10 +131,10 @@ * 🧹 Housekeeping: Update mPDF to latest version * 🧹 Housekeeping: Allow supported HTML in field labels when displayed in PDF -## 6.10.0 +### 6.10.0 * 🎉 Feature: Add native support for the Legal Signature and Legal Consent form fields added by the Legal Signing for Gravity Forms plugin -## 6.9.1 +### 6.9.1 * 🔒Security: Disable the Signed URL feature in the [gravitypdf] shortcode when a URL parameter provides the entry ID (e.g. Page Confirmations) * 🐞 Bug: Gracefully handle invalid conditional logic rules when adding date entry meta support * 🐞 Bug: Display field for entry metadata PDF conditional rule when there are no form fields compatible with conditional logic @@ -141,7 +143,7 @@ * 🐞 Bug: Clear template cache when plugin deactivated * 🧹 Housekeeping: Small improvement to performance when reading template and font files from disk -## 6.9.0 +### 6.9.0 * 🎉 Feature: Add new conditional logic options to PDFs eg. Payment Status, Date Created, Starred (props: Gravity Wiz) * 🎉 Feature: Add support for Show HTML Fields, Show Empty Fields, Show Section Break Description, and Enable Conditional Logic PDF settings when displaying Gravity Wiz Nested Forms field * 🐞 Bug: Fix Form Editor saving problem for Gravity Forms v2.6.* @@ -155,7 +157,7 @@ * Developer: Add `set_pdf_config( $config )` and `get_pdf_config()` methods to PDF Field classes * Developer: In the PDF field blacklist, check using the original type and not with `$field->get_input_type()` -## 6.8.0 +### 6.8.0 * 🎉 Feature: Add PDF Download metabox to Gravity Flow Inbox for logged-in users with appropriate capability * 🎉 Feature: Add AI-generated translations for French, Spanish, Italian, German, Dutch, Russian, and Chinese * 🔒Security: Only show PDF view/download links on entry list and details page if logged-in user has appropriate capability @@ -163,24 +165,24 @@ * 🧹 Housekeeping: When permalinks are enabled, generate the PDF URL with/without a trailing slash * 🐞 Bug: Remove whitespace from textarea fields in the PDF settings -## 6.7.4 +### 6.7.4 * 🐞 Bug: Resolve PHP error for specific GravityView / GravityChart combo * 🐞 Bug: Render supported HTML in labels/choices for the PDF Pricing table * 🐞 Bug: Fix PHP error while viewing a PDF when running an older version of WordPress (< 5.9) and PHP (< 8.0) -## 6.7.3 +### 6.7.3 * 🐞 Bug: Fix 3rd party conflict when different version of PSR-7 library is loaded -## 6.7.2 +### 6.7.2 * 🐞 Bug: Resolve fatal error when using Gravity Forms Google Analytics Pagination feature with the PDF URL included in the parameters. * 🧹 Housekeeping: Update PDF library to latest version * 🧹 Housekeeping: Update help search API details -## 6.7.1 +### 6.7.1 * 🐞 Bug: Improve dependency conflicts with third party plugins who bundle PSR Log v2 or v3 * 🧹 Housekeeping: Use 4xx HTTP Status Codes for non-server related errors when generating PDFs -## 6.7.0 +### 6.7.0 * 🎉 Feature: Add support for multiple PDFs with the same Filename on a single form * 🎉 Feature: Use secure links for File Upload and Post Image fields in Core and Universal PDFs * Dev Feature: Include secure links in $form_data array for File Upload and Post Image fields @@ -188,41 +190,41 @@ * 🐞 Bug: Allow sanitized HTML in the labels of Radio and Checkbox admin settings * 🐞 Bug: Remain editing current PDF if a hard refresh occurs after adding a new PDF to the form -## 6.6.1 +### 6.6.1 * 🐞 Bug: Prevent PDF settings being override if multiple browser windows are open, and both are updating different settings of the same form concurrently * 🐞 Bug: Gracefully handle license key deactivation if an error occurs * 🧹 Housekeeping: Bump WordPress Tested Up To v6.3 -## 6.6.0 +### 6.6.0 * 🎉 Feature: Improve display of ungrouped product fields in Core and Universal templates * Dev Feature: Add `gfpdf_hide_consent_field_if_empty` filter, to remove the Consent field from Core and Universal templates if a user hasn't consented. * 🐞 Bug: Remove Section Break description container is there is not a description included * 🐞 Bug: Fix potential PHP error when using GravityView and PDF for GravityView * 🧹 Housekeeping: Update PHP and JS dependencies -## 6.5.5 +### 6.5.5 * 🐞 Bug: Ensure PDF conditional logic is run through the correct sanitization function upon save * 🐞 Bug: Ensure Gravity Wiz Populate Anything live merge tags are correctly processed in the $form_data array * 🐞 Bug: Fix Monolog error when running PHP8.1 -## 6.5.4 +### 6.5.4 * 🐞 Bug: Fix duplicate notifications when using PDF Background Processing while looping over GFAPI::submit_form() -## 6.5.3 +### 6.5.3 * 🐞 Bug: Fix HTTP(S) image/stylesheet loading problem in PDFs for SiteGround customers -## 6.5.2 +### 6.5.2 * 🐞 Bug: Fix PHP error when a non-string is passed to the Kses sanitizing class * 🐞 Bug: Resolve memory problem generating Core PDFs if an HTML element contains more than 10+ classes (field CSS Classes are now truncated to 8 user-defined classes) * 🐞 Bug: Fix Slim Image Cropper display problems in Core PDFs * 🧹 Housekeeping: Update mPDF to the latest version * 🧹 Housekeeping: Update QueryPath to the latest version -## 6.5.1 +### 6.5.1 * 🧹 Housekeeping: Update mPDF to the latest version * 🐞 Bug: Resolve custom font installation issue for some .ttf files -## 6.5.0 +### 6.5.0 * 🧹 Housekeeping: Update Global Extension Settings UI to be Gravity Forms 2.5 compatible * 🧹 Housekeeping: Adjust how admin Notices are handled on Gravity PDF pages * 🧹 Housekeeping: Update JavaScript package bundle @@ -233,45 +235,45 @@ * 🐞 Bug: Fix undefined `rtl` notice in Core PDF templates * 🐞 Bug: Fix PHP8.1 notice when saving PDF settings -## 6.4.7 +### 6.4.7 * 🐞 Bug: Resolve blank PDF problem when a large HTML block is processed by mPDF * 🐞 Bug: Resolve QueryPath deprecation notice about passing null to trim() * 🧹 Housekeeping: Update mPDF and URL Signer library to latest version -## 6.4.6 +### 6.4.6 * 🐞 Bug: Adjust Nested Forms and Repeater field PDF markup to ensure a unique ID attribute for any HTML tags * 🐞 Bug: Prevent duplicate grid css classes being added to Nested Forms HTML tags * 🐞 Bug: Process merge tags in Background Image PDF setting before late escaping in the PDF HTML markup * 🧹 Housekeeping: Remove initialized message from Gravity PDF logs -## 6.4.5 +### 6.4.5 * 🐞 Bug: Fix image display problem if filename had a space in it * 🐞 Bug: Fix Background Image display problem on Windows OS * Developer: Added HTML field content to Repeater Field $form_data array -## 6.4.4 +### 6.4.4 * 🐞 Bug: Resolve HTML encoding issue in PDF when displaying Coupon field in Gravity Wiz eCommerce Perk's Product Table * 🐞 Bug: Remove coupon line item in PDF when Gravity Wiz eCommerce Perk's Product Table in use * 🐞 Bug: Resolve duplicate product table displayed in a legacy v3 template * 🐞 Bug: Resolve PHP notice when displaying product table in legacy v3 template * 🐞 Bug: Resolve PHP notice when displaying Section Break field in legacy v3 template -## 6.4.3 +### 6.4.3 * 🐞 Bug: Open PDF "view" link in a new browser tab on Entry List page * 🐞 Bug: Only hide Select field in Core/Universal templates if the saved value is an empty string, not a falsey value * 🐞 Bug: Prevent PHP notice when displaying Repeater field in PDFs with a Number sub-field * 🐞 Bug: Prevent HTML attribute content from having their entities decoded if they were previously encoded * 🐞 Bug: Fix Core/Universal template image display issues on servers running Windows -## 6.4.2 +### 6.4.2 * 🐞 Bug: Allow `data` protocol so Base 64-encoded images can be correctly displayed in Core/Universal templates * 🐞 Bug: Fix Core Font Installer problem when running older versions of WordPress (5.3 to 5.8) * 🐞 Bug: Fix fatal return type mismatch error if `safe_style_css` filter has been implemented incorrectly -## 6.4.1 +### 6.4.1 * 🐞 Bug: Fix PDF display issues with the Survey, Poll, Post Category, and Post Custom Fields -## 6.4.0 +### 6.4.0 * Security (Hardening): Move from early escaping to late escaping variables on output * Security (Hardening): Add additional validation checks to the Core Font installer * Security (Hardening): Escape text returned from WordPress l10n functions @@ -293,13 +295,13 @@ * 🐞 Bug: Fix PHP8.1 type conversion warning in the template cache when transient's are flushed * 🐞 Bug: Remove empty repeater sections from Core PDFs when not filled in by the user -## 6.3.1 +### 6.3.1 * 🔒Security: Prevent potential XSS attack by escaping URL returned from add_query_args() on the PDF List or PDF Form Settings pages * Developer: Apply `gfpdf_current_form_object` filter added in 6.3.0 to the form object in Helper_Abstract_Fields.php using the $type `helper_abstract_fields`. * 🐞 Bug: Correctly display the file path in the logs when cleaning up PDFs from disk or flushing the mPDF cache * Performance: reduce I/O operations when flushing the mPDF cache by excluding the top-level directory -## 6.3.0 +### 6.3.0 * 🎉 Feature: Support for mapping PDF URLs to your favorite services using Gravity Forms feeds. This includes (but is not limited to): PayPal, MailChimp, HubSpot, Stripe, Square, ActiveCampaign, Agile CRM, Capsule, CleverReach, Constant Contact, EmailOctopus, Zoho CRM * 🎉 Feature: Support for the Zapier add-on: PDF URLs can now be passed to your zaps * 🎉 Feature: Add [gravitypdf] shortcode rendering support to Gravity Wiz's Entry Block perk @@ -310,11 +312,11 @@ * 🐞 Bug: Fix a race condition when using Background Processing that could see the PDF deleted before being attached to notifications * 🐞 Bug: Do not strip the backslash character when used in PDF settings -## 6.2.1 +### 6.2.1 * 🐞 Bug: Always generate a new PDF when using the GPDFAPI::create_pdf() method * 🐞 Bug: Fix fatal error during PDF generation when using the `gform_address_display_format` filter -## 6.2.0 +### 6.2.0 * 🎉 Feature: Add support for Gravity Forms 2.6 (see Housekeeping below) * 🧹 Housekeeping: Add alternate background color on PDF List page * 🧹 Housekeeping: Add styles/support for new merge tag selector @@ -323,33 +325,33 @@ * 🐞 Bug: Fix error message display issue on Form PDF add/edit page * 🐞 Bug: Fix missing styles on multi-PDF view/download menu on Entry List page -## 6.1.1 +### 6.1.1 * 🐞 Bug: Allow number field to show a thousand separator by using the 'gform_include_thousands_sep_pre_format_number' filter. * 🐞 Bug: Fix PHP Notice when displaying Repeater field caused by processing field's not present in `$form_data['field']` array key * 🧹 Housekeeping: Add logging to file/directory cleanup method * 🧹 Housekeeping: Add additional checks and logging when processing background tasks -## 6.1.0 +### 6.1.0 * 🎉 Feature: Add Copy to Clipboard feature for PDF Shortcode on the PDF List page * 🐞 Bug: Fix empty check on the Radio field so a zero (0) value is not considered empty -## 6.0.3 +### 6.0.3 * 🐞 Bug: Reduce the Focus Gravity template column widths by a fraction to prevent edge-case display issues (props Hiwire Creative) * 🐞 Bug: Fix Help page results text encoding problems * 🐞 Bug: Prevent multiple font files being uploaded to a single dropzone * 🐞 Bug: When checking if a Radio/Select field is empty in the PDF context, only look at the value property. -## 6.0.2 +### 6.0.2 * 🐞 Bug: Fix up 404 link for Outdated Templates in System Status * 🐞 Bug: Revert vendor aliasing for mPDF and querypath (back to the original namespace) as it caused more problems than is solved. Developers: see https://docs.gravitypdf.com/v6/users/v5-to-v6-migration#changed-namespace-for-composer-packages -## 6.0.1 +### 6.0.1 * 🐞 Bug: When displaying the minimum Gravity Forms version not met error, remove `beta-1` as the minimum to prevent confusion. -## 6.0.0 +### 6.0.0 This major release is designed specifically for Gravity Forms 2.5+ and includes breaking pages that may affect you. You are strongly encouraged to [review the upgrade guide before attempting to update to v6](https://docs.gravitypdf.com/v6/users/v5-to-v6-migration). -## ⚠️BREAKING CHANGES +### ⚠️BREAKING CHANGES * New minimum requirements PHP7.3+, WordPress 5.3+, Gravity Forms 2.5+ * Removed Gravity PDF v3 template stylesheet (swap legacy PDF template to Focus Gravity template) * Removed Gravity PDF v3 to v4 migration code (upgrade to v4/v5 before attempting v6 upgrade) @@ -374,7 +376,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * (Dev) Updated field description markup to use DIVs instead of SPANs. Matches Gravity Forms RC1 * (Dev) Deprecate these methods from `\GFPDF\Model\Model_Install`: `uninstall_plugin`, `remove_plugin_options`, `remove_plugin_form_settings`, `remove_folder_structure`, `deactivate_plugin`. All moved to `Model_Uninstall`. -## 🎉 NEW FEATURES +### 🎉 NEW FEATURES * Brand new admin user interface (UI) to seamlessly match the Gravity Forms (GF) 2.5 UI. * Added support for new GF columns feature in Core PDFs * Add PDF column support for Gravity Perks Nested Forms @@ -392,7 +394,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Include Add/Update PDF button below each section on PDF creation page to make it easy to save * Improve RTL support on admin pages -## 🎉 UX IMPROVEMENTS +### 🎉 UX IMPROVEMENTS * Remove the Always Save PDF setting from the UI. * Switch all Radio PDF settings to new Toggle setting * Switch all Multiselect PDF settings to Checkbox field (better accessibility) @@ -406,7 +408,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Remove WP Dialog prompts in UI for greater accessibility * Move Gravity PDF uninstaller from Tools tab to Gravity Forms Uninstall settings page -## 🐛 BUG FIXES +### 🐛 BUG FIXES * Ignore `content-type` header API response when running the Core Font installer * Make all `GFPDFAPI` API class error responses translatable * Fix PHP8 notice @@ -416,7 +418,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Fix border display issue in Core Product table * Show error message in Template Manager when maximum file size limit is reached -## 🧑‍💻 DEVELOPER IMPROVEMENTS +### 🧑‍💻 DEVELOPER IMPROVEMENTS * Rewritten all CSS in SASS * Add `GPDFAPI::get_entry_pdfs( $entry_id )` method to API. Acts like `GPDFAPI::get_form_pdfs( $form_id )` but filters out any PDFs that don't pass conditional logic checks for the current entry. * Added `Helper_Abstract_Config_Settings` class which template config files can extend to automatically have the current PDF settings injected into the class. @@ -427,11 +429,11 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Add better error log messages for PDF Merge tag processing * Pass additional information to the `gfpdf_field_container_class` filter -## 5.4.0 +### 5.4.0 * 🎉 Feature: Prevent update to 6.0 if minimum requirements are not met (including when automatic updates enabled) * 🎉 Feature: Show/allow any new updates for 5.x if minimum requirements are not met for 6.0 -## 5.3.4 +### 5.3.4 * 🔒Security: Resolve XSS issue on PDF List page * 🔒Security: Resolve authenticated arbitrary PHP file Deletion when using the PDF Template Manager (by default, this affects Administrator accounts only) * 🧹 Housekeeping: Add gfpdf_container_class_map filter @@ -444,7 +446,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Fix PHP fatal error when logging is enable and the log file cannot be written to * 🐞 Bug: Fix double spinner randomly showing up when installing and selecting a new PDF template -## 5.3.3 +### 5.3.3 * 🐞 Bug: Fix PHP notice when no valid form or entry passed when processing merge tags * 🐞 Bug: Make PDF generation background processing task unrecoverable so rest of the queue isn't executed * 🐞 Bug: always parse Core Font payload as JSON @@ -455,15 +457,15 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🧹 Housekeeping: update composer-managed dependencies * 🧹 Housekeeping: Make API error messages translatable -## 5.3.2 +### 5.3.2 * 🐞 Bug: Fix Media Manager so it shows all file types on Gravity PDF pages * 🐞 Bug: Fix Security PDF settings JS toggle when using translated text * Dev: Update EDD software licensing class to 1.7.1 -## 5.3.1 +### 5.3.1 * Bug/Dev: Prevent composer package `Monolog` version conflict with other plugins by moving to namespace `GFPDF\Vendor\Monolog` -## 5.3.0 +### 5.3.0 * 🎉 Feature: Add support for Gravity Perk Populate Anything plugin * 🎉 Feature: Add support for Gravity Plus Multi-Currency Selector plugin * 🎉 Feature: Add `allow_url_fopen` PHP setting check to Gravity Forms and Gravity PDF System Statuses @@ -479,7 +481,7 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev: Add `gfpdf_unfiltered_template_list`, `gfpdf_fallback_template_path_by_id`, `gfpdf_template_config_paths`, and `gfpdf_template_image_paths` filters * Dev: Rewrite Monolog timezone logic to support both v1 and v2, which places nice with other plugins that use this library -## 5.2.2 +### 5.2.2 * 🐞 Bug: Add additional error handling to Background Processing when a form / entry is deleted * 🐞 Bug: Adjust logging code to adhere to PSR-3 (forward compatibility with Monolog v2) * 🐞 Bug: Add fixed width to first column in Chained Select output for Core / Universal PDFs @@ -490,12 +492,12 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev: Add additional logging when license activation failure occurs * Dev: Update dependencies: Monolog 1.25.1 -> 1.25.3, Mpdf 8.0.3 -> 8.0.5 -## 5.2.1 +### 5.2.1 * 🐞 Bug: Fix PHP Notice when using Quiz Add-on without a correct answer selected * 🐞 Bug: Fix image display issues in PDF when URL has a redirect * 🐞 Bug: Allow HTML in Consent field label (those supported in wp_kses_post) -## 5.2.0 +### 5.2.0 * 🐞 Bug: Prevent Fatal Error on PHP7.2 when using Category field type set to Checkboxes in Core PDFs * 🐞 Bug: Resolve conflict with SiteGround HTML Minifier when generating PDFs in browser [GH#897] [GH#951] * 🐞 Bug: Strip PDF page breaks from Header and Footer Rich Text Editor fields [GH#898] @@ -537,13 +539,13 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * Dev: Add better error logging for Background Processing tasks * Dev: Refractor Core Font ReactJS code [GH#981] -## 5.1.5 +### 5.1.5 * 🧹 Housekeeping: Add filter `gfpdf_mpdf_post_init_class` to interact with mPDF right after the initial Gravity PDF object setup [GH#890] * 🐞 Bug: Fix URL rewrite issue with plugins that use `action` GET super global [GH#892] * 🐞 Bug: Fix conflict with the SG Optimizer plugin's Minify HTML option [GH#897] * 🐞 Bug: Strip Page Breaks from Headers and Footers to prevent Fatal PHP Error [GH#898] -## 5.1.4 +### 5.1.4 * 🧹 Housekeeping: Upgrade Mpdf from 7.1.8 to 7.1.9 https://github.com/mpdf/mpdf/compare/v7.1.8...v7.1.9 * 🐞 Bug: Ensure correct permissions are set on mPDF tmp directory [GH#874] * 🐞 Bug: Fix up mPDF tmp directory writable warning [GH#873] @@ -551,27 +553,27 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Fix up v3 legacy template notices [GH#875] * 🐞 Bug: Fix up v3 legacy endpoint entry error [GH#876] -## 5.1.3 +### 5.1.3 * 🧹 Housekeeping: Upgrade Mpdf from 7.1.7 to 7.1.8 https://github.com/mpdf/mpdf/compare/v7.1.7...v7.1.8 * 🧹 Housekeeping: Revert Mpdf tmp path back to Gravity PDF tmp directory (introduced 5.0.2) as Mpdf 7.1.8 resolves font cache issue * 🐞 Bug: Use WordPress' ca-bundle.crt when making cURL requests with Mpdf to prevent HTTPS issues [GH#861] * 🐞 Bug: Add `exclude` class support to Nested Form fields [GH#862] -## 5.1.2 +### 5.1.2 * Upgrade Mpdf from 7.1.6 to 7.1.7 https://github.com/mpdf/mpdf/compare/v7.1.6...v7.1.7 * Allow Debug messages to be logged in Gravity PDF log file * Add log file message when the PDF Temporary Directory check fails * Ensure backwards compatibility with legacy templates who access Mpdf properties directly * When sending notifications, ensure PDF settings go through same filters as when viewing / downloading PDFs -## 5.1.1 +### 5.1.1 * 🐞 Bug: Process Merge Tags when displaying Nested Forms in Core / Universal PDFs [GH#849] * 🐞 Bug: Don't strip ``, ``, `

`, and `page-break-*` CSS when displaying Rich Text Editor fields in PDF [GH#852] * 🐞 Bug: Try convert the Background Image URL to a Path for better relability [GH#853] * 🐞 Bug: Fix Rich Text Editor display issue in PDF Settings when Elementor plugin enabled [GH#854] * 🐞 Bug: Don't strip `` tag when direct parent of `` in the Core/Universal PDFs Header and Footer Rich Text Editor [GH#855] -## 5.1.0 +### 5.1.0 * 🎉 Feature: Add support for Gravity Forms Repeater Fields in PDFs [GH#833] * 🎉 Feature: Add support for Gravity Wiz's Nested Forms Perk in PDFs * 🎉 Feature: Add support for Gravity Forms Consent Field in PDFs [GH#832] @@ -592,14 +594,14 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Correctly display the values for multiple Option fields assigned to a single Product when Product Table is ungrouped in PDF [GH#839] * 🐞 Bug: Disable IP-based authentication when the entry IP matches the server IP [GH#840] -## 5.0.2 +### 5.0.2 * 🐞 Bug: Resolve fatal error on WP Engine due to security in place that prevented mPDF font cache from being saved. -## 5.0.1 +### 5.0.1 * 🐞 Bug: Ensure the mPDF temporary directory is set to the PDF Working Directory `tmp` folder [GH#817] * 🐞 Bug: Refine the Background Processing description and tooltip text [GH#818] -## 5.0.0 +### 5.0.0 * Breaking Change: Bump minimum version of Gravity Forms from 1.9 to 2.3.1+ * Breaking Change: Bump WordPress minimum version from 4.4 to 4.8+ * Breaking Change: Bump the PHP minimum version from 5.4 to 5.6+ @@ -624,12 +626,12 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Correct A5 Label so it correctly references 148 x 210mm [GH#811] * 🐞 Bug: Correct default en_US localization strings [GH#815] (credit Garrett Hyder) -## 4.5.0 +### 4.5.0 * 🎉 Feature: Added full support for the Gravity Wiz Conditional Logic Date Plugin * 🎉 Feature: Added full support for the Slim Image Cropper for Gravity Forms Plugin * Dev Feature: Added additional actions that run before and after PDFs are generated. -## 4.4.0 +### 4.4.0 * 🎉 Feature: Add native support for Gravity Forms Chained Select * 🎉 Feature: Include Gravity Forms add-on conditional logic in PDF Conditional Logic selector * 🎉 Feature: When the "Show Page Names" PDF setting is enabled, the `pagebreak` CSS class can now be used on Named Pagebreak fields (except the very first one) @@ -659,18 +661,18 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Right-align prices in the product table * 🐞 Bug: Fix PHP fatal error when PDF cannot be correctly saved to disk -## 4.3.2 +### 4.3.2 * 🐞 Bug: Reverse pricing issue bug fix in 4.3.1 (under some circumstances it cause the incorrect Unit Price to be displayed in product table) * 🐞 Bug: Fix Unit Price currency issue in the product table when using the Gravity Forms Multi Currency plugin * 🐞 Bug: Fix empty line-items in the Product table when using the Gravity Wiz E-Commerce add-on with conditional logic -## 4.3.1 +### 4.3.1 * 🐞 Bug: Restrict Gravity PDF JavaScript to the correct PDF pages (GH#693) * 🐞 Bug: Fix PHP5.2 activation error (GH#697) * 🐞 Bug: Fix RTL issue with Chosen Select library (GH#698) * 🐞 Bug: Fix PDF Product table pricing issue by using the pre-calculated price field for the unit price (GH#699) -## 4.3.0 +### 4.3.0 * 🎉 Feature: Add support for Gravity Perks E-Commerce Add-on (GH#671) * Dev Feature: Add GPDFAPI::get_pdf_fonts() method * Dev Feature: Add 'gfpdf_pdf_generator_pre_processing' filter @@ -683,17 +685,17 @@ This major release is designed specifically for Gravity Forms 2.5+ and includes * 🐞 Bug: Strip URL parameters from home_url(), if any, when building PDF URL (GH#674) * 🐞 Bug: Load the correct PDF Template Configuration file when using 'template' helper param (GH#675) -## 4.2.2 +### 4.2.2 * 🐞 Bug: Fix empty Master Sassword regression introduced in 4.2 (GH#664) * 🐞 Bug: Fix Javascript errors when plugin translation files used (GH#667) * 🐞 Bug: Fix PDF Conditional Logic saving problem when using 'Less than' (GH#668) * 🐞 Bug: Fix PHP Notices when using custom font (GH#669) * 🐞 Bug: Merge Mpdf upstream patches (includes Chrome Viewer Yellow hover fix) -## 4.2.1 +### 4.2.1 * 🐞 Bug: Fix fatal DateTimeZone error for older versions of PHP (GH#654) -## 4.2.0 +### 4.2.0 * 🎉 Feature: Merge tags and shortcodes are displayed in the PDF for any administrative fields (GH#633) * 🎉 Feature: New field class 'pagebreak' forces a pagebreak in the PDF (GH#634) * 🎉 Feature: Instead of the field not showing at all, Gravity Perks Terms of Conditions field now shows the text "Not accepted" @@ -724,13 +726,13 @@ greater control over the core PDF functionality. (GH#622) * 🐞 Bug: Don't show selected product options in the product field when not grouping products together in PDF (GH#646) * 🐞 Bug: Fix edge case that caused PDF settings to be overridden when the form is updated (GH#648) -## 4.1.1 +### 4.1.1 * 🐞 Bug: Add check to see if headers are already sent before trying to redirect to the welcome / update page (GH#601) * 🐞 Bug: Fixed issue accessing the Advanced Template Manager in Safari browser (GH#603) * 🐞 Bug: Ensure the Advanced Template Manager notice and error messages have the correct styles in the Form PDF Settings pages (GH#604) * 🐞 Bug: Fix PDF generation problem using the legacy v3 URL structure (GH#605) -## 4.1.0 +### 4.1.0 * 🎉 Feature: Advanced PDF Template Manager. Upload, View, Select and Delete PDF templates with ease (GH#486) * 🎉 Feature: Add PDF Mergetags which output PDF URLs and compliment the [gravitypdf] shortcode which output HTML links (GH#404) * 🎉 Feature: Add four-column CSS Ready Class support to core PDFs. Note: if you have run "Setup Custom Templates" you will need to re-run it to take advantage of this feature (GH#461) @@ -767,7 +769,7 @@ greater control over the core PDF functionality. (GH#622) * 🐞 Bug: Ensure duplicate mergetags aren't included after PDF template change (GH#589) * 🐞 Bug: Fix PHP Notice if there's no active capabilities for a role (GH#590) -## 4.0.6 +### 4.0.6 * Correctly register our PDF link with the WP Rewrite API when "Almost Pretty" permalinks are active (GH#502) * Correctly process mergetags in password field for Tier 2 PDF templates (GH#503) * Allow mergetags to be saved in HTML attributes in our Header / Footer settings - DEV NOTE: all Rich Text Editor settings fields should be output with `wp_kses_post( $html )` (GH#492) @@ -777,13 +779,13 @@ greater control over the core PDF functionality. (GH#622) * Resolve incorrect page numbering in Mpdf's Table of Contents * Change Helper_Misc->get_contrast() to choose white in more cases (GH#506) -## 4.0.5 +### 4.0.5 * Add support for "Almost Pretty" permalinks for web servers that don't support Mod Rewrite (IIS) (GH#488) * Add PHP 7.1 support – resolves two string-to-array issues (GH#495) * Add

and
tags to Rich Text Paragraph field in PDF – using wpautop() (GH#490) * Disable product table when enabling the 'individual_products' option in core templates (GH#493) -## 4.0.4 +### 4.0.4 * Prevent Finder (Mac) and Ghostscript viewing / processing password-protected PDFs without a password (GH#467) * Fix Font Manager display issues for users running a version of WP lower than 4.5 (GH#470) * Ensure new lines in Header / Footer automatically convert to

or
tags using wpautop() (GH#472) @@ -794,7 +796,7 @@ greater control over the core PDF functionality. (GH#622) * Fixed depreciation notice for multisites using WordPress 4.6 (GH#479) * Apply esc_html() and esc_url() to PDF name and URL in admin area (GH#484) -## 4.0.3 +### 4.0.3 * Fix incorrect product calculations when using decimal comma format eg. 1.000,50 (GH#442) * Rename $config variable to $html_config in core templates (GH#451) * Don't chain CSS in our default setters or set fixed font size in templates (GH#446) @@ -806,14 +808,14 @@ greater control over the core PDF functionality. (GH#622) * Duplicating PDFs will now be inactive by default (GH#458) * Tweaked the "Show Page Names" field description (GH#449) -## 4.0.2 +### 4.0.2 * Fixes issue displaying address fields in v4 PDFs (GH#429) * Fixes internal logging issues and added Gravity Forms 1.1 support (GF#428) * Fixes notice when form pagination information is not available (GH#437) * Fixes notice when using GPDFAPI::product_table() on form that had no products (GH#438) * Fixes caching issue with GravityView Enable Notifications plugin that caused PDF attachment not to be updated (GH#436) -## 4.0.1 +### 4.0.1 * Fixes PHP notice when viewing PDF and Category field is empty (GH#419) * Fixes PHP notice when viewing PDF and custom font directory is empty (GH#416) * Fixes Font Manager / Help Search features due to Underscore.js conflict when PHP's deprecated ASP Tags enabled (GH#417) @@ -823,7 +825,7 @@ greater control over the core PDF functionality. (GH#622) * Fixes documentation search error on PDF Help tab (GH#424) * Add additional check when cleaning up TMP directory (GH#427) -## 4.0 +### 4.0 * Minimum PHP version changed from PHP 5.2 to PHP 5.4. ENSURE YOUR WEB SERVER IS COMPATIBLE BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) * Minimum WordPress version changed from 3.9 to 4.2. ENSURE YOU ARE RUNNING THE MINIMUM VERISON OF WP BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) * Minimum Gravity Forms version changed from 1.8 to 1.9. ENSURE YOU ARE RUNNING THE MINIMUM VERISON OF GRAVITY FORMS BEFORE UPDATING (Forms -> Settings -> PDF -> System Status) @@ -872,34 +874,34 @@ greater control over the core PDF functionality. (GH#622) * Automatically make $form, $entry and $form_data available to PDF templates * Automatically make $gfpdf object available to PDF templates (the main Gravity PDF object containing all our helper classes) -## 3.7.7 +### 3.7.7 * Bug - Ensure 'gfpdf_post_pdf_save' action gets triggered for all PDFs when resending notifications * Housekeeping - Remove compress.php from mPDF package (unneeded) -## 3.7.6 +### 3.7.6 * Bug - Added full support for all Gravity Forms notification events (includes Payment Complete, Payment Refund, Payment Failed, Payment Pending ect) * Bug - Resolve mPDF PHP7 image parsing error due to a change in variable order parsing. -## 3.7.5 +### 3.7.5 * Housekeeping - Tweak mPDF package to be PHP7 compatible. -## 3.7.4 +### 3.7.4 * Housekeeping - Revert patch made in last update as Gravity Forms 1.9.9 fixes the issue internally. -## 3.7.3 +### 3.7.3 * Bug - Gravity Forms 1.9 didn't automatically nl2br paragraph text mergetags. Fixed this issue in custom PDF templates. -## 3.7.2 +### 3.7.2 * Bug - Updated $form_data['date_created'], $form_data['date_created_usa'], $form_data['misc']['date_time'], $form_data['misc']['time_24hr'] and $form_data['misc']['time_12hr'] to factor in the website's timezone settings. -## 3.7.1 +### 3.7.1 * Housekeeping - Allow control over signature width in default template using the 'gfpdfe_signature_width' filter * Housekeeping - Add better error checking when migrating PDF template folder * Housekeeping - Add unit testing to the directory migration function * Bug - Fixed backwards-compatiiblity PHP error when viewing custom PDF templates on Gravity Forms 1.8.3 or below. * Bug - Ensure checkbox field names are included in the $form_data array -## 3.7.0 +### 3.7.0 * Feature - Added 'default-show-section-content' configuration option. You can now display the section break content in the default template. Note: if this option is enabled and the section break is empty it will still be displayed on the PDF. * Feature - Added hooks 'gfpdfe_template_location' and 'gfpdfe_template_location_uri' to change PDF template location * Housekeeping - Migrate your template and configuration files. As of Gravity PDF 3.7 we'll be dropping the 'site_name' folder for single WordPress installs and changing the multisite install directory to the site ID. @@ -918,7 +920,7 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fix up notices in mPDF template when using headers/footers * Bug - Fix up error in PDF when signature field wasn't filled in -## 3.6.0 +### 3.6.0 * Feature - Added support for Gravity Form's sub-field middle name (1.9Beta) * Feature - Patch mPDF with full :nth-child support on TD and TR table cells * Feature - Added $form_data[products_totals][subtotal] key (total price without shipping costs added) @@ -942,32 +944,32 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed up incorrect formatting issue when using custom font name * Bug - Fixed issue displaying Times New Roman in PDF templates -## 3.5.11.1 +### 3.5.11.1 * Bug - Fix issue saving and sending blank PDFs due to security fix -## 3.5.11 +### 3.5.11 * Bug - Fix security issue which gave unauthorized users access to Gravity Form entires -## 3.5.10 +### 3.5.10 * Housekeeping - Include individual scoring for Gravity Form Survey Likert field in the $form_data['survey'] array * Bug - Fix fatal error when Gravity Forms isn't activated, but Gravity PDF is. -## 3.5.9 +### 3.5.9 * Bug - Rollback recent changes that introduced the GFAPI as introduces errors for older versions of Gravity Forms. Will reintroduce in next major release and increase the minimum Gravity Forms version. -## 3.5.8 +### 3.5.8 * Bug - Fixed issue affected some users where a depreciated function was causing a fatal error -## 3.5.7 +### 3.5.7 * Bug - Fixed issue where the PDF settings page was blank for some users -## 3.5.6 +### 3.5.6 * Bug - Fixed issue with last release that affected checks to see if Gravity Forms has submitting * Bug - Fixed fatal error with servers using PHP5.2 or lower * Bug - Fixed E_NOTICE for replacement array_replace_recursive() function in PHP5.2 or lower * Bug - Fixed issue with AJAX spinner showing when submitting support request -## 3.5.5 +### 3.5.5 * Housekeeping - Include French translation (thanks to Marie-Aude Koiransky-Ballouk) * Housekeeping - Wrap 'Initialize Fonts' text in translation ready _e() function * Housekeeping - Tidy up System Status CSS styles to accomidate translation text lengths @@ -975,28 +977,28 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed load_plugin_textdomain which was incorrectly called. * Bug - Correctly check if the plugin is loaded correctly before letting the PDF class fully load -## 3.5.4 +### 3.5.4 * Bug - Fixed issue with incorrect PDF name showing on the entry details page * Bug - Fixed issue with custom fonts being inaccessible without manually reinstalling after upgrading. * Housekeeping - Added in two new filters to modify the $mpdf object. 'gfpdfe_mpdf_class' and 'gfpdfe_mpdf_class_pre_render' (replaces the gfpdfe_pre_render_pdf filter). -## 3.5.3 +### 3.5.3 * Bug - Mergetags braces ({}) were being encoded before conversion * Bug - Fixed issue with empty string being passed to array filter * Housekeeping - Enabled mergetag usage in the pdf_password and pdf_master_password configuration options * Housekeeping - Correctly call $wpdb->prepare so the variables in are in the second argument -## 3.5.2 +### 3.5.2 * Bug - Initialization folder .htaccess file was preventing template.css from being loaded by the default templates. -## 3.5.1 +### 3.5.1 * Bug - Fixed issue with core fonts Arial/Helvetica, Times/Times New Roman and Courier not displaying in the PDF. * Bug - Fixed display issues for multiple PDFs on the details admin entry page * Housekeeping - Made the details entry page PDF view consistent for single or multiple PDFs * Housekeeping - Ensured all javascript files are minified and are correctly being used * Housekeeping - Remove legacy notices from mPDF package -## 3.5.0 +### 3.5.0 * Feature - No longer need to reinitialize every time the software is updated. * Feature - Add auto-initializer on initial installation for sites that have direct write access to their server files * Feature - Add auto-initializer on initial installation across entire multisite network for sites who have direct write access to their server files. @@ -1015,23 +1017,23 @@ greater control over the core PDF functionality. (GH#622) * Bug - When testing write permissions, file_exist() is throwing false positives for some users which would generate a warning when unlink() is called. Hide warning using '@'. -## 3.4.1 +### 3.4.1 * Bug - Fix typo that effected sites running PHP5.2 or below. -## 3.4.0.3 +### 3.4.0.3 * Bug - Define array_replace_recursive() if it doesn't exist, as it is PHP 5.3 only. -## 3.4.0.2 +### 3.4.0.2 * Housekeeping - Wrapped the View PDF and Download buttons in correct language functions - _e() * Bug - Fix problem displaying the signature field * Bug - Fix notice errors with new 'save' PDF hook -## 3.4.0.1 +### 3.4.0.1 * Housekeeping - Add commas on the last line of every config node in the configuration.php file * Housekeeping - Fix up initialization error messages * Bug - Fix up mPDF bugs - soft hyphens, watermarks over SVG images, inline CSS bug -## 3.4.0 +### 3.4.0 * Feature - Added auto-print prompt ability when you add &print=1 to the PDF URL (see https://developer.gravitypdf.com/documentation/display-pdf-in-browser/ for details) * Feature - Added ability to rotate absolute positioned text 180 degrees (previously only 90 and -90). Note: feature in beta * Feature - Backup all template files that are overridden when initializing to a folder inside PDF_EXTENDED_TEMPLATES @@ -1090,26 +1092,26 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed path to fallback templates when not found * Bug - Fixed problem with master password setting to user password -## 3.3.4 +### 3.3.4 * Bug - Fixed issue linking to PDF from front end * Housekeeping - Removed autoredirect to initialization page -## 3.3.3 +### 3.3.3 * Bug - Correctly call javascript to control admin area 'View PDFs' drop down * Bug - Some users still reported incorrect RAM. Convert MB/KB/GB values to M/K/G as per the PHP documentation. * Housekeeping - Show initilisation prompt on all admin area pages instead of only on the Gravity Forms pages -## 3.3.2.1 +### 3.3.2.1 * Bug - Incorrectly showing assigned RAM to website -## 3.3.2 +### 3.3.2 * Bug - Some hosts reported SSL certificate errors when using the support API. Disabled HTTPS for further investigation. Using hash-based verification for authentication. * Housekeeping - Forgot to disable API debug feature after completing beta -## 3.3.1 +### 3.3.1 * Bug - $form_data['list'] was mapped using an incremental key instead of via the field ID -## 3.3.0 +### 3.3.0 * Feature - Overhauled the initialization process so that the software better reviews the host for potential problems before initialization. This should help debug issues and make users aware there could be a problem before they begin using the software. * Feature - Overhauled the settings page to make it easier to access features of the software * Feature - Added a Support tab to the settings page which allows users to securely (over HTTPS) submit a support ticket to the Gravity PDF support desk @@ -1129,7 +1131,7 @@ greater control over the core PDF functionality. (GH#622) * Housekeeping - Update core styles to match Wordpress 3.8/Gravity Forms 1.8. * Housekeeping - Updated header/footer examples to use @page in example. -## 3.2.0 +### 3.2.0 * Feature - Can now view multiple PDFs assigned to a single form via the admin area. Note: You must provide a unique 'filename' parameter in configuration.php for multiple PDFs assigned to a single form. * Feature - You can exclude a field from the default templates using the class name 'exclude'. See our [FAQ topic](https://gravitypdf.com/#faqs) for more details. * Bug - Fixed issue viewing own PDF entry when logged in as anything lower than editor. @@ -1140,13 +1142,13 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed problem sending duplicate PDF when using mass resend notification feature * Deprecated - Removed GF_FORM_ID and GF_LEAD_ID constants which were used in v2.x.x of the software. Ensure you follow [v2.x.x upgrade guide](https://developer.gravitypdf.com/news/version-2-3-migration-guide/) to your templates before upgrading. -## 3.1.4 +### 3.1.4 * Bug - Fixed issue with plugin breaking website's when the Gravity Forms plugin wasn't activated. * Housekeeping - The plugin now only supports Gravity Forms 1.7 or higher and Wordpress 3.5 or higher. * Housekeeping - PDF template files can no longer be accessed directly. Instead, add &html=1 to the end of your URL when viewing a PDF. * Extension - Added additional filters to allow the lead ID and notifications to be overridden. -## 3.1.3 +### 3.1.3 * Feature - Added signature_details_id to $form_data array which maps a signatures field ID to the array. * Extension - Added pre-PDF generator filter for use with extensions. * Bug - Fixed issue with quotes in entry data breaking custom templates. @@ -1155,18 +1157,18 @@ greater control over the core PDF functionality. (GH#622) * Bug - Fixed issue with empty signature field not displaying when option 'default-show-empty' is set. * Bug - Fixed initialization prompt issue when the MPDF package wasn't unpacked. -## 3.1.2 +### 3.1.2 * Feature - Added list array, file path, form ID and lead ID to $form_data array in custom templates * Bug - Fixed initialization prompt issue when updating plugin * Bug - Fixed window.open issue which prevented a new window from opening when viewing a PDF in the admin area * Bug - Fixed issue with product dropdown and radio button data showing the value instead of the name field. * Bug - Fixed incorrect URL pointing to signature in $form_data -## 3.1.1 +### 3.1.1 * Bug - Users whose server only supports FTP file manipulation using the WP_Filesystem API moved the files into the wrong directory due to FTP usually being rooted to the Wordpress home directory. To fix this the plugin attempts to determine the FTP directory, otherwise assumes it is the WP base directory. * Bug - Initialization error message was being called but the success message was also showing. -## 3.1.0 +### 3.1.0 * Feature - Added defaults to configuration.php which allows users to define the default PDF settings for all Gravity Forms. See the [installation and configuration documentation](https://developer.gravitypdf.com/documentation/getting-started-with-gravity-pdf-configuration/) for more details. * Feature - Added three new configuration options 'default-show-html', 'default-show-empty' and 'default-show-page-names' which allow different display options to the three default templates. See the [installation and configuration documentation](http://gravitypdf.com/documentation-v3-x-x/installation-and-configuration/#default-template) for more details. * Feature - Added filter hooks 'gfpdfe_pdf_name' and 'gfpdfe_template' which allows developers to further modify a PDF name and template file, respectively, outside of the configuration.php. This is useful if you have a special case naming convention based on user input. See [https://developer.gravitypdf.com/documentation/filters-and-hooks/](https://developer.gravitypdf.com/documentation/filters-and-hooks/) for more details about using these filters. @@ -1182,16 +1184,16 @@ greater control over the core PDF functionality. (GH#622) * Bug - Removed PHP notice about $even variable not being defined in pdf-entry-detail.php * Bug - Prevent code from continuing to excecute after sending header redirect. -## 3.0.2 +### 3.0.2 * Backwards Compatibility - While PHP 5.3 has was released a number of years ago it seems a number of hosts do not currently offer this version to their clients. In the interest of backwards compatibility we've re-written the plugin to again work with PHP 5+. * Signature / Image Display Bug - All URLs have been converted to a path so images should now display correctly in PDF. -## 3.0.1 +### 3.0.1 * Bug - Fixed issue that caused website to become unresponsive when Gravity Forms was disabled or upgraded * Bug - New HTML fields weren't being displayed in $form_data array * Feature - Options for default templates to disable HTML fields or empty fields (or both) -## 3.0.0 +### 3.0.0 As of Gravity PDF v3.0.0 we have removed the DOMPDF package from our plugin and integrated the more advanced mPDF system. Along with a new HTML to PDF generator, we've rewritten the entire plugin's base code to make it more user friendly to both hobbyists and rock star web developers. Configuration time is cut in half and advanced features like adding security features is now accessible to users who have little experience with PHP. New Features include: @@ -1219,28 +1221,28 @@ Other changes include For more details [view the 3.x.x online documentation](https://developer.gravitypdf.com/). -## 2.2.3 +### 2.2.3 * Bug - Fixed mb_string error in the updated DOMPDF package. -## 2.2.2 +### 2.2.2 * DOMPDF - We updated to the latest version of DOMPDF - DOMPDF 0.6.0 beta 3. * DOMPDF - We've enabled font subsetting by default which should help limit the increased PDF size when using DejaVu Sans (or any other font). -## 2.2.1 +### 2.2.1 * Bug - Fixed HTML error which caused list items to distort on PDF -## 2.2.0 +### 2.2.0 * Compatibility - Ensure compatibility with Gravity Forms 1.7. We've updated the functions.php code and remove gform_user_notification_attachments and gform_admin_notification_attachments hooks which are now deprecated. Functions gform_pdf_create and gform_add_attachment have been removed and replaced with gfpdfe_create_and_attach_pdf(). See upgrade documentation for details. * Enhancement - Added deployment code switch so the template redeployment feature can be turned on and off. This release doesn't require redeployment. * Enhancement - PDF_Generator() variables were getting long and complex so the third variable is now an array which will pass all the optional arguments. The new 1.7 compatible functions.php code includes this method by default. For backwards compatibility the function will still work with the variable structure prior to 2.2.0. * Bug - Fixed error generated by legacy code in the function PDF_processing() which is located in render_to_pdf.php. * Bug - Images and stylesheets will now try and be accessed with a local path instead of a URL. It fixes problem where some hosts were preventing read access from a URL. No template changes are required. -## 2.1.1 +### 2.1.1 * Bug - Signatures stopped displaying after 2.1.0 update. Fixed issue. * Bug - First time install code now won't execute if already have configuration variables in database -## 2.1.0 +### 2.1.0 * Feature - Product table can now be accessed directly through custom templates by running GFPDFEntryDetail::product_table($form, $lead);. See documentation for more details. * Feature - Update screen will ask you if you want to deploy new template files, instead of overriding your modified versions. @@ -1260,11 +1262,11 @@ For more details [view the 3.x.x online documentation](https://developer.gravity * Housekeeping - changed pdf-entry-detail.php class name from GFEntryDetail to GFPDFEntryDetail to remove compatibility problems with Gravity Forms. * Housekeeping - created pdf-settings.php file to house the settings page code. -## 2.0.1 +### 2.0.1 * Fixed Signature bug when checking if image file exists using URL instead of filesystem path * Fixed PHP Constants Notice -## 2.0.0 +### 2.0.0 * Moved templates to active theme folder to prevent custom themes being removed on upgrade * Allow PDFs to be saved using a custom name * Fixed WP_Error bug when image/css file cannot be found @@ -1274,27 +1276,27 @@ For more details [view the 3.x.x online documentation](https://developer.gravity * Plugin/Support moved to dedicated website. * Pro/Business package offers the ability to write fields on an existing PDF. -## 1.2.3 +### 1.2.3 * Fixed $wpdb->prepare error -## 1.2.2 +### 1.2.2 * Fixed bug with tempalte shipping method MERGETAGS * Fixed bug where attachment wasn't being sent * Fixed problem when all_url_fopen was turned off on server and failed to retreive remote images. Now uses WP_HTTP class. -## 1.2.1 +### 1.2.1 * Fixed path to custom css file included in PDF template -## 1.2.0 +### 1.2.0 * Template files moved to the plugin's template folder * Sample Form installed so developers have a working example to modify * Fixed bug when using WordPress in another directory to the site -## 1.1.0 +### 1.1.0 * Now compatible with Gravity Forms Signature Add-On * Moved the field data functions out side of the Gravity Forms core so users can freely style their form information (located in pdf-entry-detail.php) * Simplified the field data output * Fixed bug when using product information -## 1.0.0 +### 1.0.0 * First release. From d00676c59be23fe4db460c437fa252f580cb6360 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Tue, 26 Aug 2025 16:48:50 +1000 Subject: [PATCH 064/110] Fix issue reinitializing merge tags --- .../dynamicTemplateFields/doMergetags.js | 27 +++---------------- .../admin/settings/common/handleMergeTags.js | 20 ++++++++++++++ .../common/setupDynamicTemplateFields.js | 2 ++ .../settings/pdf/doFormSettingsEditPage.js | 14 ++-------- 4 files changed, 28 insertions(+), 35 deletions(-) create mode 100644 src/assets/js/admin/settings/common/handleMergeTags.js diff --git a/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js b/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js index df113644c..c47bc8f74 100644 --- a/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js +++ b/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js @@ -1,27 +1,8 @@ -import $ from 'jquery' - /** - * Remove any existing merge tags and reinitialise - * @return void + * Reinitialise new merge tags + * * @since 4.0 */ -export function doMergetags () { - if (window.gfMergeTags && typeof form !== 'undefined' && $('#gfpdf-fieldset-gfpdf_form_settings_template .merge-tag-support').length >= 0) { - /* Initialise */ - $('#gfpdf-fieldset-gfpdf_form_settings_template .merge-tag-support').each(function () { - new gfMergeTagsObj(form, $(this)) // eslint-disable-line - }) - - /* Wrap merge tag selectors with new GF2.5 markup */ - $('#gfpdf-fieldset-gfpdf_form_settings_template .gform-settings-field').each(function () { - $(this) - .find('.merge-tag-support, .merge-tag-support + span') - .wrapAll('

') - - $(this) - .find('.all-merge-tags.textarea') - .parent() - .wrapAll('
') - }) - } +export function doMergetags() { + document.dispatchEvent( new Event( 'gform/merge_tag/initialize' ) ); } diff --git a/src/assets/js/admin/settings/common/handleMergeTags.js b/src/assets/js/admin/settings/common/handleMergeTags.js new file mode 100644 index 000000000..31a892c8f --- /dev/null +++ b/src/assets/js/admin/settings/common/handleMergeTags.js @@ -0,0 +1,20 @@ +import $ from 'jquery' + +/** + * Wrap fields in a container so the merge tag selector displays correctly + * @param string selector + * @since 6.14.2 + */ +export function handleMergeTags (selector = 'body') { + /* Add better merge tag support */ + $(selector).find('.gform-settings-field').each(function () { + $(this) + .find('.merge-tag-support, .merge-tag-support + span') + .wrapAll('
') + + $(this) + .find('.all-merge-tags.textarea') + .parent() + .wrapAll('
') + }) +} diff --git a/src/assets/js/admin/settings/common/setupDynamicTemplateFields.js b/src/assets/js/admin/settings/common/setupDynamicTemplateFields.js index 79e397af1..c8404a4b0 100644 --- a/src/assets/js/admin/settings/common/setupDynamicTemplateFields.js +++ b/src/assets/js/admin/settings/common/setupDynamicTemplateFields.js @@ -6,6 +6,7 @@ import { initialiseCommonElements } from './initialiseCommonElements' import { doMergetags } from './dynamicTemplateFields/doMergetags' import { toggleFontAppearance } from '../pdf/toggleFontAppearance' import { insertAfter } from '../../../react/utilities/PdfSettings/addEditButton' +import { handleMergeTags } from './handleMergeTags' /** * PDF Templates can assign their own custom settings which can enhance a template @@ -71,6 +72,7 @@ export function setupDynamicTemplateFields () { /* reinitialise new dom elements */ initialiseCommonElements.runElements() doMergetags() + handleMergeTags('#gfpdf-fieldset-gfpdf_form_settings_template') gform_initialize_tooltips() } else { /* Remove floating Add/Edit PDF button */ diff --git a/src/assets/js/admin/settings/pdf/doFormSettingsEditPage.js b/src/assets/js/admin/settings/pdf/doFormSettingsEditPage.js index 20286ed6e..ff2834729 100644 --- a/src/assets/js/admin/settings/pdf/doFormSettingsEditPage.js +++ b/src/assets/js/admin/settings/pdf/doFormSettingsEditPage.js @@ -5,6 +5,7 @@ import { handlePDFConditionalLogic } from './handlePDFConditionalLogic' import { handleOwnerRestriction } from './handleOwnerRestriction' import { toggleFontAppearance } from './toggleFontAppearance' import { toggleAppearanceTab } from './toggleAppearanceTab' +import { handleMergeTags } from '../common/handleMergeTags' export function doFormSettingsEditPage () { setupRequiredFields($('#gfpdf_pdf_form')) @@ -15,18 +16,7 @@ export function doFormSettingsEditPage () { handleOwnerRestriction() toggleFontAppearance($('#gfpdf_settings\\[template\\]').data('template_group')) toggleAppearanceTab() - - /* Add better merge tag support */ - $('.gform-settings-field').each(function () { - $(this) - .find('.merge-tag-support, .merge-tag-support + span') - .wrapAll('
') - - $(this) - .find('.all-merge-tags.textarea') - .parent() - .wrapAll('
') - }) + handleMergeTags() /* Hide Template section, if empty */ const $templateSection = $('#gfpdf-fieldset-gfpdf_form_settings_template') From f6060c2b45e84c16bb67a11c2f8836948f14358a Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 09:37:16 +1000 Subject: [PATCH 065/110] Update packages --- .nvmrc | 2 +- composer.lock | 299 ++++++++++++++++++++++----------------- package.json | 15 +- yarn.lock | 379 +++++++++++++++++++++++++++++++++++++++----------- 4 files changed, 484 insertions(+), 211 deletions(-) diff --git a/.nvmrc b/.nvmrc index 19c7bdba7..209e3ef4b 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -16 \ No newline at end of file +20 diff --git a/composer.lock b/composer.lock index 7ac9c1c22..abf1377a7 100644 --- a/composer.lock +++ b/composer.lock @@ -8,21 +8,21 @@ "packages": [ { "name": "gravitypdf/querypath", - "version": "4.1.0", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/GravityPDF/querypath.git", - "reference": "32b08b5b5295fa3b84baeb91685c66ca86b1c591" + "reference": "6599a112e2f0759c6a05b364641dfcff7247ab7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GravityPDF/querypath/zipball/32b08b5b5295fa3b84baeb91685c66ca86b1c591", - "reference": "32b08b5b5295fa3b84baeb91685c66ca86b1c591", + "url": "https://api.github.com/repos/GravityPDF/querypath/zipball/6599a112e2f0759c6a05b364641dfcff7247ab7e", + "reference": "6599a112e2f0759c6a05b364641dfcff7247ab7e", "shasum": "" }, "require": { "masterminds/html5": "^2.0", - "php": "^7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "^7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "replace": { "arthurkushman/query-path": "3.1.4", @@ -48,7 +48,7 @@ "license": [ "MIT" ], - "description": "PHP library for HTML(5)/XML querying (CSS 4 or XPath) and processing (like jQuery) with PHP8.3 support", + "description": "PHP library for HTML(5)/XML querying (CSS 4 or XPath) and processing (like jQuery) with PHP 7.0 to 8.5 support", "homepage": "https://github.com/gravitypdf/querypath", "keywords": [ "css", @@ -68,25 +68,25 @@ "type": "paypal" } ], - "time": "2025-02-04T05:00:04+00:00" + "time": "2026-03-17T06:14:13+00:00" }, { "name": "gravitypdf/upload", - "version": "3.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/GravityPDF/Upload.git", - "reference": "88fe102a492843fa2ca45a753e263828cc7854e1" + "reference": "7fff246f86d9b8f6277a0561ce28d2c229633e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GravityPDF/Upload/zipball/88fe102a492843fa2ca45a753e263828cc7854e1", - "reference": "88fe102a492843fa2ca45a753e263828cc7854e1", + "url": "https://api.github.com/repos/GravityPDF/Upload/zipball/7fff246f86d9b8f6277a0561ce28d2c229633e49", + "reference": "7fff246f86d9b8f6277a0561ce28d2c229633e49", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.3 || ~8.0.0 || ~8.1.0 || ~8.2.0" + "php": "^7.3 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "replace": { "codeguy/upload": "1.3.2" @@ -129,7 +129,7 @@ "issues": "https://github.com/gravitypdf/upload/issues", "source": "https://github.com/gravitypdf/upload" }, - "time": "2022-12-11T23:50:26+00:00" + "time": "2026-03-11T04:07:56+00:00" }, { "name": "league/uri", @@ -558,16 +558,16 @@ }, { "name": "mpdf/mpdf", - "version": "v8.2.7", + "version": "v8.3.1", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "b59670a09498689c33ce639bac8f5ba26721dab3" + "reference": "2a454ec334109911fdb323a284c19dbf3f049810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/b59670a09498689c33ce639bac8f5ba26721dab3", - "reference": "b59670a09498689c33ce639bac8f5ba26721dab3", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/2a454ec334109911fdb323a284c19dbf3f049810", + "reference": "2a454ec334109911fdb323a284c19dbf3f049810", "shasum": "" }, "require": { @@ -591,6 +591,7 @@ }, "suggest": { "ext-bcmath": "Needed for generation of some types of barcodes", + "ext-imagick": "Needed if developing the Mpdf library", "ext-xml": "Needed mainly for SVG manipulation", "ext-zlib": "Needed for compression of embedded resources, such as fonts" }, @@ -635,7 +636,7 @@ "type": "custom" } ], - "time": "2025-12-01T10:18:02+00:00" + "time": "2026-03-11T10:58:44+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -1012,27 +1013,27 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.4", + "version": "v2.6.6", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "4b53852fde2734ec6a07e458a085db627c60eada" + "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", - "reference": "4b53852fde2734ec6a07e458a085db627c60eada", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/de0cf35911be3e9ea63b48e0f307883b1c7c48ac", + "reference": "de0cf35911be3e9ea63b48e0f307883b1c7c48ac", "shasum": "" }, "require": { "ext-zlib": "*", - "php": "^7.1 || ^8.0" + "php": ">=7.2 <=8.5.99999" }, "conflict": { "setasign/tfpdf": "<1.31" }, "require-dev": { - "phpunit/phpunit": "^7", + "phpunit/phpunit": "^8.5.52", "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", @@ -1072,7 +1073,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.6" }, "funding": [ { @@ -1080,7 +1081,7 @@ "type": "tidelift" } ], - "time": "2025-08-05T09:57:14+00:00" + "time": "2026-03-13T08:38:20+00:00" }, { "name": "spatie/url-signer", @@ -2191,16 +2192,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.31", + "version": "9.6.34", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5" + "reference": "b36f02317466907a230d3aa1d34467041271ef4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/945d0b7f346a084ce5549e95289962972c4272e5", - "reference": "945d0b7f346a084ce5549e95289962972c4272e5", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b36f02317466907a230d3aa1d34467041271ef4a", + "reference": "b36f02317466907a230d3aa1d34467041271ef4a", "shasum": "" }, "require": { @@ -2222,7 +2223,7 @@ "phpunit/php-timer": "^5.0.3", "sebastian/cli-parser": "^1.0.2", "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.9", + "sebastian/comparator": "^4.0.10", "sebastian/diff": "^4.0.6", "sebastian/environment": "^5.1.5", "sebastian/exporter": "^4.0.8", @@ -2274,7 +2275,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.31" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.34" }, "funding": [ { @@ -2298,7 +2299,7 @@ "type": "tidelift" } ], - "time": "2025-12-06T07:45:52+00:00" + "time": "2026-01-27T05:45:00+00:00" }, { "name": "roave/security-advisories", @@ -2306,18 +2307,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "9a341b84b3ebb8ad254193ce440b44c7d4375a4f" + "reference": "ca65967338940abbcf8ded05a81ebab0b3137683" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/9a341b84b3ebb8ad254193ce440b44c7d4375a4f", - "reference": "9a341b84b3ebb8ad254193ce440b44c7d4375a4f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ca65967338940abbcf8ded05a81ebab0b3137683", + "reference": "ca65967338940abbcf8ded05a81ebab0b3137683", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<=4.3.16", + "admidio/admidio": "<5.0.8", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -2326,12 +2327,14 @@ "aimeos/ai-cms-grapesjs": ">=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.9|>=2023.04.1,<2023.10.15|>=2024.04.1,<2024.10.8|>=2025.04.1,<2025.10.2", "aimeos/ai-controller-frontend": "<2020.10.15|>=2021.04.1,<2021.10.8|>=2022.04.1,<2022.10.8|>=2023.04.1,<2023.10.9|==2024.04.1", "aimeos/aimeos-core": ">=2022.04.1,<2022.10.17|>=2023.04.1,<2023.10.17|>=2024.04.1,<2024.04.7", + "aimeos/aimeos-laravel": "==2021.10", "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "airesvsg/acf-to-rest-api": "<=3.1", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<1.5.2.0-beta1", + "alextselegidis/easyappointments": "<=1.5.2", "alexusmai/laravel-file-manager": "<=3.3.1", + "algolia/algoliasearch-magento-2": "<=3.16.1|>=3.17.0.0-beta1,<=3.17.1", "alt-design/alt-redirect": "<1.6.4", "altcha-org/altcha": "<1.3.1", "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", @@ -2340,6 +2343,7 @@ "amphp/artax": "<1.0.6|>=2,<2.0.6", "amphp/http": "<=1.7.2|>=2,<=2.1", "amphp/http-client": ">=4,<4.4", + "amphp/http-server": ">=2.0.0.0-RC1-dev,<2.1.10|>=3.0.0.0-beta1,<3.4.4", "anchorcms/anchor-cms": "<=0.12.7", "andreapollastri/cipi": "<=3.1.15", "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", @@ -2356,16 +2360,19 @@ "athlon1600/php-proxy": "<=5.1", "athlon1600/php-proxy-app": "<=3", "athlon1600/youtube-downloader": "<=4", + "aureuserp/aureuserp": "<1.3.0.0-beta1", "austintoddj/canvas": "<=3.4.2", - "auth0/auth0-php": ">=3.3,<8.18", - "auth0/login": "<7.20", - "auth0/symfony": "<=5.5", - "auth0/wordpress": "<=5.4", + "auth0/auth0-php": ">=3.3,<=8.18", + "auth0/login": "<=7.20", + "auth0/symfony": "<=5.7", + "auth0/wordpress": "<=5.5", "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", + "avideo/avideo": "<=26", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.368", - "azuracast/azuracast": "<=0.23.1", + "aws/aws-sdk-php": "<=3.371.3", + "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", + "azuracast/azuracast": "<=0.23.3", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", "backpack/crud": "<3.4.9", @@ -2377,7 +2384,7 @@ "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.8", "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<=5.1.1", + "baserproject/basercms": "<=5.2.2", "bassjobsen/bootstrap-3-typeahead": ">4.0.2", "bbpress/bbpress": "<2.6.5", "bcit-ci/codeigniter": "<3.1.3", @@ -2405,7 +2412,7 @@ "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cadmium-org/cadmium-cms": "<=0.4.9", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|>=5.2.10,<5.2.12|==5.3", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", "cardgate/woocommerce": "<=3.1.15", @@ -2416,15 +2423,17 @@ "causal/oidc": "<4", "cecil/cecil": "<7.47.1", "centreon/centreon": "<22.10.15", + "cesargb/laravel-magiclink": ">=2,<2.25.1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", + "ci4-cms-erp/ci4ms": "<=0.31.3", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.11.4", - "code16/sharp": "<9.11.1", + "cockpit-hq/cockpit": "<2.13.5", + "code16/sharp": "<9.20", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", "codeigniter4/framework": "<4.6.2", @@ -2435,7 +2444,7 @@ "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", "composer/composer": "<1.10.27|>=2,<2.2.26|>=2.3,<2.9.3", - "concrete5/concrete5": "<9.4.3", + "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", "contao/comments-bundle": ">=2,<4.13.40|>=5.0.0.0-RC1-dev,<5.3.4", @@ -2444,10 +2453,19 @@ "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", + "coreshop/core-shop": "<4.1.9", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", - "craftcms/cms": "<=4.16.16|>=5,<=5.8.20", + "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", + "craftcms/aws-s3": ">=2.0.2,<=2.2.4", + "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", + "craftcms/cms": "<=4.17.7|>=5,<=5.9.13", + "craftcms/commerce": ">=4,<4.11|>=5,<5.6", + "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", + "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", + "craftcms/google-cloud": ">=2.0.0.0-beta1,<=2.2", + "craftcms/webhooks": ">=3,<3.2", "croogo/croogo": "<=4.0.7", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -2465,10 +2483,11 @@ "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", "dev-lancer/minecraft-motd-parser": "<=1.0.5", - "devcode-it/openstamanager": "<=2.9.4", + "devcode-it/openstamanager": "<=2.10.1", "devgroup/dotplant": "<2020.09.14-dev", "digimix/wp-svg-upload": "<=1", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", + "directorytree/imapengine": "<1.22.3", "dl/yag": "<3.0.1", "dmk/webkitpdf": "<1.1.4", "dnadesign/silverstripe-elemental": "<5.3.12", @@ -2481,9 +2500,10 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<21.0.3", + "dolibarr/dolibarr": "<=22.0.4", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", + "dreamfactory/df-core": "<1.0.4", "drupal-pattern-lab/unified-twig-extensions": "<=0.1", "drupal/access_code": "<2.0.5", "drupal/acquia_dam": "<1.1.5", @@ -2495,7 +2515,7 @@ "drupal/commerce_alphabank_redirect": "<1.0.3", "drupal/commerce_eurobank_redirect": "<2.1.1", "drupal/config_split": "<1.10|>=2,<2.0.2", - "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.4.9|>=10.5,<10.5.6|>=11,<11.1.9|>=11.2,<11.2.8", + "drupal/core": ">=6,<6.38|>=7,<7.103|>=8,<10.4.9|>=10.5,<10.5.6|>=11,<11.1.9|>=11.2,<11.2.8", "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", "drupal/currency": "<3.5", "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", @@ -2522,10 +2542,10 @@ "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", - "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", + "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.3.1", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", - "egroupware/egroupware": "<23.1.20240624", + "egroupware/egroupware": "<23.1.20260113|>=26.0.20251208,<26.0.20260113", "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "elijaa/phpmemcacheadmin": "<=1.3", @@ -2548,18 +2568,18 @@ "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1|>=5.3.0.0-beta1,<5.3.5", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", "ezsystems/ezplatform-http-cache": "<2.3.16", - "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", + "ezsystems/ezplatform-kernel": "<=1.2.5|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.26|>=3.3,<3.3.40", "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", + "ezsystems/ezpublish-kernel": "<=6.13.8.1|>=7,<7.5.31", "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2025.4|==2025.11|==2025.41|==2025.43", + "facturascripts/facturascripts": "<2025.81", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", @@ -2567,11 +2587,11 @@ "filament/actions": ">=3.2,<3.2.123", "filament/filament": ">=4,<4.3.1", "filament/infolists": ">=3,<3.2.115", - "filament/tables": ">=3,<3.2.115", + "filament/tables": ">=3,<3.2.115|>=4,<4.8.5|>=5,<5.3.5", "filegator/filegator": "<7.8", "filp/whoops": "<2.1.13", "fineuploader/php-traditional-server": "<=1.2.2", - "firebase/php-jwt": "<6", + "firebase/php-jwt": "<7", "fisharebest/webtrees": "<=2.1.18", "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", "fixpunkt/fp-newsletter": "<1.1.1|>=1.2,<2.1.2|>=2.2,<3.2.6", @@ -2579,6 +2599,7 @@ "flarum/flarum": "<0.1.0.0-beta8", "flarum/framework": "<1.8.10", "flarum/mentions": "<1.6.3", + "flarum/nicknames": "<1.8.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", "floriangaerber/magnesium": "<0.3.1", @@ -2600,17 +2621,18 @@ "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<=4.3", - "froxlor/froxlor": "<=2.2.5", + "frosh/adminer-platform": "<2.2.1", + "froxlor/froxlor": "<=2.3.4", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=5.0.2", + "funadmin/funadmin": "<=7.1.0.0-RC4", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", - "getformwork/formwork": "<2.2", + "getformwork/formwork": "<=2.3.3", "getgrav/grav": "<1.11.0.0-beta1", - "getkirby/cms": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1|>=5,<5.1.4", + "getkirby/cms": "<=5.2.1", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -2619,12 +2641,12 @@ "globalpayments/php-sdk": "<2", "goalgorilla/open_social": "<12.3.11|>=12.4,<12.4.10|>=13.0.0.0-alpha1,<13.0.0.0-alpha11", "gogentooss/samlbase": "<1.2.7", - "google/protobuf": "<3.4", + "google/protobuf": "<4.33.6", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gp247/core": "<1.1.24", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.17", + "grumpydictator/firefly-iii": "<6.1.17|>=6.4.23,<=6.5", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/oauth-subscriber": "<0.8.1", @@ -2639,6 +2661,7 @@ "hjue/justwriting": "<=1", "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", + "hybridauth/hybridauth": "<=3.12.2", "hyn/multi-tenant": ">=5.6,<5.7.2", "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.25|>=5,<5.0.3", "ibexa/admin-ui-assets": ">=4.6.0.0-alpha1,<4.6.21", @@ -2650,7 +2673,7 @@ "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3|>=5,<5.0.4", "icecoder/icecoder": "<=8.1", - "idno/known": "<=1.3.1", + "idno/known": "<1.6.4", "ilicmiljan/secure-props": ">=1.2,<1.2.2", "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", @@ -2667,10 +2690,12 @@ "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", + "invoiceninja/invoiceninja": "<5.13.4", "ipl/web": "<0.10.1", "islandora/crayfish": "<4.1", "islandora/islandora": ">=2,<2.4.1", "ivankristianto/phpwhois": "<=4.3", + "j0k3r/graby": "<=2.5", "jackalope/jackalope-doctrine-dbal": "<1.7.4", "jambagecom/div2007": "<0.10.2", "james-heinrich/getid3": "<1.9.21", @@ -2679,6 +2704,7 @@ "jbartels/wec-map": "<3.0.3", "jcbrand/converse.js": "<3.3.3", "joelbutcher/socialstream": "<5.6|>=6,<6.2", + "johnbillion/query-monitor": "<3.20.4", "johnbillion/wp-crontrol": "<1.16.2|>=1.17,<1.19.2", "joomla/application": "<1.0.13", "joomla/archive": "<1.1.12|>=2,<2.0.1", @@ -2697,16 +2723,17 @@ "jweiland/events2": "<8.3.8|>=9,<9.0.6", "jweiland/kk-downloader": "<1.2.2", "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplejwt": "<=1.1", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3", - "kimai/kimai": "<=2.20.1", + "kimai/kimai": "<=2.50", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", "kohana/core": "<3.3.3", "koillection/koillection": "<1.6.12", - "krayin/laravel-crm": "<=1.3", + "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", @@ -2718,24 +2745,26 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/passport": "<13.7.1", "laravel/pulse": "<1.3.1", - "laravel/reverb": "<1.4", + "laravel/reverb": "<1.7", "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", - "lavalite/cms": "<=9|==10.1", + "lavalite/cms": "<=10.1", "lavitto/typo3-form-to-database": "<2.2.5|>=3,<3.2.2|>=4,<4.2.3|>=5,<5.0.2", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<2.7", + "league/commonmark": "<=2.8.1", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<25.12", + "librenms/librenms": "<26.3", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", - "limesurvey/limesurvey": "<6.5.12", + "limesurvey/limesurvey": "<6.15.4", "livehelperchat/livehelperchat": "<=3.91", + "livewire-filemanager/filemanager": "<=1.0.4", "livewire/livewire": "<2.12.7|>=3.0.0.0-beta1,<3.6.4", "livewire/volt": "<1.7", "lms/routes": "<2.1.1", @@ -2756,12 +2785,12 @@ "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", "manogi/nova-tiptap": "<=3.2.6", - "mantisbt/mantisbt": "<2.27.2", + "mantisbt/mantisbt": "<2.28.1", "marcwillmann/turn": "<0.3.3", "marshmallow/nova-tiptap": "<5.7", "matomo/matomo": "<1.11", "matyhtf/framework": "<3.0.6", - "mautic/core": "<5.2.9|>=6,<6.0.7", + "mautic/core": "<5.2.10|>=6,<6.0.8|>=7.0.0.0-alpha,<7.0.1", "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", @@ -2783,10 +2812,11 @@ "microsoft/microsoft-graph": ">=1.16,<1.109.1|>=2,<2.0.1", "microsoft/microsoft-graph-beta": "<2.0.1", "microsoft/microsoft-graph-core": "<2.0.2", - "microweber/microweber": "<=2.0.19", + "microweber/microweber": "<2.0.20", "mikehaertl/php-shellcommand": "<1.6.1", "mineadmin/mineadmin": "<=3.0.9", "miniorange/miniorange-saml": "<1.4.3", + "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", @@ -2794,7 +2824,7 @@ "mongodb/mongodb": ">=1,<1.9.2", "mongodb/mongodb-extension": "<1.21.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.4.11|>=4.5.0.0-beta,<4.5.7|>=5.0.0.0-beta,<5.0.3", + "moodle/moodle": "<4.5.9|>=5.0.0.0-beta,<5.0.5|>=5.1.0.0-beta,<5.1.2", "moonshine/moonshine": "<=3.12.5", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", @@ -2839,7 +2869,7 @@ "october/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", "october/october": "<3.7.5", "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<3.7.5", + "october/system": "<=3.7.12|>=4,<=4.0.11", "oliverklee/phpunit": "<3.5.15", "omeka/omeka-s": "<4.0.3", "onelogin/php-saml": "<2.21.1|>=3,<3.8.1|>=4,<4.3.1", @@ -2847,9 +2877,9 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.16", + "openmage/magento-lts": "<20.16.1", "opensolutions/vimbadmin": "<=3.0.15", - "opensource-workshop/connect-cms": "<1.8.7|>=2,<2.4.7", + "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", @@ -2879,6 +2909,7 @@ "pear/pear": "<=1.10.1", "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", + "ph7software/ph7builder": "<=17.9.1", "phanan/koel": "<5.1.4", "phenx/php-svg-lib": "<0.5.2", "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", @@ -2889,33 +2920,35 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<=4.0.13", + "phpmyfaq/phpmyfaq": "<=4.1", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", "phpoffice/phpspreadsheet": "<1.30|>=2,<2.1.12|>=2.2,<2.4|>=3,<3.10|>=4,<5", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<2.0.47|>=3,<3.0.36", + "phpseclib/phpseclib": "<=2.0.51|>=3,<=3.0.49", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5.0.10,<5.6.3", + "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8", "phpwhois/phpwhois": "<=4.2.5", "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", + "phraseanet/phraseanet": "==4.0.3", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.7.6", + "pimcore/admin-ui-classic-bundle": "<=1.7.15|>=2.0.0.0-RC1-dev,<=2.2.2", "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<11.5.4", + "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3", + "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", "plotly/plotly.js": "<2.25.2", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<5.32.1", + "pocketmine/pocketmine-mp": "<5.41.1", "pocketmine/raklib": ">=0.14,<0.14.6|>=0.15,<0.15.1", "pressbooks/pressbooks": "<5.18", "prestashop/autoupgrade": ">=4,<4.10.1", @@ -2923,7 +2956,7 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.2.3", + "prestashop/prestashop": "<8.2.5|>=9.0.0.0-alpha1,<9.1", "prestashop/productcomments": "<5.0.2", "prestashop/ps_checkout": "<4.4.1|>=5,<5.0.5", "prestashop/ps_contactinfo": "<=3.3.2", @@ -2934,12 +2967,14 @@ "processwire/processwire": "<=3.0.246", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.12", + "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", + "pterodactyl/panel": "<1.12.1", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", "punktde/pt_extbase": "<1.5.1", "pusher/pusher-php-server": "<2.2.1", + "putyourlightson/craft-sprig": ">=2,<2.15.2|>=3,<3.7.2", "pwweb/laravel-core": "<=0.3.6.0-beta", "pxlrbt/filament-excel": "<1.1.14|>=2.0.0.0-alpha,<2.3.3", "pyrocms/pyrocms": "<=3.9.1", @@ -2948,6 +2983,7 @@ "rainlab/blog-plugin": "<1.4.1", "rainlab/debugbar-plugin": "<3.1", "rainlab/user-plugin": "<=1.4.5", + "ralffreit/mfa-email": "<1.0.7|==2", "rankmath/seo-by-rank-math": "<=1.0.95", "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", @@ -2958,15 +2994,17 @@ "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<=3.1.3", + "roadiz/documents": "<2.3.42|>=2.4,<2.5.44|>=2.6,<2.6.28|>=2.7,<2.7.9", + "robrichards/xmlseclibs": "<3.1.5", "roots/soil": "<4.1", - "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11", + "roundcube/roundcubemail": "<1.5.10|>=1.6,<1.6.11|>=1.7.0.0-beta,<1.7.0.0-RC5-dev", "rudloff/alltube": "<3.0.3", "rudloff/rtmpdump-bin": "<=2.3.1", "s-cart/core": "<=9.0.5", "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "saloonphp/saloon": "<4", "samwilson/unlinked-wikibase": "<1.42", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", @@ -2974,10 +3012,10 @@ "setasign/fpdi": "<2.6.4", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<1.2.1", - "shopware/core": "<6.6.10.9-dev|>=6.7,<6.7.4.1-dev", - "shopware/platform": "<6.6.10.7-dev|>=6.7,<6.7.3.1-dev", + "shopware/core": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", + "shopware/platform": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", + "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopxo/shopxo": "<=6.4", "showdoc/showdoc": "<2.10.4", @@ -3009,7 +3047,7 @@ "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", "simplesamlphp/xml-common": "<1.20", - "simplesamlphp/xml-security": "==1.6.11", + "simplesamlphp/xml-security": "<1.13.9|>=2,<2.3.1", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", "sjbr/sr-feuser-register": "<2.6.2|>=5.1,<12.5", @@ -3019,10 +3057,10 @@ "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<=8.3.4", + "snipe/snipe-it": "<8.3.7", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "solspace/craft-freeform": ">=5,<5.10.16", + "solspace/craft-freeform": "<4.1.29|>=5,<=5.14.6", "soosyze/soosyze": "<=2", "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", @@ -3037,14 +3075,14 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<=5.22", + "statamic/cms": "<5.73.16|>=6,<6.7.2", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<1.6.44|>=2,<2.5.25|>=2.6,<2.6.9|>=3.0.0.0-alpha1,<3.0.0.0-alpha3", + "sulu/sulu": "<2.6.22|>=3,<3.0.5", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "svewap/a21glossary": "<=0.4.10", @@ -3056,7 +3094,7 @@ "sylius/grid-bundle": "<1.10.1", "sylius/paypal-plugin": "<1.6.2|>=1.7,<1.7.2|>=2,<2.0.2", "sylius/resource-bundle": ">=1,<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.12.19|>=1.13.0.0-alpha1,<1.13.4", + "sylius/sylius": "<1.9.12|>=1.10,<1.10.16|>=1.11,<1.11.17|>=1.12,<=1.12.22|>=1.13,<=1.13.14|>=1.14,<=1.14.17|>=2,<=2.0.15|>=2.1,<=2.1.11|>=2.2,<=2.2.2", "symbiote/silverstripe-multivaluefield": ">=3,<3.1", "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", "symbiote/silverstripe-seed": "<6.0.3", @@ -3076,7 +3114,7 @@ "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/polyfill": ">=1,<1.10", "symfony/polyfill-php55": ">=1,<1.10", - "symfony/process": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/process": "<5.4.51|>=6,<6.4.33|>=7,<7.1.7|>=7.3,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", "symfony/routing": ">=2,<2.0.19", "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", @@ -3087,7 +3125,7 @@ "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", + "symfony/symfony": "<5.4.51|>=6,<6.4.33|>=7,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", @@ -3111,7 +3149,7 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<4.0.16|>=4.1.0.0-alpha,<=4.1.0.0-beta2", + "thorsten/phpmyfaq": "<4.1.1", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -3129,11 +3167,12 @@ "ttskch/pagination-service-provider": "<1", "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", + "typicms/core": "<16.1.7", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", "typo3/cms-belog": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", "typo3/cms-beuser": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", - "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-core": "<=8.7.56|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", "typo3/cms-dashboard": ">=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-extensionmanager": ">=10,<=10.4.47|>=11,<=11.5.41|>=12,<=12.4.24|>=13,<=13.4.2", @@ -3145,7 +3184,8 @@ "typo3/cms-install": "<4.1.14|>=4.2,<4.2.16|>=4.3,<4.3.9|>=4.4,<4.4.5|>=12.2,<12.4.8|==13.4.2", "typo3/cms-lowlevel": ">=11,<=11.5.41", "typo3/cms-recordlist": ">=11,<11.5.48", - "typo3/cms-recycler": ">=9,<9.5.55|>=10,<10.4.54|>=11,<11.5.48|>=12,<12.4.37|>=13,<13.4.18", + "typo3/cms-recycler": ">=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", + "typo3/cms-redirects": ">=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1", "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "typo3/cms-scheduler": ">=11,<=11.5.41", "typo3/cms-setup": ">=9,<=9.5.50|>=10,<=10.4.49|>=11,<=11.5.43|>=12,<=12.4.30|>=13,<=13.4.11", @@ -3175,15 +3215,16 @@ "vertexvaar/falsftp": "<0.2.6", "villagedefrance/opencart-overclocked": "<=1.11.1", "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<=4.8.1", + "vrana/adminer": "<5.4.2", "vufind/vufind": ">=2,<9.1.1", "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", "wapplersystems/a21glossary": "<=0.4.10", - "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9", - "web-auth/webauthn-lib": ">=4.5,<4.9", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4", + "web-auth/webauthn-lib": ">=4.5,<4.9|>=5.2,<5.2.4", + "web-auth/webauthn-symfony-bundle": ">=5.2,<5.2.4", "web-feet/coastercms": "==5.5", "web-tp3/wec_map": "<3.0.3", "webbuilders-group/silverstripe-kapost-bridge": "<0.4", @@ -3195,8 +3236,8 @@ "wikibase/wikibase": "<=1.39.3", "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", - "winter/wn-backend-module": "<1.2.4", - "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", + "winter/wn-backend-module": "<1.2.12", + "winter/wn-cms-module": "<=1.2.9", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", @@ -3208,11 +3249,13 @@ "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wpglobus/wpglobus": "<=1.9.6", - "wwbn/avideo": "<14.3", + "wpmetabox/meta-box": "<5.11.2", + "wwbn/avideo": "<=26", "xataface/xataface": "<3", "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", - "yeswiki/yeswiki": "<=4.5.4", + "yansongda/pay": "<=3.7.19", + "yeswiki/yeswiki": "<4.6", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -3227,6 +3270,7 @@ "yiisoft/yii2-redis": "<2.0.20", "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yoast/duplicate-post": "<=4.5", "yourls/yourls": "<=1.10.2", "yuan1994/tpadmin": "<=1.3.12", "yungifez/skuul": "<=2.6.5", @@ -3267,7 +3311,8 @@ "zf-commons/zfc-user": "<1.2.2", "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<=6.1.53" + "zoujingli/thinkadmin": "<=6.1.53", + "zumba/json-serializer": "<3.2.3" }, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -3304,7 +3349,7 @@ "type": "tidelift" } ], - "time": "2026-01-05T20:06:42+00:00" + "time": "2026-04-08T20:16:11+00:00" }, { "name": "sebastian/cli-parser", @@ -3475,16 +3520,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.9", + "version": "4.0.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5" + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5", - "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e4df00b9b3571187db2831ae9aada2c6efbd715d", + "reference": "e4df00b9b3571187db2831ae9aada2c6efbd715d", "shasum": "" }, "require": { @@ -3537,7 +3582,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.10" }, "funding": [ { @@ -3557,7 +3602,7 @@ "type": "tidelift" } ], - "time": "2025-08-10T06:51:50+00:00" + "time": "2026-01-24T09:22:56+00:00" }, { "name": "sebastian/complexity", @@ -4514,16 +4559,16 @@ }, { "name": "wp-phpunit/wp-phpunit", - "version": "6.9.0", + "version": "6.9.4", "source": { "type": "git", "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "448dc57a97c7225d2ac6271876682fca4c2ed340" + "reference": "15fd216bf6516670d8d07b938675925bfa5c15b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/448dc57a97c7225d2ac6271876682fca4c2ed340", - "reference": "448dc57a97c7225d2ac6271876682fca4c2ed340", + "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/15fd216bf6516670d8d07b938675925bfa5c15b0", + "reference": "15fd216bf6516670d8d07b938675925bfa5c15b0", "shasum": "" }, "type": "library", @@ -4558,7 +4603,7 @@ "issues": "https://github.com/wp-phpunit/issues", "source": "https://github.com/wp-phpunit/wp-phpunit" }, - "time": "2025-12-03T01:19:46+00:00" + "time": "2026-02-04T01:48:23+00:00" }, { "name": "yoast/phpunit-polyfills", @@ -4638,5 +4683,5 @@ "platform-overrides": { "php": "7.3.0" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/package.json b/package.json index 561528a9e..61116901f 100644 --- a/package.json +++ b/package.json @@ -2,16 +2,17 @@ "name": "gravity-pdf", "private": true, "dependencies": { + "@babel/runtime": "^7.26.10", + "core-js": "^3.23.4", "algoliasearch": "^4.13.1", "classnames": "^2.3.1", - "core-js": "^3.23.4", "lodash.debounce": "^4.0.8", "object-to-formdata": "^4.4.2", "prop-types": "^15.8.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-dropzone": "^14.2.2", - "react-instantsearch": "^7.0.0", + "react-instantsearch": "^7.29.0", "react-redux": "^8.0.2", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", @@ -20,12 +21,14 @@ "redux-watch": "^1.2.0", "reselect": "^4.1.6", "sprintf-js": "^1.1.2", - "superagent": "^9.0.0" + "superagent": "^10.3.0" }, "devDependencies": { "@babel/cli": "^7.18.6", "@babel/core": "^7.18.6", "@babel/eslint-parser": "^7.18.2", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/preset-env": "^7.18.6", "@babel/preset-react": "^7.18.6", "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", @@ -66,7 +69,11 @@ "url-loader": "^4.1.1", "webpack": "^5.73.0", "webpack-cli": "^5.1.0", - "webpack-merge": "^5.8.0" + "webpack-merge": "^5.8.0", + "zod": "^3.24.1", + "underscore": "^1.3.8", + "minimatch": "^5.1.8", + "path-to-regexp": "^1.9.0" }, "scripts": { "lint:js": "eslint \"src/assets/js/**/*.js\"", diff --git a/yarn.lock b/yarn.lock index 29dcb1e60..a3ff9f766 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1257,6 +1257,11 @@ dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.26.10": + version "7.29.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e" + integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g== + "@babel/template@^7.24.7", "@babel/template@^7.3.3", "@babel/template@^7.4.0": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" @@ -1736,6 +1741,11 @@ dependencies: eslint-scope "5.1.1" +"@noble/hashes@^1.1.5": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1757,6 +1767,13 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@paralleldrive/cuid2@^2.2.2": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz#3d62ea9e7be867d3fa94b9897fab5b0ae187d784" + integrity sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw== + dependencies: + "@noble/hashes" "^1.1.5" + "@redux-saga/core@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.3.0.tgz#2ce08b73d407fc6ea9e7f7d83d2e97d981a3a8b8" @@ -1824,6 +1841,13 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@swc/helpers@0.5.18": + version "0.5.18" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.18.tgz#feeeabea0d10106ee25aaf900165df911ab6d3b1" + integrity sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ== + dependencies: + tslib "^2.8.0" + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -1930,10 +1954,10 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/google.maps@^3.45.3": - version "3.55.9" - resolved "https://registry.yarnpkg.com/@types/google.maps/-/google.maps-3.55.9.tgz#3bbe1d044d9b999392a359fb37b0de2545ac53c4" - integrity sha512-phaOMtezbT3NaXPKiI3m0OosUS7Nly0auw3Be5s/CgMWLVoDAUP1Yb/Ld0TRoRp8ibrlT4VqM5kmzfvUA0UNLQ== +"@types/google.maps@^3.55.12": + version "3.58.1" + resolved "https://registry.yarnpkg.com/@types/google.maps/-/google.maps-3.58.1.tgz#71ce3dec44de1452f56641d2c87c7dd8ea964b4d" + integrity sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ== "@types/graceful-fs@^4.1.3": version "4.1.9" @@ -2412,10 +2436,10 @@ ajv@^8.0.0, ajv@^8.9.0: require-from-string "^2.0.2" uri-js "^4.4.1" -algoliasearch-helper@3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.21.0.tgz#d28fdb61199b5c229714788bfb812376b18aaf28" - integrity sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w== +algoliasearch-helper@3.28.1: + version "3.28.1" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.28.1.tgz#49813dca2166287d4444f95c697d51abddd2bd0a" + integrity sha512-6iXpbkkrAI5HFpCWXlNmIDSBuoN/U1XnEvb2yJAoWfqrZ+DrybI7MQ5P5mthFaprmocq+zbi6HxnR28xnZAYBw== dependencies: "@algolia/events" "^4.0.1" @@ -2953,9 +2977,9 @@ brace-expansion@^1.1.7: concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" + integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== dependencies: balanced-match "^1.0.0" @@ -3059,6 +3083,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -3070,6 +3102,14 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" @@ -3101,9 +3141,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001629: - version "1.0.30001632" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz#964207b7cba5851701afb4c8afaf1448db3884b6" - integrity sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg== + version "1.0.30001787" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz" + integrity sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg== capture-exit@^2.0.0: version "2.0.0" @@ -3420,7 +3460,7 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -component-emitter@^1.2.1, component-emitter@^1.3.0: +component-emitter@^1.2.1, component-emitter@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== @@ -3737,7 +3777,7 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== @@ -3765,6 +3805,13 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.7: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -4027,6 +4074,15 @@ dotenv@^16.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4234,6 +4290,11 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" @@ -4271,6 +4332,13 @@ es-object-atoms@^1.0.0: dependencies: es-errors "^1.3.0" +es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + es-set-tostringtag@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" @@ -4280,6 +4348,16 @@ es-set-tostringtag@^2.0.3: has-tostringtag "^1.0.2" hasown "^2.0.1" +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" @@ -5002,6 +5080,17 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -5011,13 +5100,13 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formidable@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.1.tgz#9360a23a656f261207868b1484624c4c8d06ee1a" - integrity sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og== +formidable@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.4.tgz#ac9a593b951e829b3298f21aa9a2243932f32ed9" + integrity sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug== dependencies: + "@paralleldrive/cuid2" "^2.2.2" dezalgo "^1.0.4" - hexoid "^1.0.0" once "^1.4.0" fragment-cache@^0.2.1: @@ -5105,6 +5194,22 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + get-os-info@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-os-info/-/get-os-info-1.0.2.tgz#5f65df82d3fa16192d2363fc621f050f8a570864" @@ -5120,6 +5225,14 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -5290,6 +5403,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^11.8.5: version "11.8.6" resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" @@ -5369,6 +5487,11 @@ has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" @@ -5419,11 +5542,6 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hexoid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== - highlight-es@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/highlight-es/-/highlight-es-1.0.3.tgz#12abc300a27e686f6f18010134e3a5c6d2fe6930" @@ -5689,30 +5807,37 @@ inquirer@^7.1.0: strip-ansi "^6.0.0" through "^2.3.6" -instantsearch-ui-components@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/instantsearch-ui-components/-/instantsearch-ui-components-0.6.0.tgz#8895cd16a23d61dea3c2d1f713391713b7ef066c" - integrity sha512-Jj3F9D46ef8VtzVZTgWsy79P25Q5nhI5XzK0NqfUVVI5yI3vA/3NkvKYtBHBlz50DDyBm6t9kIn/ZfpOwENm2A== +instantsearch-ui-components@0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/instantsearch-ui-components/-/instantsearch-ui-components-0.23.0.tgz#d631c500f42cc9d5c7e5fe23a09c04cd9e746fee" + integrity sha512-ILqp/RAm0mBrsFuGozTk09tPpQMiODtcLVHQRudXBC23YcaTpt9qTB30nWy5yHODb15dBH5DoUw7gqyUo/PPkw== dependencies: - "@babel/runtime" "^7.1.2" + "@swc/helpers" "0.5.18" + markdown-to-jsx "^7.7.15" + zod "^3.25.76 || ^4" + zod-to-json-schema "3.24.6" -instantsearch.js@4.71.1: - version "4.71.1" - resolved "https://registry.yarnpkg.com/instantsearch.js/-/instantsearch.js-4.71.1.tgz#367a10c2da2f423aaeef42d7e59845f2bfa9c367" - integrity sha512-4AvEPadnDBf0NsCCw+a1GjmMFEZ3zQzQhCe51cFPLYRXnRyKw5bLvRVaNQckiDG+vl7bPyJrWn5YAh5UhBwA+w== +instantsearch.js@4.93.0: + version "4.93.0" + resolved "https://registry.yarnpkg.com/instantsearch.js/-/instantsearch.js-4.93.0.tgz#432c9e6a624c7d52dfa44568011260cccce5ed88" + integrity sha512-pTJN2ZPpySSpnTxbPo0f/l7IDjgvC/IoxRXgnQV2TT423uGXviEkzQuU2KcdfG9kio6nqcgBU3kQTe07OoHzkw== dependencies: "@algolia/events" "^4.0.1" + "@swc/helpers" "0.5.18" "@types/dom-speech-recognition" "^0.0.1" - "@types/google.maps" "^3.45.3" + "@types/google.maps" "^3.55.12" "@types/hogan.js" "^3.0.0" "@types/qs" "^6.5.3" - algoliasearch-helper "3.21.0" + algoliasearch-helper "3.28.1" hogan.js "^3.0.2" htm "^3.0.0" - instantsearch-ui-components "0.6.0" + instantsearch-ui-components "0.23.0" preact "^10.10.0" - qs "^6.5.1 < 6.10" - search-insights "^2.13.0" + qs "^6.5.1" + react ">= 0.14.0" + search-insights "^2.17.2" + zod "^3.25.76 || ^4" + zod-to-json-schema "3.24.6" internal-slot@^1.0.7: version "1.0.7" @@ -7247,6 +7372,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-to-jsx@^7.7.15: + version "7.7.17" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.7.17.tgz#6e997d6aa4dbe2e69c423c65745541846777483c" + integrity sha512-7mG/1feQ0TX5I7YyMZVDgCC/y2I3CiEhIRQIhyov9nGBP5eoVrOXXHuL5ZP8GRfxVZKRiXWJgwXkb9It+nQZfQ== + match-url-wildcard@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/match-url-wildcard/-/match-url-wildcard-0.0.4.tgz#c8533da7ec0901eddf01fc0893effa68d4e727d6" @@ -7254,6 +7384,11 @@ match-url-wildcard@0.0.4: dependencies: escape-string-regexp "^1.0.5" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdn-data@2.0.28: version "2.0.28" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" @@ -7382,6 +7517,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^5.1.8: + version "5.1.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" + integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -7432,7 +7574,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -7593,6 +7735,11 @@ object-inspect@^1.13.1, object-inspect@^1.7.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + object-is@^1.0.2, object-is@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" @@ -7956,6 +8103,13 @@ path-to-regexp@^1.7.0: dependencies: isarray "0.0.1" +path-to-regexp@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.9.0.tgz#5dc0753acbf8521ca2e0f137b4578b917b10cf24" + integrity sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g== + dependencies: + isarray "0.0.1" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -8418,17 +8572,12 @@ qrcode-terminal@^0.10.0: resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.10.0.tgz#a76a48e2610a18f97fa3a2bd532b682acff86c53" integrity sha512-ZvWjbAj4MWAj6bnCc9CnculsXnJr7eoKsvH/8rVpZbqYxP2z05HNQa43ZVwe/dVRcFxgfFHE2CkUqn0sCyLfHw== -qs@^6.11.0: - version "6.12.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" - integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== +qs@^6.14.1, qs@^6.5.1: + version "6.15.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.1.tgz#bdb55aed06bfac257a90c44a446a73fba5575c8f" + integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== dependencies: - side-channel "^1.0.6" - -"qs@^6.5.1 < 6.10": - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== + side-channel "^1.1.0" qs@~6.5.2: version "6.5.3" @@ -8495,25 +8644,27 @@ react-dropzone@^14.2.2: file-selector "^0.6.0" prop-types "^15.8.1" -react-instantsearch-core@7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/react-instantsearch-core/-/react-instantsearch-core-7.11.1.tgz#a0c058365f6d956bf83622c7dab3852f4f9beda4" - integrity sha512-FsfEvefr3AZtsN4NYLxrqWFvzlrR73ejNX9f/1NBDERxaM+dZFKRfWpRXrA1QSwFeAppRmyC5+TMmga8OK8M0g== +react-instantsearch-core@7.29.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/react-instantsearch-core/-/react-instantsearch-core-7.29.0.tgz#96d4515e19bab04f49c949de0972f66de4b950f2" + integrity sha512-iE7mciz4bE1qHjWzSirPSxQMCnEuCxVL0KSZ63mlB0esDv1ALlY8B9zJMYVWny73RKCnWgi2HXcwandFWvJPRg== dependencies: - "@babel/runtime" "^7.1.2" - algoliasearch-helper "3.21.0" - instantsearch.js "4.71.1" + "@swc/helpers" "0.5.18" + algoliasearch-helper "3.28.1" + instantsearch.js "4.93.0" use-sync-external-store "^1.0.0" + zod "^3.25.76 || ^4" + zod-to-json-schema "3.24.6" -react-instantsearch@^7.0.0: - version "7.11.1" - resolved "https://registry.yarnpkg.com/react-instantsearch/-/react-instantsearch-7.11.1.tgz#b9d4ba85151e45ac2888681173607eff1adc4f60" - integrity sha512-XiCH2SfifJAk5kfdT1Mi3HxX3MzeJL72oF1kUltgmD7fqEi8HsK+vn2wGxAvSGhuLzltV2Lg3xIXd4OAocjeWA== +react-instantsearch@^7.29.0: + version "7.29.0" + resolved "https://registry.yarnpkg.com/react-instantsearch/-/react-instantsearch-7.29.0.tgz#274ab2745f087266379fe44adcb861c3d168dde6" + integrity sha512-+foJJVVsSLNY3K5rkB2dGEUoOyLMGTZsl9I8Zwwf/nZQqwoqH0QIvkenlJh7deyAq1/u19bq+H5EVX2d+EjRJQ== dependencies: - "@babel/runtime" "^7.1.2" - instantsearch-ui-components "0.6.0" - instantsearch.js "4.71.1" - react-instantsearch-core "7.11.1" + "@swc/helpers" "0.5.18" + instantsearch-ui-components "0.23.0" + instantsearch.js "4.93.0" + react-instantsearch-core "7.29.0" react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: version "16.13.1" @@ -8588,6 +8739,11 @@ react-test-renderer@^17.0.0: react-shallow-renderer "^16.13.1" scheduler "^0.20.2" +"react@>= 0.14.0": + version "19.2.5" + resolved "https://registry.yarnpkg.com/react/-/react-19.2.5.tgz#c888ab8b8ef33e2597fae8bdb2d77edbdb42858b" + integrity sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA== + react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -9121,10 +9277,10 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -search-insights@^2.13.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.14.0.tgz#212626f1c5ee8d8e232af1f35c9afaa760a56d24" - integrity sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw== +search-insights@^2.17.2: + version "2.17.3" + resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.17.3.tgz#8faea5d20507bf348caba0724e5386862847b661" + integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.2" @@ -9223,6 +9379,35 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel-list@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -9233,6 +9418,17 @@ side-channel@^1.0.4, side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -9571,20 +9767,20 @@ stylehacks@^6.1.1: browserslist "^4.23.0" postcss-selector-parser "^6.0.16" -superagent@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-9.0.2.tgz#a18799473fc57557289d6b63960610e358bdebc1" - integrity sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w== +superagent@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.3.0.tgz#ff1e39e7976b63f8084291d65f5bfbbbbd156989" + integrity sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ== dependencies: - component-emitter "^1.3.0" + component-emitter "^1.3.1" cookiejar "^2.1.4" - debug "^4.3.4" + debug "^4.3.7" fast-safe-stringify "^2.1.1" - form-data "^4.0.0" - formidable "^3.5.1" + form-data "^4.0.5" + formidable "^3.5.4" methods "^1.1.2" mime "2.6.0" - qs "^6.11.0" + qs "^6.14.1" supports-color@^5.3.0: version "5.5.0" @@ -10063,6 +10259,11 @@ tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tunnel-agent@0.6.0, tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -10192,6 +10393,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +underscore@^1.3.8: + version "1.13.8" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" + integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== + underscore@~1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" @@ -10746,3 +10952,18 @@ yocto-queue@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +zod-to-json-schema@3.24.6: + version "3.24.6" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d" + integrity sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg== + +zod@^3.24.1: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== + +"zod@^3.25.76 || ^4": + version "4.3.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-4.3.6.tgz#89c56e0aa7d2b05107d894412227087885ab112a" + integrity sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== From d7a15c730e1f04f5341f75b9617e7d03c42bbb4f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Mon, 23 Mar 2026 11:44:18 +1100 Subject: [PATCH 066/110] Tweak unit tests --- tests/phpunit/unit-tests/test-addon.php | 2 ++ tests/phpunit/unit-tests/test-pdf.php | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/unit-tests/test-addon.php b/tests/phpunit/unit-tests/test-addon.php index e48d40468..df2b243d7 100644 --- a/tests/phpunit/unit-tests/test-addon.php +++ b/tests/phpunit/unit-tests/test-addon.php @@ -83,6 +83,8 @@ public function set_up() { new Helper_Logger( 'my-custom-plugin2', 'My Custom Plugin2' ), new Helper_Notices() ); + + remove_all_actions( 'init' ); } /** diff --git a/tests/phpunit/unit-tests/test-pdf.php b/tests/phpunit/unit-tests/test-pdf.php index fe86eafd3..cb6bc4623 100644 --- a/tests/phpunit/unit-tests/test-pdf.php +++ b/tests/phpunit/unit-tests/test-pdf.php @@ -269,7 +269,9 @@ public function test_pdf_error() { 'pdf_error' ); - $method->setAccessible( true ); + if ( version_compare( PHP_VERSION, '8.1', '<' ) ) { + $method->setAccessible( true ); + } /* Ensure our public errors are shown */ From c06486f5e8c6119846c2706326e2e7d03c7bf2e6 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Wed, 27 Aug 2025 12:02:33 +1000 Subject: [PATCH 067/110] Fix syncing issue with Font selector --- package.json | 3 +- src/Helper/Helper_Data.php | 2 + .../dynamicTemplateFields/doMergetags.js | 4 +- .../components/FontManager/FontManager.js | 43 ++++++++- .../FontManager/FontManagerHeader.js | 2 +- .../js/react/components/Modal/CloseDialog.js | 38 +------- src/assets/js/react/sagas/fontManager.js | 14 +++ src/assets/js/react/sagas/index.js | 11 ++- .../associatedFontManagerSelectBox.js | 89 +++++++------------ .../FontManager/FontManager.test.js | 24 ++++- .../components/Modal/CloseDialog.test.js | 65 ++++++-------- .../associatedFontManagerSelectBox.test.js | 13 ++- tests/js-unit/setupTests.js | 7 +- yarn.lock | 5 ++ 14 files changed, 168 insertions(+), 152 deletions(-) diff --git a/package.json b/package.json index 61116901f..58aba478b 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,8 @@ "zod": "^3.24.1", "underscore": "^1.3.8", "minimatch": "^5.1.8", - "path-to-regexp": "^1.9.0" + "path-to-regexp": "^1.9.0", + "css.escape": "^1.5.1" }, "scripts": { "lint:js": "eslint \"src/assets/js/**/*.js\"", diff --git a/src/Helper/Helper_Data.php b/src/Helper/Helper_Data.php index 2950828db..1eb8b82f1 100644 --- a/src/Helper/Helper_Data.php +++ b/src/Helper/Helper_Data.php @@ -286,8 +286,10 @@ public function get_localised_script_data( Helper_Abstract_Options $options, Hel 'coreFontAriaLabel' => esc_html__( 'Core font installation', 'gravity-pdf' ), /* Font Manager */ + 'fontManagerTitle' => esc_html__( 'Font Manager', 'gravity-pdf' ), 'fontManagerSearchPlaceHolder' => esc_html__( 'Search installed fonts', 'gravity-pdf' ), 'fontListInstalledFonts' => esc_html__( 'Installed Fonts', 'gravity-pdf' ), + 'fontUserDefinedGroup' => esc_html__( 'User-Defined Fonts', 'gravity-pdf' ), 'fontListRegular' => esc_html__( 'Regular', 'gravity-pdf' ), 'fontListRegularRequired' => esc_html__( 'Regular %1$s(required)%2$s', 'gravity-pdf' ), 'fontListItalics' => esc_html__( 'Italics', 'gravity-pdf' ), diff --git a/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js b/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js index c47bc8f74..652a26746 100644 --- a/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js +++ b/src/assets/js/admin/settings/common/dynamicTemplateFields/doMergetags.js @@ -3,6 +3,6 @@ * * @since 4.0 */ -export function doMergetags() { - document.dispatchEvent( new Event( 'gform/merge_tag/initialize' ) ); +export function doMergetags () { + document.dispatchEvent(new Event('gform/merge_tag/initialize')) } diff --git a/src/assets/js/react/components/FontManager/FontManager.js b/src/assets/js/react/components/FontManager/FontManager.js index 6024d20e8..bb3c23788 100644 --- a/src/assets/js/react/components/FontManager/FontManager.js +++ b/src/assets/js/react/components/FontManager/FontManager.js @@ -4,6 +4,8 @@ import PropTypes from 'prop-types' /* Components */ import FontManagerHeader from './FontManagerHeader' import FontManagerBody from './FontManagerBody' +import { connect } from 'react-redux' +import { associatedFontManagerSelectBox } from '../../utilities/FontManager/associatedFontManagerSelectBox' /** * @package Gravity PDF @@ -25,7 +27,9 @@ export class FontManager extends Component { */ static propTypes = { id: PropTypes.string, - history: PropTypes.object.isRequired + history: PropTypes.object.isRequired, + fontList: PropTypes.arrayOf(PropTypes.object).isRequired, + selectedFont: PropTypes.string.isRequired } /** @@ -59,6 +63,19 @@ export class FontManager extends Component { */ componentWillUnmount () { document.removeEventListener('focus', this.handleFocus, true) + + const { + fontList, + selectedFont + } = this.props + const tabLocation = window.location.search.substring( + window.location.search.lastIndexOf('=') + 1 + ) + + /* When closed, ensure font select box has the latest custom font data */ + if (tabLocation !== 'tools') { + return associatedFontManagerSelectBox(fontList, selectedFont) + } } /** @@ -83,7 +100,10 @@ export class FontManager extends Component { * @since 6.0 */ render () { - const { id, history } = this.props + const { + id, + history + } = this.props return (
, + * selectedFont: string, + * }} mappedState + * + * @since 6.14.2 + */ +const mapStateToProps = (state) => ({ + fontList: state.fontManager.fontList, + selectedFont: state.fontManager.selectedFont +}) + +export default connect(mapStateToProps, {})(FontManager) diff --git a/src/assets/js/react/components/FontManager/FontManagerHeader.js b/src/assets/js/react/components/FontManager/FontManagerHeader.js index 7b758e350..d8fd9f35a 100644 --- a/src/assets/js/react/components/FontManager/FontManagerHeader.js +++ b/src/assets/js/react/components/FontManager/FontManagerHeader.js @@ -20,7 +20,7 @@ import CloseDialog from '../Modal/CloseDialog' */ const FontManagerHeader = ({ id }) => (
-

Font Manager

+

{GFPDF.fontManagerTitle}

diff --git a/src/assets/js/react/components/Modal/CloseDialog.js b/src/assets/js/react/components/Modal/CloseDialog.js index a719ca0ac..5c7b27395 100644 --- a/src/assets/js/react/components/Modal/CloseDialog.js +++ b/src/assets/js/react/components/Modal/CloseDialog.js @@ -4,9 +4,8 @@ import PropTypes from 'prop-types' import { connect } from 'react-redux' import { withRouter } from 'react-router-dom' /* Redux actions */ -import { getCustomFontList, clearAddFontMsg } from '../../actions/fontManager' +import { clearAddFontMsg } from '../../actions/fontManager' /* Utilities */ -import { associatedFontManagerSelectBox } from '../../utilities/FontManager/associatedFontManagerSelectBox' import { toggleUpdateFont } from '../../utilities/FontManager/toggleUpdateFont' /** @@ -30,11 +29,7 @@ export class CloseDialog extends Component { static propTypes = { id: PropTypes.string, closeRoute: PropTypes.string, - getCustomFontList: PropTypes.func.isRequired, clearAddFontMsg: PropTypes.func.isRequired, - templateList: PropTypes.arrayOf(PropTypes.object).isRequired, - fontList: PropTypes.arrayOf(PropTypes.object).isRequired, - selectedFont: PropTypes.string.isRequired, msg: PropTypes.object.isRequired, history: PropTypes.object.isRequired } @@ -48,22 +43,6 @@ export class CloseDialog extends Component { document.addEventListener('keydown', this.handleKeyPress, false) } - /** - * Check for new added template and fetch new fontList to trigger a request of - * updated font manager select box - * - * @param prevProps: object - * - * @since 6.0 - */ - componentDidUpdate (prevProps) { - const { templateList, getCustomFontList } = this.props - - if (prevProps.templateList !== templateList) { - getCustomFontList() - } - } - /** * Remove keydown listener to document on mount * @@ -71,14 +50,6 @@ export class CloseDialog extends Component { */ componentWillUnmount () { document.removeEventListener('keydown', this.handleKeyPress, false) - - const { fontList, selectedFont } = this.props - const tabLocation = window.location.search.substr(window.location.search.lastIndexOf('=') + 1) - - /* Ensure associated font manager select box has the latest data */ - if (tabLocation !== 'tools') { - return associatedFontManagerSelectBox(fontList, selectedFont) - } } /** @@ -144,18 +115,12 @@ export class CloseDialog extends Component { * @param state: object * * @returns {{ - * templateList: array of object, - * fontList: array of object, - * selectedFont: string, * msg: object * }} * * @since 6.0 */ const mapStateToProps = state => ({ - templateList: state.template.list, - fontList: state.fontManager.fontList, - selectedFont: state.fontManager.selectedFont, msg: state.fontManager.msg }) @@ -165,6 +130,5 @@ const mapStateToProps = state => ({ * @since 6.0 */ export default withRouter(connect(mapStateToProps, { - getCustomFontList, clearAddFontMsg })(CloseDialog)) diff --git a/src/assets/js/react/sagas/fontManager.js b/src/assets/js/react/sagas/fontManager.js index b6c488e01..f2e805a56 100644 --- a/src/assets/js/react/sagas/fontManager.js +++ b/src/assets/js/react/sagas/fontManager.js @@ -22,6 +22,7 @@ import { DELETE_FONT_SUCCESS, DELETE_FONT_ERROR } from '../actions/fontManager' +import { associatedFontManagerSelectBox } from '../utilities/FontManager/associatedFontManagerSelectBox' /** * @package Gravity PDF @@ -75,6 +76,19 @@ export function * watchAddFont () { yield takeLatest(ADD_FONT, addFont) } +/** + * A watcher that get triggered when custom font list is successfully requested + * + * @since 6.14.2 + */ +export function * watchGetCustomFontListSuccess () { + yield takeLatest(GET_CUSTOM_FONT_LIST_SUCCESS, function (response) { + const fontList = response.payload + + associatedFontManagerSelectBox(fontList) + }) +} + /** * Generate response for add font request * diff --git a/src/assets/js/react/sagas/index.js b/src/assets/js/react/sagas/index.js index 3f90a610e..c6a3cc0d6 100644 --- a/src/assets/js/react/sagas/index.js +++ b/src/assets/js/react/sagas/index.js @@ -3,7 +3,13 @@ import { all } from 'redux-saga/effects' /* Sagas */ import { watchUpdateSelectBox, watchTemplateProcessing, watchpostTemplateUploadProcessing } from './templates' import { watchGetFilesFromGitHub, watchDownloadFonts } from './coreFonts' -import { watchGetCustomFontList, watchAddFont, watchEditFont, watchDeleteFont } from './fontManager' +import { + watchGetCustomFontList, + watchAddFont, + watchEditFont, + watchDeleteFont, + watchGetCustomFontListSuccess +} from './fontManager' /** * @package Gravity PDF @@ -27,6 +33,7 @@ export default function * rootSaga () { watchGetCustomFontList(), watchAddFont(), watchEditFont(), - watchDeleteFont() + watchDeleteFont(), + watchGetCustomFontListSuccess() ]) } diff --git a/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js b/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js index 1908ae265..348e4c5ce 100644 --- a/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js +++ b/src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox.js @@ -13,77 +13,48 @@ * * @since 6.0 */ -export function associatedFontManagerSelectBox (fontList, id) { - const fontManagerSelectBox = document.querySelector('.gfpdf-font-manager select') - const definedFontsOptgroup = document.querySelector('optgroup[label="User-Defined Fonts"]') - const selectedValue = fontManagerSelectBox.options[fontManagerSelectBox.selectedIndex].value - const userDefinedFonts = [] - const optgroup = document.createElement('optgroup') - optgroup.setAttribute('label', 'User-Defined Fonts') - - /* Update User-Defined Fonts optgroup option list */ - fontList.map(font => { - const option = document.createElement('option') - option.text = font.font_name - option.value = font.id - - return optgroup.appendChild(option) - }) - - let updateSelectBoxValue +export function associatedFontManagerSelectBox (fontList, id = '') { + const fontManagerSelectBox = document.querySelector( + '.gfpdf-font-manager select' + ) - /* Set the default font value if no selected font is selected under 'User-Defined Fonts' list */ - if (!id) { - if (definedFontsOptgroup !== null) { - definedFontsOptgroup.remove() - fontManagerSelectBox.insertBefore(optgroup, fontManagerSelectBox.childNodes[0]) - updateSelectBoxValue = fontManagerSelectBox.selectedIndex = '0' - } + if (!fontManagerSelectBox) { + return } - /* Get current 'User-Defined Fonts' items */ - Array.from(document.querySelectorAll('optgroup[label="User-Defined Fonts"] > option')).map(item => userDefinedFonts.push(item.value)) + const selectedValue = fontManagerSelectBox.value + const definedFontsOptgroup = document.querySelector( + // eslint-disable-next-line no-undef + 'optgroup[label="' + CSS.escape(GFPDF.fontUserDefinedGroup) + '"]' + ) - if (definedFontsOptgroup !== null) { - /* Remove optgroup */ + // Remove the entire User-Defined Font group if it exists + if (definedFontsOptgroup) { definedFontsOptgroup.remove() } - const list = [] - - if (fontList.length > 0) { - fontList.map(font => list.push(font.id)) + // Do nothing if no custom fonts + if (fontList.length === 0) { + return } - /* Set current selected font value */ - if (list.length > 0 && list.includes(id)) { - fontManagerSelectBox.insertBefore(optgroup, fontManagerSelectBox.childNodes[0]) - updateSelectBoxValue = fontManagerSelectBox.value = id - - return updateSelectBoxValue - } - - /* Assign default value if selected item is deleted */ - if (list.length > 0 && !list.includes(id)) { - fontManagerSelectBox.insertBefore(optgroup, fontManagerSelectBox.childNodes[0]) - updateSelectBoxValue = fontManagerSelectBox.selectedIndex = '0' + // Build our new custom font group + const optgroup = document.createElement('optgroup') + optgroup.setAttribute('label', GFPDF.fontUserDefinedGroup) - return updateSelectBoxValue - } + /* Build User-Defined Fonts optgroup list */ + fontList.map((font) => { + const option = document.createElement('option') + option.text = font.font_name + option.value = font.id - /* Perform deletion for the very last item left */ - if (list.length === 0 && userDefinedFonts.length > 0) { - updateSelectBoxValue = fontManagerSelectBox.selectedIndex = '0' + return optgroup.appendChild(option) + }) - return updateSelectBoxValue - } + fontManagerSelectBox.insertBefore( + optgroup, + fontManagerSelectBox.childNodes[0] + ) - fontManagerSelectBox.insertBefore(optgroup, fontManagerSelectBox.childNodes[0]) fontManagerSelectBox.value = !id ? selectedValue : id - - /* Remove 'User-Defined Fonts' field if empty and select default value */ - if (userDefinedFonts.length === 0 && list.length === 0) { - fontManagerSelectBox.querySelector('optgroup[label="User-Defined Fonts"]').remove() - fontManagerSelectBox.selectedIndex = '0' - } } diff --git a/tests/js-unit/react/components/FontManager/FontManager.test.js b/tests/js-unit/react/components/FontManager/FontManager.test.js index 245d91a35..7e865fc1a 100644 --- a/tests/js-unit/react/components/FontManager/FontManager.test.js +++ b/tests/js-unit/react/components/FontManager/FontManager.test.js @@ -1,13 +1,23 @@ import React from 'react' import { shallow } from 'enzyme' import { findByTestAttr } from '../../testUtils' -import FontManager from '../../../../../src/assets/js/react/components/FontManager/FontManager' +import { FontManager } from '../../../../../src/assets/js/react/components/FontManager/FontManager' describe('FontManager - FontManager.js', () => { - const props = { history: {} } + const props = { + history: {}, + fontList: [], + selectedFont: '', + } const wrapper = shallow() + beforeEach(() => { + // Mock font select DOM + document.body.innerHTML = + '
' + }) + describe('RUN LIFECYCLE METHODS', () => { test('componentDidMount() - Add focus event to document option on mount', () => { FontManager.prototype.container = { focus: jest.fn() } @@ -25,7 +35,10 @@ describe('FontManager - FontManager.js', () => { // Call componentDidMount() wrapper.instance().componentDidMount() // Simulate 'tab' keyboard press - map.focus({ keyCode: 9, stopPropagation: jest.fn() }) + map.focus({ + keyCode: 9, + stopPropagation: jest.fn() + }) expect(focus).toHaveBeenCalledTimes(1) expect(handleFocus).toHaveBeenCalledTimes(1) @@ -47,7 +60,10 @@ describe('FontManager - FontManager.js', () => { // Call componentDidMount() wrapper.instance().componentWillUnmount() // Simulate 'tab' keyboard press - map.focus({ keyCode: 9, stopPropagation: jest.fn() }) + map.focus({ + keyCode: 9, + stopPropagation: jest.fn() + }) expect(focus).toHaveBeenCalledTimes(0) expect(handleFocus).toHaveBeenCalledTimes(1) diff --git a/tests/js-unit/react/components/Modal/CloseDialog.test.js b/tests/js-unit/react/components/Modal/CloseDialog.test.js index d3d21a4a9..afee37363 100644 --- a/tests/js-unit/react/components/Modal/CloseDialog.test.js +++ b/tests/js-unit/react/components/Modal/CloseDialog.test.js @@ -2,7 +2,6 @@ import React from 'react' import { shallow } from 'enzyme' import { findByTestAttr } from '../../testUtils' import { CloseDialog } from '../../../../../src/assets/js/react/components/Modal/CloseDialog' -import * as utilitiesA from '../../../../../src/assets/js/react/utilities/FontManager/associatedFontManagerSelectBox' import * as utilitiesB from '../../../../../src/assets/js/react/utilities/FontManager/toggleUpdateFont' describe('CloseDialog - CloseDialog.js', () => { @@ -12,9 +11,10 @@ describe('CloseDialog - CloseDialog.js', () => { getCustomFontList: jest.fn(), clearAddFontMsg: jest.fn(), templateList: [{}], - fontList: [{}], - selectedFont: '', - msg: { success: {}, error: {} }, + msg: { + success: {}, + error: {} + }, history: { push: jest.fn() } } const wrapper = shallow() @@ -32,7 +32,13 @@ describe('CloseDialog - CloseDialog.js', () => { instance.componentDidMount() // simulate event - map.keydown({ keyCode: 27, target: { className: '', value: '' } }) + map.keydown({ + keyCode: 27, + target: { + className: '', + value: '' + } + }) expect(handleKeyPress).toHaveBeenCalledTimes(1) }) @@ -44,35 +50,6 @@ describe('CloseDialog - CloseDialog.js', () => { expect(props.getCustomFontList).toHaveBeenCalledTimes(1) }) - - test('componentWillUnmount() - Remove keydown listener to document on mount', () => { - // Mock font manager select box DOM - document.body.innerHTML = - '
' + - ' ' + - '
' - - const map = {} - - document.removeEventListener = jest.fn((event, cb) => { - map[event] = cb - }) - - const handleKeyPress = jest.spyOn(wrapper.instance(), 'handleKeyPress') - const associatedFontManagerSelectBox = jest.spyOn(utilitiesA, 'associatedFontManagerSelectBox') - - instance.componentWillUnmount() - // simulate event - map.keydown({ keyCode: 27, target: { className: '', value: '' } }) - - expect(handleKeyPress).toHaveBeenCalledTimes(1) - expect(associatedFontManagerSelectBox).toHaveBeenCalledTimes(1) - }) }) describe('RUN COMPONENT METHODS', () => { @@ -82,9 +59,15 @@ describe('CloseDialog - CloseDialog.js', () => { '
' + '
' - const msg = { success: { addFont: {} }, error: {} } - const history = { push: jest.fn(), location: { pathname: '\'/fontmanager/' } } - const wrapper = shallow() + const msg = { + success: { addFont: {} }, + error: {} + } + const history = { + push: jest.fn(), + location: { pathname: '\'/fontmanager/' } + } + const wrapper = shallow() const instance = wrapper.instance() const toggleUpdateFont = jest.spyOn(utilitiesB, 'toggleUpdateFont') const e = { keyCode: 27 } @@ -97,7 +80,13 @@ describe('CloseDialog - CloseDialog.js', () => { test('handleKeyPress() - Close modal', () => { const handleCloseDialog = jest.spyOn(wrapper.instance(), 'handleCloseDialog') - const e = { keyCode: 27, target: { className: '', value: '' } } + const e = { + keyCode: 27, + target: { + className: '', + value: '' + } + } instance.handleKeyPress(e) expect(handleCloseDialog).toHaveBeenCalledTimes(1) diff --git a/tests/js-unit/react/utilities/FontManager/associatedFontManagerSelectBox.test.js b/tests/js-unit/react/utilities/FontManager/associatedFontManagerSelectBox.test.js index 46d302e23..55b5600dd 100644 --- a/tests/js-unit/react/utilities/FontManager/associatedFontManagerSelectBox.test.js +++ b/tests/js-unit/react/utilities/FontManager/associatedFontManagerSelectBox.test.js @@ -35,10 +35,17 @@ describe('Utilities/FontManager - associatedFontManagerSelectBox.js', () => { }) test('associatedFontManagerSelectBox() - Set current selected font value', () => { - expect(associatedFontManagerSelectBox(fontList, 'gugi')).toBe('gugi') + associatedFontManagerSelectBox(fontList, 'gugi') + + expect(document.querySelector('.gfpdf-font-manager select').value).toBe( + 'gugi' + ) }) - test('associatedFontManagerSelectBox() - Assign default value if selected item is deleted', () => { - expect(associatedFontManagerSelectBox(fontList, 'arial')).toBe('0') + test('associatedFontManagerSelectBox() - Set empty value if selected item is deleted', () => { + associatedFontManagerSelectBox(fontList, 'arial') + expect(document.querySelector('.gfpdf-font-manager select').value).toBe( + '' + ) }) }) diff --git a/tests/js-unit/setupTests.js b/tests/js-unit/setupTests.js index 439d734c0..9384ed0aa 100644 --- a/tests/js-unit/setupTests.js +++ b/tests/js-unit/setupTests.js @@ -1,5 +1,6 @@ import Enzyme from 'enzyme' import Adapter from '@wojtekmaj/enzyme-adapter-react-17' +import CSS from 'css.escape' // eslint-disable-line Enzyme.configure({ adapter: new Adapter(), @@ -33,7 +34,9 @@ window.GFPDF = { addUpdateFontSuccess: 'Your font has been saved.', addFatalError: 'A problem occurred. Reload the page and try again.', fontFileInvalid: 'Font file(s) are malformed and cannot be used with Gravity PDF', - manage: 'Advanced' + manage: 'Advanced', + fontManagerTitle: 'Font Manager', + fontUserDefinedGroup: 'User-Defined Fonts', } -window.gfpdf_migration_multisite_ids = [] \ No newline at end of file +window.gfpdf_migration_multisite_ids = [] diff --git a/yarn.lock b/yarn.lock index a3ff9f766..206319fc1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3635,6 +3635,11 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" From 848449c835483e93ce83a16cea7406f83a469a0f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 11:52:46 +1000 Subject: [PATCH 068/110] Improve Template List Management - Only cache the list during the current request - Remove a flysystem call for the core templates - Log errors when a template directory cannot be read - Move script localization from registration to enqueue --- src/Controller/Controller_Templates.php | 3 +- src/Helper/Helper_Templates.php | 60 ++++++++++++++----- src/bootstrap.php | 12 ++-- .../unit-tests/test-helper-templates.php | 20 ++++--- 4 files changed, 65 insertions(+), 30 deletions(-) diff --git a/src/Controller/Controller_Templates.php b/src/Controller/Controller_Templates.php index 24534cbf0..c66ab7187 100644 --- a/src/Controller/Controller_Templates.php +++ b/src/Controller/Controller_Templates.php @@ -5,6 +5,7 @@ use GFPDF\Helper\Helper_Abstract_Controller; use GFPDF\Helper\Helper_Abstract_Model; use GFPDF\Helper\Helper_Interface_Actions; +use GFPDF\Model\Model_Templates; /** * @package Gravity PDF @@ -30,7 +31,7 @@ class Controller_Templates extends Helper_Abstract_Controller implements Helper_ * * Setup our class by injecting all our dependencies * - * @param Helper_Abstract_Model $model + * @param Model_Templates $model * * @since 4.1 */ diff --git a/src/Helper/Helper_Templates.php b/src/Helper/Helper_Templates.php index 322c2196a..7d270eef1 100644 --- a/src/Helper/Helper_Templates.php +++ b/src/Helper/Helper_Templates.php @@ -110,15 +110,11 @@ public function get_template_url() { * @since 4.1 */ public function get_all_templates() { - $options = GPDFAPI::get_options_class(); - $debug = $options->get_option( 'debug_mode', 'No' ); - $cache_name = $this->data->template_transient_cache . '-template-list'; - - if ( $debug === 'No' ) { - $cache = get_transient( $cache_name ); - if ( is_array( $cache ) && ! empty( $cache ) ) { - return $cache; - } + $cache_name = $this->data->template_transient_cache . '-template-list'; + $found = false; + $template_list = \GFCache::get( $cache_name, $found, false ); + if ( ! empty( $template_list ) ) { + return $template_list; } $template_list = []; @@ -142,7 +138,7 @@ function ( $file ) { ); } - set_transient( $cache_name, $template_list, 604800 ); + \GFCache::set( $cache_name, $template_list ); return $template_list; } @@ -159,11 +155,11 @@ public function get_unfiltered_template_list() { /* Get current multisite templates, if any */ if ( is_multisite() ) { - $raw_templates[] = glob( $this->data->multisite_template_location . '*.php', GLOB_NOSORT ); + $raw_templates[] = $this->get_all_templates_in_folder( $this->data->multisite_template_location ); } /* Get the current user-templates and the core templates */ - $raw_templates[] = glob( $this->data->template_location . '*.php', GLOB_NOSORT ); + $raw_templates[] = $this->get_all_templates_in_folder( $this->data->template_location ); $raw_templates[] = $this->get_core_pdf_templates(); return apply_filters( 'gfpdf_unfiltered_template_list', $raw_templates ); @@ -470,16 +466,48 @@ public function get_template_header_details() { } /** - * Returns an array of the current PDF templates shipped with Gravity PDF + * Returns an array of the PDF templates shipped with Gravity PDF * * @return array * * @since 4.1 + * + * @internal This is hardcoded to reduce a filesystem lookup */ public function get_core_pdf_templates() { - $templates = glob( PDF_PLUGIN_DIR . 'src/templates/*.php' ); + return [ + PDF_PLUGIN_DIR . 'src/templates/zadani.php', + PDF_PLUGIN_DIR . 'src/templates/rubix.php', + PDF_PLUGIN_DIR . 'src/templates/focus-gravity.php', + PDF_PLUGIN_DIR . 'src/templates/blank-slate.php', + ]; + } - return ( is_array( $templates ) ) ? $templates : []; + /** + * @param string $folder + * + * @return array + */ + public function get_all_templates_in_folder( $folder ) { + try { + $dir = new \FilesystemIterator( $folder ); + $files = new \CallbackFilterIterator( + $dir, + function ( $current ) { + return ! $current->isDir() && $current->getExtension() === 'php'; + } + ); + + $templates = []; + foreach ( $files as $file ) { + $templates[] = $file->getPathname(); + } + + return $templates; + } catch ( \Exception $e ) { + $this->log->error( $e->getMessage() ); + return []; + } } /** @@ -506,7 +534,7 @@ public function get_config_path_by_id( $template_id, $include_core = true ) { } if ( $include_core ) { - array_push( $config_paths, PDF_PLUGIN_DIR . 'src/templates/config/' ); + $config_paths[] = PDF_PLUGIN_DIR . 'src/templates/config/'; } $config_paths = apply_filters( 'gfpdf_template_config_paths', $config_paths ); diff --git a/src/bootstrap.php b/src/bootstrap.php index 85c5d3d2d..037153f78 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -404,12 +404,6 @@ private function register_scripts() { wp_register_script( 'gfpdf_js_entrypoint', PDF_PLUGIN_URL . 'dist/assets/js/app.bundle.min.js', [ 'jquery' ], $version, true ); wp_register_script( 'gfpdf_js_entries', PDF_PLUGIN_URL . 'dist/assets/js/gfpdf-entries.min.js', [ 'jquery' ], $version, true ); - - /* Localise admin script */ - $data = $this->data->get_localised_script_data( $this->options, $this->gform ); - - wp_localize_script( 'gfpdf_js_entrypoint', 'GFPDF', $data ); - wp_localize_script( 'gfpdf_js_settings', 'GFPDF', $data ); } /** @@ -440,6 +434,12 @@ public function load_admin_assets() { /* Load TinyMCE styles */ add_filter( 'tiny_mce_before_init', [ $this, 'tinymce_styles' ] ); + + /* Localise admin script */ + $data = $this->data->get_localised_script_data( $this->options, $this->gform ); + + wp_localize_script( 'gfpdf_js_entrypoint', 'GFPDF', $data ); + wp_localize_script( 'gfpdf_js_settings', 'GFPDF', $data ); } if ( rgget( 'page' ) === 'gf_entries' ) { diff --git a/tests/phpunit/unit-tests/test-helper-templates.php b/tests/phpunit/unit-tests/test-helper-templates.php index f4e1077f5..8655a905f 100644 --- a/tests/phpunit/unit-tests/test-helper-templates.php +++ b/tests/phpunit/unit-tests/test-helper-templates.php @@ -53,6 +53,12 @@ public function set_up() { $installer->create_folder_structures(); } + public function tear_down() { + parent::tear_down(); + + \GFCache::flush(); + } + /** * Create our testing data * @@ -102,6 +108,7 @@ public function test_get_template_url() { public function test_get_all_templates() { global $gfpdf; + $cache_name = $gfpdf->data->template_transient_cache . '-template-list'; $templates = $this->templates->get_all_templates(); /* Test the standard templates */ @@ -111,7 +118,7 @@ public function test_get_all_templates() { touch( $gfpdf->data->template_location . 'test.php' ); touch( $gfpdf->data->template_location . 'test2.php' ); - delete_transient( $gfpdf->data->template_transient_cache . '-template-list' ); + \GFCache::delete( $cache_name ); $templates = $this->templates->get_all_templates(); $this->assertCount( 6, $templates ); @@ -119,7 +126,7 @@ public function test_get_all_templates() { /* Test for override */ touch( $gfpdf->data->template_location . 'zadani.php' ); - delete_transient( $gfpdf->data->template_transient_cache . '-template-list' ); + \GFCache::delete( $cache_name ); $templates = $this->templates->get_all_templates(); @@ -129,7 +136,7 @@ public function test_get_all_templates() { touch( $gfpdf->data->template_location . 'configuration.php' ); touch( $gfpdf->data->template_location . 'configuration.archive.php' ); - delete_transient( $gfpdf->data->template_transient_cache . '-template-list' ); + \GFCache::delete( $cache_name ); $templates = $this->templates->get_all_templates(); $this->assertCount( 6, $templates ); @@ -138,7 +145,7 @@ public function test_get_all_templates() { if ( is_multisite() ) { touch( $gfpdf->data->multisite_template_location . 'test3.php' ); - delete_transient( $gfpdf->data->template_transient_cache . '-template-list' ); + \GFCache::delete( $cache_name ); $templates = $this->templates->get_all_templates(); $this->assertCount( 7, $templates ); @@ -146,7 +153,7 @@ public function test_get_all_templates() { /* Check for override */ touch( $gfpdf->data->multisite_template_location . 'zadani.php' ); - delete_transient( $gfpdf->data->template_transient_cache . '-template-list' ); + \GFCache::delete( $cache_name ); $templates = $this->templates->get_all_templates(); $this->assertCount( 7, $templates ); @@ -397,8 +404,7 @@ public function test_get_template_headers() { */ public function test_get_plugin_pdf_templates() { $core_templates = $this->templates->get_core_pdf_templates(); - $this->assertNotSame( 0, count( $core_templates ) ); - $this->assertNotSame( false, strpos( $core_templates[0], 'blank-slate.php' ) ); + $this->assertNotCount( 0, $core_templates ); } /** From 890c053abe17e27dad45957a603155415d3b1fec Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 15:26:44 +1000 Subject: [PATCH 069/110] Replace superagent with native fetch API --- .browserslistrc | 1 + package.json | 15 ++- src/Helper/Helper_Templates.php | 1 - src/assets/js/react/api/api.js | 34 +++++- src/assets/js/react/api/coreFonts.js | 57 +++++++--- src/assets/js/react/api/fontManager.js | 72 +++++++++--- src/assets/js/react/api/help.js | 22 ---- src/assets/js/react/api/templates.js | 86 ++++++++++---- src/assets/js/react/sagas/fontManager.js | 10 +- .../components/Modal/CloseDialog.test.js | 8 -- tests/js-unit/react/sagas/fontManager.test.js | 97 ++++++---------- yarn.lock | 105 +----------------- 12 files changed, 242 insertions(+), 266 deletions(-) create mode 100644 .browserslistrc delete mode 100644 src/assets/js/react/api/help.js diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 000000000..ed4da7e41 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1 @@ +defaults and fully supports es6-module diff --git a/package.json b/package.json index 58aba478b..74de0fcf6 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,9 @@ "private": true, "dependencies": { "@babel/runtime": "^7.26.10", - "core-js": "^3.23.4", "algoliasearch": "^4.13.1", "classnames": "^2.3.1", + "core-js": "^3.23.4", "lodash.debounce": "^4.0.8", "object-to-formdata": "^4.4.2", "prop-types": "^15.8.1", @@ -20,8 +20,7 @@ "redux-saga": "^1.1.3", "redux-watch": "^1.2.0", "reselect": "^4.1.6", - "sprintf-js": "^1.1.2", - "superagent": "^10.3.0" + "sprintf-js": "^1.1.2" }, "devDependencies": { "@babel/cli": "^7.18.6", @@ -40,6 +39,7 @@ "cross-env": "^7.0.3", "css-loader": "^6.7.1", "css-minimizer-webpack-plugin": "^5.0.1", + "css.escape": "^1.5.1", "dotenv": "^16.0.1", "enzyme": "^3.11.0", "eslint": "^8.52.0", @@ -59,6 +59,8 @@ "jquery": "^3.6.0", "json-loader": "^0.5.7", "mini-css-extract-plugin": "^2.6.1", + "minimatch": "^5.1.8", + "path-to-regexp": "^1.9.0", "redux-devtools-extension": "^2.13.9", "redux-mock-store": "^1.5.4", "sass": "^1.53.0", @@ -66,15 +68,12 @@ "standard": "^17.0.0", "terser-webpack-plugin": "^5.3.3", "testcafe": "^3.0", + "underscore": "^1.3.8", "url-loader": "^4.1.1", "webpack": "^5.73.0", "webpack-cli": "^5.1.0", "webpack-merge": "^5.8.0", - "zod": "^3.24.1", - "underscore": "^1.3.8", - "minimatch": "^5.1.8", - "path-to-regexp": "^1.9.0", - "css.escape": "^1.5.1" + "zod": "^3.24.1" }, "scripts": { "lint:js": "eslint \"src/assets/js/**/*.js\"", diff --git a/src/Helper/Helper_Templates.php b/src/Helper/Helper_Templates.php index 7d270eef1..9cd6df188 100644 --- a/src/Helper/Helper_Templates.php +++ b/src/Helper/Helper_Templates.php @@ -434,7 +434,6 @@ public function get_template_info_by_path( $template_path, $cache_name = '', $ca */ public function flush_template_transient_cache() { delete_transient( $this->data->template_transient_cache ); - delete_transient( $this->data->template_transient_cache . '-template-list' ); } /** diff --git a/src/assets/js/react/api/api.js b/src/assets/js/react/api/api.js index d87293268..96972e40d 100644 --- a/src/assets/js/react/api/api.js +++ b/src/assets/js/react/api/api.js @@ -8,15 +8,39 @@ /** * Wrapper for the fetch() API which return a promise response * - * @param url: string - * @param init: object + * @param {string} url + * @param {object} init * - * @returns Promise response + * @returns {Promise} response * * @since 6.0 */ export const api = async (url, init) => { - const response = await window.fetch(url, init) + return await window.fetch(url, init) +} + +/** + * Try parse the API response as JSON, accounting for a PHP error output before the payload + * + * @param {string} str + * @returns {object} + */ +export const getJsonString = (str) => { + for (const character of ['{', '[']) { + let testStr = str + const index = testStr.indexOf(character) + if (index > 0) { + testStr = testStr.slice(index) + } + + try { + return JSON.parse(testStr) + } catch (e) {} + } + + console.error('Invalid API response', str) - return response + return { + error: GFPDF.addFatalError + } } diff --git a/src/assets/js/react/api/coreFonts.js b/src/assets/js/react/api/coreFonts.js index 53e00f260..de5bd8136 100644 --- a/src/assets/js/react/api/coreFonts.js +++ b/src/assets/js/react/api/coreFonts.js @@ -1,5 +1,5 @@ /* Dependencies */ -import request from 'superagent/dist/superagent.min' +import { api, getJsonString } from './api' /** * @package Gravity PDF @@ -11,30 +11,55 @@ import request from 'superagent/dist/superagent.min' /** * Do AJAX call * - * @returns {{method.get}} + * @returns {Object} * * @since 5.2 */ -export function apiGetFilesFromGitHub () { - return request - .get(GFPDF.pluginUrl + 'dist/payload/core-fonts.json') - .accept('application/json') - .type('json') - .parse(response => JSON.parse(response.text)) +export async function apiGetFilesFromGitHub () { + const response = await api(GFPDF.pluginUrl + 'dist/payload/core-fonts.json', { + method: 'GET', + headers: { + Accept: 'application/json' + } + }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } /** * Do AJAX call * - * @param file - * @returns {{method.post}} + * @param {string} file + * @returns {Object} * * @since 5.2 */ -export function apiPostDownloadFonts (file) { - return request - .post(GFPDF.ajaxUrl) - .field('action', 'gfpdf_save_core_font') - .field('nonce', GFPDF.ajaxNonce) - .field('font_name', file) +export async function apiPostDownloadFonts (file) { + const formData = new window.FormData() + formData.append('action', 'gfpdf_save_core_font') + formData.append('nonce', GFPDF.ajaxNonce) + formData.append('font_name', file) + + const response = await api(GFPDF.ajaxUrl, { + method: 'POST', + body: formData + }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } diff --git a/src/assets/js/react/api/fontManager.js b/src/assets/js/react/api/fontManager.js index e8a8bb266..f36dfd217 100644 --- a/src/assets/js/react/api/fontManager.js +++ b/src/assets/js/react/api/fontManager.js @@ -1,7 +1,7 @@ /* Dependencies */ import { serialize } from 'object-to-formdata' /* APIs */ -import { api } from './api' +import { api, getJsonString } from './api' /** * @package Gravity PDF @@ -13,73 +13,109 @@ import { api } from './api' /** * Fetch API request to obtain custom font list (GET) * - * @returns Promise response + * @returns {Object} * * @since 6.0 */ -export const apiGetCustomFontList = () => { +export const apiGetCustomFontList = async () => { const url = GFPDF.restUrl + 'fonts/' - return api(url, { + const response = await api(url, { method: 'GET', headers: { - 'X-WP-Nonce': GFPDF.restNonce + 'X-WP-Nonce': GFPDF.restNonce, + Accept: 'application/json' } }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } /** * Fetch API request to add new font (POST) * - * @param font: object + * @param {object} font * - * @returns Promise response + * @returns {Object} * * @since 6.0 */ -export const apiAddFont = font => { +export const apiAddFont = async font => { const url = GFPDF.restUrl + 'fonts/' const formData = serialize(font) - return api(url, { + const response = await api(url, { method: 'POST', headers: { - 'X-WP-Nonce': GFPDF.restNonce + 'X-WP-Nonce': GFPDF.restNonce, + Accept: 'application/json' }, body: formData }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } /** * Fetch API request to edit font details (POST) * - * @param id: string - * @param font: object + * @param {string} id + * @param {object} font * - * @returns Promise response + * @returns {Object} * * @since 6.0 */ -export const apiEditFont = ({ id, font }) => { +export const apiEditFont = async ({ + id, + font +}) => { const url = GFPDF.restUrl + 'fonts/' + id const data = { ...font } const formData = serialize(data) - return api(url, { + const response = await api(url, { method: 'POST', headers: { - 'X-WP-Nonce': GFPDF.restNonce + 'X-WP-Nonce': GFPDF.restNonce, + Accept: 'application/json' }, body: formData }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } /** * Fetch API request to delete existing font (DELETE) * - * @param id: string + * @param {string} id * - * @returns Promise response + * @returns {Promise} * * @since 6.0 */ diff --git a/src/assets/js/react/api/help.js b/src/assets/js/react/api/help.js deleted file mode 100644 index 5377b9679..000000000 --- a/src/assets/js/react/api/help.js +++ /dev/null @@ -1,22 +0,0 @@ -/* Dependencies */ -import request from 'superagent/dist/superagent.min' - -/** - * @package Gravity PDF - * @copyright Copyright (c) 2025, Blue Liquid Designs - * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License - * @since 5.2 - */ - -/** - * Do AJAX call - * - * @param searchQuery - * - * @returns {{method.get}} - * - * @since 5.2 - */ -export const apiGetSearchResult = searchQuery => { - return request.get(`https://gravitypdf.com/wp-json/wp/v2/v6_docs/?search=${searchQuery}`) -} diff --git a/src/assets/js/react/api/templates.js b/src/assets/js/react/api/templates.js index 8660833cc..1a050f3d0 100644 --- a/src/assets/js/react/api/templates.js +++ b/src/assets/js/react/api/templates.js @@ -1,5 +1,5 @@ /* Dependencies */ -import request from 'superagent/dist/superagent.min' +import { api, getJsonString } from './api' /** * @package Gravity PDF @@ -11,15 +11,28 @@ import request from 'superagent/dist/superagent.min' /** * Do AJAX call * - * @returns {{method.post}} + * @returns {Promise} * * @since 5.2 */ -export function apiPostUpdateSelectBox () { - return request - .post(GFPDF.ajaxUrl) - .field('action', 'gfpdf_get_template_options') - .field('nonce', GFPDF.ajaxNonce) +export async function apiPostUpdateSelectBox () { + const formData = new window.FormData() + formData.append('action', 'gfpdf_get_template_options') + formData.append('nonce', GFPDF.ajaxNonce) + + const response = await api(GFPDF.ajaxUrl, { + method: 'POST', + body: formData + }) + + const text = await response.text() + + return { + body: text, + text, + status: response.status, + ok: response.ok + } } /** @@ -27,31 +40,60 @@ export function apiPostUpdateSelectBox () { * * @param {String} templateId * - * @returns {{method.post}} + * @returns {Promise} * * @since 5.2 */ -export function apiPostTemplateProcessing (templateId) { - return request - .post(GFPDF.ajaxUrl) - .field('action', 'gfpdf_delete_template') - .field('nonce', GFPDF.ajaxNonce) - .field('id', templateId) +export async function apiPostTemplateProcessing (templateId) { + const formData = new window.FormData() + formData.append('action', 'gfpdf_delete_template') + formData.append('nonce', GFPDF.ajaxNonce) + formData.append('id', templateId) + + const response = await api(GFPDF.ajaxUrl, { + method: 'POST', + body: formData + }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } /** * Do AJAX call * - * @param {{file: Object, filename: String}} + * @param {Object} file + * @param {String} filename * - * @returns {{method.post}} + * @returns {Promise} * * @since 5.2 */ -export function apiPostTemplateUploadProcessing (file, filename) { - return request - .post(GFPDF.ajaxUrl) - .field('action', 'gfpdf_upload_template') - .field('nonce', GFPDF.ajaxNonce) - .attach('template', file, filename) +export async function apiPostTemplateUploadProcessing (file, filename) { + const formData = new window.FormData() + formData.append('action', 'gfpdf_upload_template') + formData.append('nonce', GFPDF.ajaxNonce) + formData.append('template', file, filename) + + const response = await api(GFPDF.ajaxUrl, { + method: 'POST', + body: formData + }) + + const text = await response.text() + const body = getJsonString(text) + + return { + body, + text, + status: response.status, + ok: response.ok + } } diff --git a/src/assets/js/react/sagas/fontManager.js b/src/assets/js/react/sagas/fontManager.js index f2e805a56..54da3190a 100644 --- a/src/assets/js/react/sagas/fontManager.js +++ b/src/assets/js/react/sagas/fontManager.js @@ -53,7 +53,7 @@ export function * getCustomFontList () { throw response } - const responseBody = yield response.json() + const responseBody = response.body yield put({ type: GET_CUSTOM_FONT_LIST_SUCCESS, @@ -104,7 +104,7 @@ export function * addFont ({ payload }) { throw response } - const responseBody = yield response.json() + const responseBody = response.body const data = { font: responseBody, @@ -123,7 +123,7 @@ export function * addFont ({ payload }) { }) } - const response = yield error.json() + const response = error.body if (error.status === 400 && response.code === 'font_validation_error') { return yield put({ @@ -163,7 +163,7 @@ export function * editFont ({ payload }) { throw response } - const responseBody = yield response.json() + const responseBody = response.body const data = { font: responseBody, @@ -175,7 +175,7 @@ export function * editFont ({ payload }) { payload: data }) } catch (error) { - const response = yield error.json() + const response = error.body if (error.status === 500 && response.code !== 'font_file_gone_missing') { return yield put({ diff --git a/tests/js-unit/react/components/Modal/CloseDialog.test.js b/tests/js-unit/react/components/Modal/CloseDialog.test.js index afee37363..a142e54e9 100644 --- a/tests/js-unit/react/components/Modal/CloseDialog.test.js +++ b/tests/js-unit/react/components/Modal/CloseDialog.test.js @@ -42,14 +42,6 @@ describe('CloseDialog - CloseDialog.js', () => { expect(handleKeyPress).toHaveBeenCalledTimes(1) }) - - test('componentDidUpdate() - Trigger a request of updated font manager select box', () => { - const prevProps = { templateList: [{}, {}] } - - instance.componentDidUpdate(prevProps) - - expect(props.getCustomFontList).toHaveBeenCalledTimes(1) - }) }) describe('RUN COMPONENT METHODS', () => { diff --git a/tests/js-unit/react/sagas/fontManager.test.js b/tests/js-unit/react/sagas/fontManager.test.js index 952d48d45..940c53f64 100644 --- a/tests/js-unit/react/sagas/fontManager.test.js +++ b/tests/js-unit/react/sagas/fontManager.test.js @@ -38,17 +38,15 @@ describe('Sagas - fontManager.js', () => { describe('Worker saga - getCustomFontList()', () => { const response = { ok: true, - json: jest.fn() + body: [] } - const responseBody = [] + const responseBody = response.body const gen = getCustomFontList() test('should check that saga call the API apiGetCustomFontList', () => { expect(gen.next().value).toEqual(call(api.apiGetCustomFontList)) - gen.next(response) - - expect(gen.next(responseBody).value).toEqual(put({ + expect(gen.next(response).value).toEqual(put({ type: GET_CUSTOM_FONT_LIST_SUCCESS, payload: responseBody })) @@ -73,18 +71,16 @@ describe('Sagas - fontManager.js', () => { describe('Worker saga - addFont()', () => { const response = { ok: true, - json: jest.fn() + body: {} } - const responseBody = {} + const responseBody = response.body const data = { payload: {} } const gen = addFont(data) test('should check that saga call the API apiAddFont', () => { expect(gen.next().value).toEqual(call(api.apiAddFont, {})) - gen.next(response) - - expect(gen.next(responseBody).value).toEqual(put({ + expect(gen.next(response).value).toEqual(put({ type: ADD_FONT_SUCCESS, payload: { font: responseBody, @@ -104,16 +100,13 @@ describe('Sagas - fontManager.js', () => { const gen = addFont(data) gen.next() - gen.next(response) - gen.next(responseBody) - gen.throw({ - status: 400, - json: jest.fn() - }) - expect(gen.next({ - code: 'font_validation_error', - message: 'text' + expect(gen.throw({ + status: 400, + body: { + code: 'font_validation_error', + message: 'text' + } }).value).toEqual(put({ type: ADD_FONT_ERROR, payload: { @@ -127,14 +120,11 @@ describe('Sagas - fontManager.js', () => { const gen = addFont(data) gen.next() - gen.next(response) - gen.next(responseBody) - gen.throw({ - status: 400, - json: jest.fn() - }) - expect(gen.next({ message: 'text' }).value).toEqual(put({ + expect(gen.throw({ + status: 400, + body: { message: 'text' } + }).value).toEqual(put({ type: ADD_FONT_ERROR, payload: 'text' })) @@ -152,18 +142,16 @@ describe('Sagas - fontManager.js', () => { describe('Worker saga - editFont()', () => { const response = { ok: true, - json: jest.fn() + body: {} } - const responseBody = {} + const responseBody = response.body const data = { payload: {} } const gen = editFont(data) test('should check that saga call the API apiEditFont', () => { expect(gen.next().value).toEqual(call(api.apiEditFont, {})) - gen.next(response) - - expect(gen.next(responseBody).value).toEqual(put({ + expect(gen.next(response).value).toEqual(put({ type: EDIT_FONT_SUCCESS, payload: { font: responseBody, @@ -173,12 +161,10 @@ describe('Sagas - fontManager.js', () => { }) test('should check that saga handles correctly the failure of apiEditFont API call (500 error and response.code not equal to \'font_file_gone_missing\')', () => { - gen.throw({ + expect(gen.throw({ status: 500, - json: jest.fn() - }) - - expect(gen.next({ code: '' }).value).toEqual(put({ + body: { code: '' } + }).value).toEqual(put({ type: EDIT_FONT_ERROR, payload: 'A problem occurred. Reload the page and try again.' })) @@ -188,16 +174,13 @@ describe('Sagas - fontManager.js', () => { const gen = editFont(data) gen.next() - gen.next(response) - gen.next(responseBody) - gen.throw({ + + expect(gen.throw({ status: 400, - json: jest.fn() - }) - - expect(gen.next({ - code: 'font_validation_error', - message: 'text' + body: { + code: 'font_validation_error', + message: 'text' + } }).value).toEqual(put({ type: EDIT_FONT_ERROR, payload: { @@ -211,14 +194,11 @@ describe('Sagas - fontManager.js', () => { const gen = editFont(data) gen.next() - gen.next(response) - gen.next(responseBody) - gen.throw({ + + expect(gen.throw({ status: 400, - json: jest.fn() - }) - - expect(gen.next({ message: '' }).value).toEqual(put({ + body: { message: '' } + }).value).toEqual(put({ type: EDIT_FONT_ERROR, payload: 'A problem occurred. Reload the page and try again.' })) @@ -228,14 +208,11 @@ describe('Sagas - fontManager.js', () => { const gen = editFont(data) gen.next() - gen.next(response) - gen.next(responseBody) - gen.throw({ + + expect(gen.throw({ status: 400, - json: jest.fn() - }) - - expect(gen.next({ message: 'text' }).value).toEqual(put({ + body: { message: 'text' } + }).value).toEqual(put({ type: EDIT_FONT_ERROR, payload: 'text' })) @@ -253,7 +230,7 @@ describe('Sagas - fontManager.js', () => { describe('Worker saga - deleteFont()', () => { const response = { ok: true, - json: jest.fn() + body: {} } const data = { payload: {} } const gen = deleteFont(data) diff --git a/yarn.lock b/yarn.lock index 206319fc1..09e32608b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1741,11 +1741,6 @@ dependencies: eslint-scope "5.1.1" -"@noble/hashes@^1.1.5": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1767,13 +1762,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@paralleldrive/cuid2@^2.2.2": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz#3d62ea9e7be867d3fa94b9897fab5b0ae187d784" - integrity sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw== - dependencies: - "@noble/hashes" "^1.1.5" - "@redux-saga/core@^1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.3.0.tgz#2ce08b73d407fc6ea9e7f7d83d2e97d981a3a8b8" @@ -2694,11 +2682,6 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - asn1@~0.2.3: version "0.2.6" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" @@ -3460,7 +3443,7 @@ common-path-prefix@^3.0.0: resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -component-emitter@^1.2.1, component-emitter@^1.3.1: +component-emitter@^1.2.1: version "1.3.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== @@ -3490,11 +3473,6 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookiejar@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" - integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -3810,13 +3788,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.7: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -3979,14 +3950,6 @@ device-specs@^1.0.0: resolved "https://registry.yarnpkg.com/device-specs/-/device-specs-1.0.1.tgz#b1a26c717a5339815238abf07f427e0b340d35ac" integrity sha512-rxns/NDZfbdYumnn801z9uo8kWIz3Eld7Bk/F0V9zw4sZemSoD93+gxHEonLdxYulkws4iCMt7ZP8zuM8EzUSg== -dezalgo@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" - integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== - dependencies: - asap "^2.0.0" - wrappy "1" - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -4353,16 +4316,6 @@ es-set-tostringtag@^2.0.3: has-tostringtag "^1.0.2" hasown "^2.0.1" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" @@ -4911,11 +4864,6 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -5085,17 +5033,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -form-data@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" - integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - hasown "^2.0.2" - mime-types "^2.1.12" - form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -5105,15 +5042,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -formidable@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.4.tgz#ac9a593b951e829b3298f21aa9a2243932f32ed9" - integrity sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug== - dependencies: - "@paralleldrive/cuid2" "^2.2.2" - dezalgo "^1.0.4" - once "^1.4.0" - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -5199,7 +5127,7 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -7421,11 +7349,6 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -methods@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7465,11 +7388,6 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: dependencies: mime-db "1.52.0" -mime@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== - mime@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -7579,7 +7497,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1, ms@^2.1.3: +ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -8577,7 +8495,7 @@ qrcode-terminal@^0.10.0: resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.10.0.tgz#a76a48e2610a18f97fa3a2bd532b682acff86c53" integrity sha512-ZvWjbAj4MWAj6bnCc9CnculsXnJr7eoKsvH/8rVpZbqYxP2z05HNQa43ZVwe/dVRcFxgfFHE2CkUqn0sCyLfHw== -qs@^6.14.1, qs@^6.5.1: +qs@^6.5.1: version "6.15.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.1.tgz#bdb55aed06bfac257a90c44a446a73fba5575c8f" integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== @@ -9772,21 +9690,6 @@ stylehacks@^6.1.1: browserslist "^4.23.0" postcss-selector-parser "^6.0.16" -superagent@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.3.0.tgz#ff1e39e7976b63f8084291d65f5bfbbbbd156989" - integrity sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ== - dependencies: - component-emitter "^1.3.1" - cookiejar "^2.1.4" - debug "^4.3.7" - fast-safe-stringify "^2.1.1" - form-data "^4.0.5" - formidable "^3.5.4" - methods "^1.1.2" - mime "2.6.0" - qs "^6.14.1" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" From d8f13926c829e0e2339e86697765b2a7189a702f Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 20 Mar 2025 15:35:59 +1100 Subject: [PATCH 070/110] Add check for GFCache in Template manager --- src/Helper/Helper_Templates.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Helper/Helper_Templates.php b/src/Helper/Helper_Templates.php index 9cd6df188..05bbebc07 100644 --- a/src/Helper/Helper_Templates.php +++ b/src/Helper/Helper_Templates.php @@ -110,11 +110,13 @@ public function get_template_url() { * @since 4.1 */ public function get_all_templates() { - $cache_name = $this->data->template_transient_cache . '-template-list'; - $found = false; - $template_list = \GFCache::get( $cache_name, $found, false ); - if ( ! empty( $template_list ) ) { - return $template_list; + if ( class_exists( 'GFCache' ) ) { + $cache_name = $this->data->template_transient_cache . '-template-list'; + $found = false; + $template_list = \GFCache::get( $cache_name, $found, false ); + if ( ! empty( $template_list ) ) { + return $template_list; + } } $template_list = []; @@ -138,7 +140,9 @@ function ( $file ) { ); } - \GFCache::set( $cache_name, $template_list ); + if ( class_exists( 'GFCache' ) ) { + \GFCache::set( $cache_name, $template_list ); + } return $template_list; } From f656635643a4f5a47b7524ec213d010f6abae896 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 15:45:45 +1000 Subject: [PATCH 071/110] Disable asset version if SCRIPT_DEBUG enabled --- src/bootstrap.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bootstrap.php b/src/bootstrap.php index 037153f78..4be2978b2 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -376,7 +376,7 @@ public function register_assets() { * */ private function register_styles() { - $version = PDF_EXTENDED_VERSION; + $version = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? time() : PDF_EXTENDED_VERSION; wp_register_style( 'gfpdf_css_styles', PDF_PLUGIN_URL . 'dist/assets/css/gfpdf-styles.min.css', [ 'wp-color-picker', 'wp-jquery-ui-dialog' ], $version ); } @@ -389,7 +389,7 @@ private function register_styles() { * */ private function register_scripts() { - $version = PDF_EXTENDED_VERSION; + $version = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? time() : PDF_EXTENDED_VERSION; $pdf_settings_dependencies = [ 'jquery-ui-tooltip', From 0eaf656ea412bfda509bf7da0c760fd82d652ca1 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 15:46:00 +1000 Subject: [PATCH 072/110] Disable GF Dom Parser in PHPUnit tests --- tests/phpunit/bootstrap.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php index e7a58ce02..03a23145f 100644 --- a/tests/phpunit/bootstrap.php +++ b/tests/phpunit/bootstrap.php @@ -116,6 +116,7 @@ public function load() { update_option( 'gf_db_version', GFForms::$version ); GFFormsModel::drop_tables(); gf_upgrade()->maybe_upgrade(); + add_filter( 'gform_disable_dom_parser', '__return_true' ); // Enabling GF Rest API v2. global $gf_webapi; From 489ffb6d987663d2215d59d1ce22a3ac76ff8e34 Mon Sep 17 00:00:00 2001 From: Jake Jackson Date: Thu, 9 Apr 2026 15:46:23 +1000 Subject: [PATCH 073/110] Improve settings markup --- src/Helper/Helper_Abstract_Options.php | 50 ++++++------------- src/View/html/GravityForms/settings_field.php | 4 +- .../admin/settings/pdf/setupRequiredFields.js | 4 +- .../Component/_gf-settings-containers.scss | 21 ++++---- 4 files changed, 31 insertions(+), 48 deletions(-) diff --git a/src/Helper/Helper_Abstract_Options.php b/src/Helper/Helper_Abstract_Options.php index 2e6981f3e..d40bf3cde 100644 --- a/src/Helper/Helper_Abstract_Options.php +++ b/src/Helper/Helper_Abstract_Options.php @@ -1527,9 +1527,7 @@ public function checkbox_callback( $args ) { ?>
-
- +
- +
- +
- +
- +