diff --git a/CHANGELOG.md b/CHANGELOG.md index bbaf66e..507fa37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ before starting to add changes. Use example [placed in the end of the page](#exa ## [Unreleased] +- Avoid double-saving submissions when handling name and address protection. + ## [4.1.0] 2025-06-03 - [PR-176](https://github.com/OS2Forms/os2forms/pull/176) diff --git a/modules/os2forms_nemid/os2forms_nemid.module b/modules/os2forms_nemid/os2forms_nemid.module index 2d11ae8..b224847 100644 --- a/modules/os2forms_nemid/os2forms_nemid.module +++ b/modules/os2forms_nemid/os2forms_nemid.module @@ -469,5 +469,4 @@ function os2forms_nemid_submission_set_address_protected(array $form, FormStateI $data = $webformSubmission->getData(); $data['os2forms_nemid_elements_nemid_address_protected'] = TRUE; $webformSubmission->setData($data); - $webformSubmission->save(); } diff --git a/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php b/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php index fc3ba6f..11394ff 100644 --- a/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php +++ b/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php @@ -47,9 +47,21 @@ public function alterForm(array &$element, array &$form, FormStateInterface $for // Only manipulate element on submission create form. if (!$webformSubmission->isCompleted()) { if ($cprLookupResult && $cprLookupResult->isNameAddressProtected()) { + // @todo What is this used for? $element['#info_message'] = 'adresse beskyttelse'; NestedArray::setValue($form['elements'], $element['#webform_parents'], $element); - $form['actions']['submit']['#submit'][] = 'os2forms_nemid_submission_set_address_protected'; + + // It is important the 'os2forms_nemid_submission_set_address_protected' + // submit action is executed before the 'save' action. Otherwise, + // submissions are both created and completed, resulting in unexpected + // behavior, e.g., handlers being run twice. + if (isset($form['actions']['submit']['#submit']) && is_array($form['actions']['submit']['#submit'])) { + array_unshift($form['actions']['submit']['#submit'], 'os2forms_nemid_submission_set_address_protected'); + } + else { + $form['actions']['submit']['#submit'][] = 'os2forms_nemid_submission_set_address_protected'; + } + } } else {