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..9fcf473274 100644 --- a/classes/models/fields/FrmFieldType.php +++ b/classes/models/fields/FrmFieldType.php @@ -291,9 +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; - 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(); @@ -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. *