From 5d5991b4503f8d28e831edb82d8eeb9d7179700d Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 19 Nov 2024 15:52:30 -0400 Subject: [PATCH 1/3] Pro issue 5296 / stop decoding default values for non-array types --- classes/models/FrmField.php | 11 ++++++++--- classes/models/fields/FrmFieldType.php | 11 +++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/classes/models/FrmField.php b/classes/models/FrmField.php index 74235a03c2..d29fba1b14 100644 --- a/classes/models/FrmField.php +++ b/classes/models/FrmField.php @@ -1084,9 +1084,14 @@ private static function prepare_options( &$results ) { // Allow a single box to be checked for the default value. $before = $results->default_value; - FrmAppHelper::unserialize_or_decode( $results->default_value ); - if ( $before === $results->default_value && ! is_array( $before ) && strpos( $before, '["' ) === 0 ) { - $results->default_value = FrmAppHelper::maybe_json_decode( $results->default_value ); + + $field_object = FrmFieldFactory::get_field_type( $results->type ); + + if ( $field_object->should_unserialize_value() ) { + FrmAppHelper::unserialize_or_decode( $results->default_value ); + if ( $before === $results->default_value && ! is_array( $before ) && strpos( $before, '["' ) === 0 ) { + $results->default_value = FrmAppHelper::maybe_json_decode( $results->default_value ); + } } } diff --git a/classes/models/fields/FrmFieldType.php b/classes/models/fields/FrmFieldType.php index f885956d5f..9efd3134f9 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -1654,6 +1654,17 @@ public function maybe_decode_value( $value ) { return $value; } + /** + * Only some field types should unserialize or decode values. This is based on the value of the array_allowed property. + * + * @since x.x + * + * @return bool + */ + public function should_unserialize_value() { + return $this->array_allowed; + } + /** * This function is deprecated since it has a typo in the name. * From dd28917828d1844f3033bbdc0c9c2f6d16cb92c9 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 19 Nov 2024 15:56:48 -0400 Subject: [PATCH 2/3] Add another check --- classes/models/fields/FrmFieldType.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/classes/models/fields/FrmFieldType.php b/classes/models/fields/FrmFieldType.php index 9efd3134f9..2f6e535fd3 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -293,7 +293,12 @@ protected function include_on_form_builder( $name, $field ) { $field['html_name'] = $field_name; $field['html_id'] = $html_id; - FrmAppHelper::unserialize_or_decode( $field['default_value'] ); + + $field_object = FrmFieldFactory::get_field_type( $field['type'] ); + + if ( $field_object->should_unserialize_value() ) { + FrmAppHelper::unserialize_or_decode( $field['default_value'] ); + } $display = $this->display_field_settings(); include $this->include_form_builder_file(); From a1ff2c78edef92639d2256aa69fb1099f99ad533 Mon Sep 17 00:00:00 2001 From: Mike Letellier Date: Tue, 19 Nov 2024 16:08:44 -0400 Subject: [PATCH 3/3] Clean up --- classes/models/fields/FrmFieldType.php | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/classes/models/fields/FrmFieldType.php b/classes/models/fields/FrmFieldType.php index 2f6e535fd3..9fcf473274 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -291,14 +291,9 @@ protected function include_on_form_builder( $name, $field ) { $html_id = $this->html_id(); $read_only = isset( $field['read_only'] ) ? $field['read_only'] : 0; - $field['html_name'] = $field_name; - $field['html_id'] = $html_id; - - $field_object = FrmFieldFactory::get_field_type( $field['type'] ); - - if ( $field_object->should_unserialize_value() ) { - FrmAppHelper::unserialize_or_decode( $field['default_value'] ); - } + $field['html_name'] = $field_name; + $field['html_id'] = $html_id; + $field['default_value'] = $this->maybe_decode_value( $field['default_value'] ); $display = $this->display_field_settings(); include $this->include_form_builder_file();