diff --git a/composer.json b/composer.json index f87c2da3..b5a79dac 100644 --- a/composer.json +++ b/composer.json @@ -147,6 +147,9 @@ }, "drupal/maestro": { "Disallow empty queueToken": "patches/drupal/maestro/maestro_token.patch" + }, + "os2forms/os2forms": { + "Handle nested elements in webform inherit": "patches/drupal/os2forms/handle_nested_elements_in_webform_inherit.patch" } }, "patches-ignore": { diff --git a/patches/drupal/os2forms/handle_nested_elements_in_webform_inherit.patch b/patches/drupal/os2forms/handle_nested_elements_in_webform_inherit.patch new file mode 100644 index 00000000..61bb9181 --- /dev/null +++ b/patches/drupal/os2forms/handle_nested_elements_in_webform_inherit.patch @@ -0,0 +1,38 @@ +diff --git a/modules/os2forms_forloeb/src/Plugin/EngineTasks/MaestroWebformInheritTask.php b/modules/os2forms_forloeb/src/Plugin/EngineTasks/MaestroWebformInheritTask.php +index b04137c..8bd0040 100644 +--- a/modules/os2forms_forloeb/src/Plugin/EngineTasks/MaestroWebformInheritTask.php ++++ b/modules/os2forms_forloeb/src/Plugin/EngineTasks/MaestroWebformInheritTask.php +@@ -2,9 +2,11 @@ + + namespace Drupal\os2forms_forloeb\Plugin\EngineTasks; + ++use Drupal\Component\Utility\NestedArray; + use Drupal\Core\Form\FormStateInterface; + use Drupal\maestro\Engine\MaestroEngine; + use Drupal\maestro_webform\Plugin\EngineTasks\MaestroWebformTask; ++use Drupal\webform\Entity\Webform; + use Drupal\webform\Entity\WebformSubmission; + use Drupal\webform\Utility\WebformArrayHelper; + +@@ -152,9 +154,18 @@ public static function webformSubmissionFormAlter(array &$form, FormStateInterfa + if ('webform_submission' === ($entityIdentifier['entity_type'] ?? NULL)) { + $submission = WebformSubmission::load($entityIdentifier['entity_id']); + $data = $submission->getData(); +- foreach ($data as $key => $value) { +- if (isset($form['elements'][$key])) { +- $form['elements'][$key]['#default_value'] = $value; ++ ++ // The target element may be hidden inside sections or field groups ++ // on the target form. Therefore, we need to load that form and get ++ // element information to properly set default element values nested ++ // inside the form. ++ if ($targetWebform = Webform::load($form['#webform_id'] ?? NULL)) { ++ foreach ($data as $key => $value) { ++ if ($targetElement = $targetWebform->getElement($key)) { ++ if ($element = &NestedArray::getValue($form['elements'], $targetElement['#webform_parents'])) { ++ $element['#default_value'] = $value; ++ } ++ } + } + } + }