Skip to content
Snippets Groups Projects

Don't lose values for cmrf_display fields when coming back from preview

Closed dnt requested to merge issue/cmrf_form_processor-3447564:3447564-value-is-lost into 2.0.x
1 file
+ 20
9
Compare changes
  • Side-by-side
  • Inline
@@ -133,6 +133,10 @@ class WebformSubmissionHandler {
}
}
}
else {
$this->loadDefaultValuesFromStorage($form, $form_state);
}
$wrapperId = $form_state->getFormObject()
->getFormId() . '_cmrf_form_processor';
if (!isset($form['#prefix'])) {
@@ -550,6 +554,16 @@ class WebformSubmissionHandler {
return $params;
}
private function loadDefaultValuesFromStorage(array &$form, FormStateInterface $formState): void {
$defaults = $formState->get('defaults') ?? [];
foreach ($defaults as $field => $value) {
$element =& WebformElementHelper::getElement($form, $field);
if (NULL !== $element) {
$element['#default_value'] ??= $value;
}
}
}
private function setDefaultValue(array &$form, FormStateInterface $formState, WebformSubmissionInterface $webformSubmission, string $field, $value) {
$element =& WebformElementHelper::getElement($form, $field);
if ($element) {
@@ -575,27 +589,24 @@ class WebformSubmissionHandler {
}
$file->save();
$element['#default_value'] = [$file->id()];
$element['#value'] = $element['#default_value'];
$formState->setValue($field, $element['#default_value']);
$webformSubmission->setElementData($field, $element['#default_value']);
}
}
} elseif ($element['#type'] == 'datetime') {
try {
$value = DrupalDateTime::createFromFormat(\DateTime::ATOM, $value);
$element['#default_value'] = $value;
$element['#value'] = $value;
$formState->setValue($field, $value);
$webformSubmission->setElementData($field, $value);
} catch (\InvalidArgumentException $ex) {
// is it something else than a date ignore
}
}
elseif ($value !== NULL) {
$element['#default_value'] = $value;
$element['#value'] = $value;
$formState->setValue($field, $value);
$webformSubmission->setElementData($field, $value);
}
if (array_key_exists('#default_value', $element)) {
$formState->setValue($field, $element['#default_value']);
$formState->set(['defaults', $field], $element['#default_value']);
$webformSubmission->setElementData($field, $element['#default_value']);
}
}
}
Loading