From c32cd88371a7c9893ade6cc579dd430cfefe7c41 Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Fri, 4 Jul 2025 10:28:28 +0200 Subject: [PATCH 1/2] #186: Avoid multiple saves when handling name and address protection --- modules/os2forms_nemid/os2forms_nemid.module | 1 - .../src/Plugin/WebformElement/NemidAddress.php | 12 +++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/os2forms_nemid/os2forms_nemid.module b/modules/os2forms_nemid/os2forms_nemid.module index 2d11ae88..b2248475 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 fc3ba6fd..becb8320 100644 --- a/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php +++ b/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php @@ -47,9 +47,19 @@ 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 that 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 { From bcae0ad89a0ab875c920f4eeb630f638fd279f9a Mon Sep 17 00:00:00 2001 From: jekuaitk Date: Fri, 4 Jul 2025 10:38:44 +0200 Subject: [PATCH 2/2] #186: Update CHANGELOG and apply coding standards --- CHANGELOG.md | 2 ++ .../src/Plugin/WebformElement/NemidAddress.php | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbaf66e6..507fa373 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/src/Plugin/WebformElement/NemidAddress.php b/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php index becb8320..11394ff0 100644 --- a/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php +++ b/modules/os2forms_nemid/src/Plugin/WebformElement/NemidAddress.php @@ -47,12 +47,14 @@ 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? + // @todo What is this used for? $element['#info_message'] = 'adresse beskyttelse'; NestedArray::setValue($form['elements'], $element['#webform_parents'], $element); - // It is important that 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. + // 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'); }