Skip to content

Commit d11ab8c

Browse files
Fix bad merging of deploy branch validation and field settings work causing incorrect form submissions
1 parent c92fb4b commit d11ab8c

File tree

2 files changed

+26
-29
lines changed

2 files changed

+26
-29
lines changed

src/collective/volto/formsupport/adapters/post.py

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -335,27 +335,36 @@ def format_fields(self):
335335
# "custom_field_id": self.block.get(field["field_id"]),
336336
# }
337337
# )
338-
validations_for_field = {}
338+
339+
matching_field = None
339340
for field in self.block.get("subblocks", []):
340-
validation_ids_to_apply = field.get("validations", [])
341-
for validation_and_setting_id, setting_value in field.get(
342-
"validationSettings", {}
343-
).items():
344-
split_validation_and_setting_ids = validation_and_setting_id.split("-")
345-
if len(split_validation_and_setting_ids) < 2:
346-
continue
347-
validation_id, setting_id = split_validation_and_setting_ids
348-
if validation_id not in validation_ids_to_apply:
349-
continue
350-
if validation_id not in validations_for_field:
351-
validations_for_field[validation_id] = {}
352-
validations_for_field[validation_id][setting_id] = setting_value
341+
if field.get("id", field.get("field_id")) == submitted_field.get("field_id"):
342+
matching_field = field
343+
break
344+
345+
if matching_field is None:
346+
continue
347+
348+
validations_for_field = {}
349+
validation_ids_to_apply = matching_field.get("validations", [])
350+
for validation_and_setting_id, setting_value in matching_field.get(
351+
"validationSettings", {}
352+
).items():
353+
split_validation_and_setting_ids = validation_and_setting_id.split("-")
354+
if len(split_validation_and_setting_ids) < 2:
355+
continue
356+
validation_id, setting_id = split_validation_and_setting_ids
357+
if validation_id not in validation_ids_to_apply:
358+
continue
359+
if validation_id not in validations_for_field:
360+
validations_for_field[validation_id] = {}
361+
validations_for_field[validation_id][setting_id] = setting_value
353362
fields_data.append(
354363
{
355-
**field,
364+
**matching_field,
356365
**submitted_field,
357366
"id": submitted_field["field_id"], # Ensure we always use the submitted field id
358-
"display_value_mapping": field.get("display_values"),
367+
"display_value_mapping": matching_field.get("display_values"),
359368
"custom_field_id": self.block.get(submitted_field["field_id"]),
360369
# We're straying from how validations are serialized and deserialized here to make our lives easier.
361370
# Let's use a dictionary of {'validation_id': {'setting_id': 'setting_value'}} when working inside fields for simplicity.

src/collective/volto/formsupport/restapi/deserializer/configure.zcml

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,6 @@
33
xmlns:zcml="http://namespaces.zope.org/zcml"
44
>
55

6-
<subscriber
7-
factory="collective.volto.formsupport.restapi.deserializer.FormBlockDeserializer"
8-
provides="plone.restapi.interfaces.IBlockFieldDeserializationTransformer"
9-
/>
10-
<subscriber
11-
factory="collective.volto.formsupport.restapi.deserializer.FormBlockDeserializerRoot"
12-
provides="plone.restapi.interfaces.IBlockFieldDeserializationTransformer"
13-
/>
14-
15-
<!-- =======
16-
> -->
17-
186
<subscriber
197
factory=".blocks.FormBlockDeserializer"
208
provides="plone.restapi.interfaces.IBlockFieldDeserializationTransformer"
@@ -23,5 +11,5 @@
2311
factory=".blocks.FormBlockDeserializerRoot"
2412
provides="plone.restapi.interfaces.IBlockFieldDeserializationTransformer"
2513
/>
26-
<!-- >>>>>>> custom-label-mapping -->
14+
2715
</configure>

0 commit comments

Comments
 (0)