I'm running into a situation that I hope someone will be able to offer some advice and guidance as to my approach is not working at the moment.
We're building a webform which contains an email address field. When the user fills out this field we take their email address and do an account lookup within the validateForm function of our custom webform handler. The form submission is not saved within our database.
If the user has an account associated with the email address supplied, we take the results and update number of fields within the $webform_submission like this:
public function validateForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Grab the email address
$email_address = !empty($form_state->getValue('user_email')) ? Html::escape($form_state->getValue('user_email')) : NULL;
if (isset($email_address)) {
// Grab the contact record associated with the email
$contact_record_obj = Utility::getContactObjFromEmailAddress($email_address);
if(isset($contact_record_obj)) {
// Update the $webform_submission data
$webform_submission->setElementData("first_name", $contact_record_obj->firstName);
$webform_submission->setElementData("last_name", $contact_record_obj->lastName);
$webform_submission->setElementData("business_phone", $contact_record_obj->businessPhone);
// Save the $webform_submission data?
$webform_submission->save();
}
}
}
I've placed break points on each line where the setElementData is being called and I can see that the data array within $webform_submission is being updated with the information retrieved for the email lookup.
I then placed breakpoints into the submitForm function to check the $webform_submission being passed to it and I noticed that all of the data that was set within the validateForm function had been wiped out.
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Grab the $webform_submission data.
$form_submission_data = $webform_submission->getData();
}
Number of questions
Why are the values within the $webform_submission being reset between the validateForm and submitForm function calls?
Is the validateForm the correct place to update form field values?
alterForm seems like a more reasonable place to update/change form field values but I wasn't sure how to suppress the alterForm call being made whenever I edited the webform while being logged into Drupal.
Any help or suggestions would be greatly appreciated.