Score:0

updating $webform_submission values in the alterForm function of a custom webform handler

in flag

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

  1. Why are the values within the $webform_submission being reset between the validateForm and submitForm function calls?

  2. Is the validateForm the correct place to update form field values?

  3. 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.

cn flag
Welcome to Drupal Answers. Please try to only ask one question per post here. The reason why is that if someone answers your question, you can "accept" that answer, but if person A answers question 1 and person B answers question 2, it's no longer clear what should be accepted.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.