From 73365aeea440342e2a2ced82de733017aec4488a Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 2 Oct 2024 13:47:42 +0300 Subject: [PATCH 01/10] * maybe fix for init download routing; --- includes/class-init.php | 3 ++- includes/core/class-files.php | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/class-init.php b/includes/class-init.php index 81b19416..471886dc 100644 --- a/includes/class-init.php +++ b/includes/class-init.php @@ -550,6 +550,7 @@ if ( ! class_exists( 'UM' ) ) { $this->user(); $this->profile(); $this->builtin(); + $this->files(); $this->form()->hooks(); $this->permalinks(); $this->cron(); @@ -1273,7 +1274,7 @@ if ( ! class_exists( 'UM' ) ) { * * @return um\core\Files */ - function files() { + public function files() { if ( empty( $this->classes['files'] ) ) { $this->classes['files'] = new um\core\Files(); } diff --git a/includes/core/class-files.php b/includes/core/class-files.php index 53cfdc57..200849e5 100644 --- a/includes/core/class-files.php +++ b/includes/core/class-files.php @@ -80,7 +80,6 @@ if ( ! class_exists( 'um\core\Files' ) ) { ); } - /** * File download link generate * From f79f2a7d2babbf0d99fc9c16b6df4028a056a71f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Wed, 2 Oct 2024 14:22:38 +0300 Subject: [PATCH 02/10] * updated version; --- .wordpress-org/blueprints/blueprint.json | 2 +- README.md | 2 +- readme.txt | 8 +++++++- ultimate-member.php | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.wordpress-org/blueprints/blueprint.json b/.wordpress-org/blueprints/blueprint.json index ef1c589b..828f7a16 100644 --- a/.wordpress-org/blueprints/blueprint.json +++ b/.wordpress-org/blueprints/blueprint.json @@ -15,7 +15,7 @@ "step": "installPlugin", "pluginZipFile": { "resource": "url", - "url": "https:\/\/downloads.wordpress.org\/plugin\/ultimate-member.2.8.6.zip" + "url": "https:\/\/downloads.wordpress.org\/plugin\/ultimate-member.2.8.8.zip" }, "options": { "activate": true diff --git a/README.md b/README.md index 0f703e18..645138d2 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ GNU Version 2 or Any Later Version ### IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSION 2.6.7 PATCHES SECURITY PRIVILEGE ESCALATION VULNERABILITY. PLEASE SEE [THIS ARTICLE](https://docs.ultimatemember.com/article/1866-security-incident-update-and-recommended-actions) FOR MORE INFORMATION -[Official Release Version: 2.8.7](https://github.com/ultimatemember/ultimatemember/releases/tag/2.8.7). +[Official Release Version: 2.8.8](https://github.com/ultimatemember/ultimatemember/releases/tag/2.8.8). ## Changelog diff --git a/readme.txt b/readme.txt index 45824423..520a3694 100644 --- a/readme.txt +++ b/readme.txt @@ -6,7 +6,7 @@ Tags: community, member, membership, user-profile, user-registration Requires PHP: 5.6 Requires at least: 5.5 Tested up to: 6.6 -Stable tag: 2.8.7 +Stable tag: 2.8.8 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.txt @@ -166,6 +166,12 @@ No specific extensions are needed. But we highly recommended keep active these P IMPORTANT: PLEASE UPDATE THE PLUGIN TO AT LEAST VERSION 2.6.7 IMMEDIATELY. VERSION 2.6.7 PATCHES SECURITY PRIVILEGE ESCALATION VULNERABILITY. PLEASE SEE [THIS ARTICLE](https://docs.ultimatemember.com/article/1866-security-incident-update-and-recommended-actions) FOR MORE INFORMATION += 2.8.8 2024-10-03 = + +**Bugfixes** + +* Fixed: Download routing initialization + = 2.8.7 2024-10-01 = **Enhancements** diff --git a/ultimate-member.php b/ultimate-member.php index c24ef586..13ad4d03 100644 --- a/ultimate-member.php +++ b/ultimate-member.php @@ -3,7 +3,7 @@ * Plugin Name: Ultimate Member * Plugin URI: http://ultimatemember.com/ * Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress - * Version: 2.8.7 + * Version: 2.8.8 * Author: Ultimate Member * Author URI: http://ultimatemember.com/ * Text Domain: ultimate-member From a69435f15adf77164ab19fb809b1b5c6d0bca3f1 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 3 Oct 2024 11:56:36 +0300 Subject: [PATCH 03/10] - fix min-height and height of html textarea --- assets/js/um-profile.js | 13 +++++++++++++ includes/core/um-filters-fields.php | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/assets/js/um-profile.js b/assets/js/um-profile.js index f3232353..f145bd8d 100644 --- a/assets/js/um-profile.js +++ b/assets/js/um-profile.js @@ -139,4 +139,17 @@ jQuery(document).ready(function() { jQuery( '.um-profile-nav a' ).on( 'touchend', function(e) { jQuery( e.currentTarget).trigger( "click" ); }); + + let textarea_iframe = jQuery('iframe.um-textarea-html-value, .mce-edit-area iframe'); + textarea_iframe.each(function() { + jQuery(this).onload = function() { + resizeIframe(iframe); + }; + }); }); + +function resizeIframe(obj, height) { + let dataHeight = obj.getAttribute('data-height'); + obj.style.minHeight = obj.contentWindow.document.documentElement.scrollHeight + 'px'; + obj.style.height = dataHeight + 'px'; +} diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 6d5d2bc9..582016e8 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -259,8 +259,10 @@ function um_profile_field_filter_hook__textarea( $value, $data ) { if ( ! $value ) { return ''; } + if ( ! empty( $data['html'] ) ) { - return ''; + $height = isset( $data['height'] ) && absint( $data['height'] ) > 0 ? absint( $data['height'] ) : ''; + return ''; } $description_key = UM()->profile()->get_show_bio_key( UM()->fields()->global_args ); From 19b7ef92b210557ab5403507fd0aac295f3a8f42 Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 3 Oct 2024 12:23:11 +0300 Subject: [PATCH 04/10] - fix attrs in tags for html textarea --- includes/core/um-filters-fields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 582016e8..481b12b8 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -262,7 +262,7 @@ function um_profile_field_filter_hook__textarea( $value, $data ) { if ( ! empty( $data['html'] ) ) { $height = isset( $data['height'] ) && absint( $data['height'] ) > 0 ? absint( $data['height'] ) : ''; - return ''; + return ''; } $description_key = UM()->profile()->get_show_bio_key( UM()->fields()->global_args ); From ae1af55fde388c00699fd7ad7ab361a8f5ded6fe Mon Sep 17 00:00:00 2001 From: ashubawork Date: Thu, 3 Oct 2024 12:24:55 +0300 Subject: [PATCH 05/10] - remove wrong code --- assets/js/um-profile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/um-profile.js b/assets/js/um-profile.js index f145bd8d..3b78d19d 100644 --- a/assets/js/um-profile.js +++ b/assets/js/um-profile.js @@ -140,7 +140,7 @@ jQuery(document).ready(function() { jQuery( e.currentTarget).trigger( "click" ); }); - let textarea_iframe = jQuery('iframe.um-textarea-html-value, .mce-edit-area iframe'); + let textarea_iframe = jQuery('iframe.um-textarea-html-value'); textarea_iframe.each(function() { jQuery(this).onload = function() { resizeIframe(iframe); From b4a221837e08a184d916af012af15eca4804319c Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 3 Oct 2024 13:04:20 +0300 Subject: [PATCH 06/10] * fixed first install scripts; --- includes/common/class-cpt.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/includes/common/class-cpt.php b/includes/common/class-cpt.php index f5751226..022fee00 100644 --- a/includes/common/class-cpt.php +++ b/includes/common/class-cpt.php @@ -159,7 +159,16 @@ if ( ! class_exists( 'um\common\CPT' ) ) { $mode = 'members'; if ( 'um_form' === $post->post_type ) { $meta_value_mode = get_post_meta( $post_id, '_um_mode', true ); - $mode = ! empty( $meta_value_mode ) ? $meta_value_mode : sanitize_key( $_POST['form']['_um_mode'] ); // phpcs:ignore WordPress.Security.NonceVerification -- already verified here + if ( ! empty( $meta_value_mode ) ) { + $mode = $meta_value_mode; + } elseif ( ! empty( $_POST['form']['_um_mode'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification -- already verified here + $mode = sanitize_key( $_POST['form']['_um_mode'] ); // phpcs:ignore WordPress.Security.NonceVerification -- already verified here + } + } + + // $mode can be empty on the first installation + if ( empty( $mode ) ) { + return; } // Set current published form or member directory as predefined in the case when old default doesn't exist or hasn't a `publish` status. From 90413c32e56376da21005bdb16e7e235d889d82a Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 3 Oct 2024 14:38:51 +0300 Subject: [PATCH 07/10] * reviewed and fixed iframe height when HTML formatted textarea is used; --- assets/js/common-frontend.js | 12 ++++++++++++ assets/js/common-frontend.min.js | 2 +- assets/js/um-profile.js | 11 +++-------- assets/js/um-profile.min.js | 2 +- includes/core/class-fields.php | 2 +- includes/core/um-filters-fields.php | 3 +-- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/assets/js/common-frontend.js b/assets/js/common-frontend.js index fef49375..4a989853 100644 --- a/assets/js/common-frontend.js +++ b/assets/js/common-frontend.js @@ -96,6 +96,18 @@ UM.frontend = { UM.frontend.cropper.obj = null; // flush our own object } } + }, + iframe: { + resize: function(obj) { + let newHeight; + // 150 is default height of the iframe in web-browser + if ( obj.contentWindow.document.documentElement.scrollHeight > 150 && obj.contentWindow.document.documentElement.scrollHeight > obj.contentWindow.document.documentElement.offsetHeight ) { + newHeight = obj.contentWindow.document.documentElement.scrollHeight; + } else { + newHeight = obj.contentWindow.document.documentElement.offsetHeight; + } + obj.style.height = newHeight + 'px'; + } } } diff --git a/assets/js/common-frontend.min.js b/assets/js/common-frontend.min.js index aae402d3..bb253c84 100644 --- a/assets/js/common-frontend.min.js +++ b/assets/js/common-frontend.min.js @@ -1 +1 @@ -"object"!=typeof window.UM&&(window.UM={}),"object"!=typeof UM.frontend&&(UM.frontend={}),UM.frontend={cropper:{obj:null,init:function(){var o=jQuery(".um-modal .um-single-image-preview img").first();if(o.length&&""!==o.attr("src")){UM.frontend.cropper.obj&&UM.frontend.cropper.destroy();var t=jQuery(".um-modal .um-single-image-preview"),r=o.parent().data("crop"),n=o.parent().data("min_width"),i=o.parent().data("min_height"),a=o.parent().data("ratio"),d=jQuery(".um-modal").find("#um_upload_single").data("ratio"),d=(d&&(a=d.split(":")[0]),jQuery(window).height()-(jQuery(".um-modal-footer a").height()+20)-50-jQuery(".um-modal-header:visible").height());o.css({height:"auto"}),t.css({height:"auto"}),jQuery(window).height()<=400?(t.css({height:d+"px","max-height":d+"px"}),o.css({height:"auto"})):(o.css({height:"auto","max-height":d+"px"}),t.css({height:o.height(),"max-height":d+"px"}));let e;"square"===r?e={minWidth:n,minHeight:i,dragCrop:!1,aspectRatio:1,zoomable:!1,rotatable:!1,dashed:!1}:"cover"===r?(0e.contentWindow.document.documentElement.offsetHeight?e.contentWindow.document.documentElement.scrollHeight:e.contentWindow.document.documentElement.offsetHeight,e.style.height=o+"px"}}},wp.hooks.addAction("um_remove_modal","um_common_frontend",function(){UM.frontend.cropper.destroy()}),wp.hooks.addAction("um_after_removing_preview","um_common_frontend",function(){UM.frontend.cropper.destroy()}),wp.hooks.addAction("um_window_resize","um_common_frontend",function(){UM.frontend.cropper.destroy()}); \ No newline at end of file diff --git a/assets/js/um-profile.js b/assets/js/um-profile.js index 3b78d19d..38ab46d4 100644 --- a/assets/js/um-profile.js +++ b/assets/js/um-profile.js @@ -142,14 +142,9 @@ jQuery(document).ready(function() { let textarea_iframe = jQuery('iframe.um-textarea-html-value'); textarea_iframe.each(function() { - jQuery(this).onload = function() { - resizeIframe(iframe); + let obj = jQuery(this); + obj.onload = function() { + UM.frontend.iframe.resize(obj[0]); }; }); }); - -function resizeIframe(obj, height) { - let dataHeight = obj.getAttribute('data-height'); - obj.style.minHeight = obj.contentWindow.document.documentElement.scrollHeight + 'px'; - obj.style.height = dataHeight + 'px'; -} diff --git a/assets/js/um-profile.min.js b/assets/js/um-profile.min.js index c2e401fc..dcb528d6 100644 --- a/assets/js/um-profile.min.js +++ b/assets/js/um-profile.min.js @@ -1 +1 @@ -jQuery(document).ready(function(){jQuery(".um-profile.um-viewing .um-profile-body .um-row").each(function(){var e=jQuery(this);0==e.find(".um-field").length&&(e.prev(".um-row-heading").remove(),e.remove())}),jQuery(".um-profile.um-viewing .um-profile-body").length&&0==jQuery(".um-profile.um-viewing .um-profile-body").find(".um-field").length&&(jQuery(".um-profile.um-viewing .um-profile-body").find(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document.body).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um.um-profile.um-editing").find("form").trigger("submit"),!1}),jQuery(document.body).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document.body).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){e.preventDefault()}),jQuery(document.body).on("click",".um-photo-modal",function(e){e.preventDefault();e=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,e),!1}),jQuery(document.body).on("click",".um-reset-profile-photo",function(e){return jQuery(".um-profile-photo-img img").attr("src",jQuery(this).attr("data-default_src")),user_id=jQuery(this).attr("data-user_id"),metakey="profile_photo",UM.dropdown.hideAll(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce}}),jQuery(this).parents("li").hide(),!1}),jQuery(document.body).on("click",".um-reset-cover-photo",function(e){var t=jQuery(this);return jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),um_responsive(),user_id=jQuery(this).attr("data-user_id"),metakey="cover_photo",jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_cover_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce},success:function(e){t.hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")})}); \ No newline at end of file +jQuery(document).ready(function(){jQuery(".um-profile.um-viewing .um-profile-body .um-row").each(function(){var e=jQuery(this);0==e.find(".um-field").length&&(e.prev(".um-row-heading").remove(),e.remove())}),jQuery(".um-profile.um-viewing .um-profile-body").length&&0==jQuery(".um-profile.um-viewing .um-profile-body").find(".um-field").length&&(jQuery(".um-profile.um-viewing .um-profile-body").find(".um-row-heading,.um-row").remove(),jQuery(".um-profile-note").show()),jQuery(document.body).on("click",".um-profile-save",function(e){return e.preventDefault(),jQuery(this).parents(".um.um-profile.um-editing").find("form").trigger("submit"),!1}),jQuery(document.body).on("click",".um-profile-edit-a",function(e){jQuery(this).addClass("active")}),jQuery(document.body).on("click",".um-cover a.um-cover-add, .um-photo a",function(e){e.preventDefault()}),jQuery(document.body).on("click",".um-photo-modal",function(e){e.preventDefault();e=jQuery(this).attr("data-src");return um_new_modal("um_view_photo","fit",!0,e),!1}),jQuery(document.body).on("click",".um-reset-profile-photo",function(e){return jQuery(".um-profile-photo-img img").attr("src",jQuery(this).attr("data-default_src")),user_id=jQuery(this).attr("data-user_id"),metakey="profile_photo",UM.dropdown.hideAll(),jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_profile_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce}}),jQuery(this).parents("li").hide(),!1}),jQuery(document.body).on("click",".um-reset-cover-photo",function(e){var t=jQuery(this);return jQuery(".um-cover-overlay").hide(),jQuery(".um-cover-e").html(''),um_responsive(),user_id=jQuery(this).attr("data-user_id"),metakey="cover_photo",jQuery.ajax({url:wp.ajax.settings.url,type:"post",data:{action:"um_delete_cover_photo",metakey:metakey,user_id:user_id,nonce:um_scripts.nonce},success:function(e){t.hide()}}),UM.dropdown.hideAll(),!1}),jQuery(document.body).on("change keyup","#um-meta-bio",function(){if(void 0!==jQuery(this).val()){var t=jQuery(this).data("character-limit"),r=jQuery(this).data("html");let e=t-jQuery(this).val().length;e=(e=1===parseInt(r)?t-jQuery(this).val().replace(/(<([^>]+)>)/gi,"").length:e)<0?0:e,jQuery("span.um-meta-bio-character span.um-bio-limit").text(e);r=e<5?"red":"";jQuery("span.um-meta-bio-character").css("color",r)}}),jQuery("#um-meta-bio").trigger("change"),jQuery(".um-profile form").each(function(){let t=jQuery(this).data("description_key");jQuery(this).find('textarea[name="'+t+'"]').length&&jQuery(document.body).on("change input",'textarea[name="'+t+'"]',function(e){jQuery(this).parents("form").find('textarea[name="'+t+'"]').each(function(){jQuery(this).val(e.currentTarget.value),jQuery("#um-meta-bio")[0]!==e.currentTarget&&jQuery("#um-meta-bio")[0]===jQuery(this)[0]&&jQuery(this).trigger("change")})})}),jQuery(".um-profile-edit a.um_delete-item").on("click",function(e){if(e.preventDefault(),!confirm(wp.i18n.__("Are you sure that you want to delete this user?","ultimate-member")))return!1}),jQuery(".um-profile-nav a").on("touchend",function(e){jQuery(e.currentTarget).trigger("click")}),jQuery("iframe.um-textarea-html-value").each(function(){let e=jQuery(this);e.onload=function(){UM.frontend.iframe.resize(e[0])}})}); \ No newline at end of file diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 07a4b1d3..b781b30d 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2805,7 +2805,7 @@ if ( ! class_exists( 'um\core\Fields' ) ) { 'media_buttons' => false, 'wpautop' => false, 'editor_class' => $this->get_class( $key, $data ), - 'editor_height' => $data['height'], + 'editor_height' => absint( $data['height'] ), 'tinymce' => array( 'toolbar1' => 'formatselect,bullist,numlist,bold,italic,underline,forecolor,blockquote,hr,removeformat,link,unlink,undo,redo', 'toolbar2' => '', diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 481b12b8..bcd73142 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -261,8 +261,7 @@ function um_profile_field_filter_hook__textarea( $value, $data ) { } if ( ! empty( $data['html'] ) ) { - $height = isset( $data['height'] ) && absint( $data['height'] ) > 0 ? absint( $data['height'] ) : ''; - return ''; + return ''; } $description_key = UM()->profile()->get_show_bio_key( UM()->fields()->global_args ); From eb400bf31e04be49a039b86dd7acb658c0d9b7c8 Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 3 Oct 2024 14:58:52 +0300 Subject: [PATCH 08/10] * manual merge of https://github.com/ultimatemember/ultimatemember/tree/fix/after_registration --- includes/core/um-actions-register.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/includes/core/um-actions-register.php b/includes/core/um-actions-register.php index 47569a60..286ccf99 100644 --- a/includes/core/um-actions-register.php +++ b/includes/core/um-actions-register.php @@ -253,6 +253,8 @@ function um_check_user_status( $user_id, $args, $form_data = null ) { exit; } } else { + um_fetch_user( $user_id ); // required because there can be empty um_user. + if ( 'redirect_url' === um_user( $status . '_action' ) && '' !== um_user( $status . '_url' ) ) { /** * Filters the redirect URL for pending user after registration. From c89e8a6820a68f767ad5d73c8373a44dc0817b9f Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Thu, 3 Oct 2024 15:04:14 +0300 Subject: [PATCH 09/10] * updated changelog.txt, readme.txt; --- changelog.txt | 8 ++++++++ readme.txt | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index d6c30d89..8b7f015e 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,13 @@ == Changelog == += 2.8.8 October 04, 2024 = + +* Bugfixes: + + - Fixed: Download routing initialization + - Fixed: Textarea height and HTML formatted textarea field height isolated via `