getBuildInfo()['args']['0']; $element_id = $form_state->getBuildInfo()['args']['1']; $webform_elements = $webform->getElementsInitializedAndFlattened(); $allowed_types = array('textfield', 'textarea'); if (in_array($webform_elements[$element_id]['#type'], $allowed_types)) { // To provide the fieldset for encryption fields on element config form. $form['element_encrypt'] = [ '#type' => 'details', '#title' => t('Encryption'), ]; // To provide the encryption fields for webform elements. $form['element_encrypt']['encrypt'] = [ '#type' => 'webform_element_encrypt', '#title' => t('Encryption'), '#title_display' => 'hidden', ]; } } /** * Implementation of hook_form_alter(). */ function webform_encrypt_form_alter(&$form, &$form_state, $form_id) { // When we are editing a webform submission, if (strpos($form_id, 'webform_submission_') === 0) { $config = \Drupal::service('config.factory')->get('webform.encrypt')->get('element.settings'); $elements = $form['elements']; foreach ($elements as $key => &$element) { if (isset($config[$key]['encrypt']) && $config[$key]['encrypt']) { $encryption_profile = \Drupal\encrypt\Entity\EncryptionProfile::load($config[$key]['encrypt_profile']); $form['elements'][$key]['#default_value'] = Drupal::service('encryption')->decrypt($element['#default_value'], $encryption_profile); } } } } /** * Implements hook_entity_presave(). * * @param \Drupal\Core\Entity\EntityInterface $entity */ function webform_encrypt_entity_presave(Drupal\Core\Entity\EntityInterface $entity) { if ($entity instanceof Drupal\webform\Entity\WebformSubmission) { $config = \Drupal::service('config.factory')->get('webform.encrypt')->get('element.settings'); $data_original = $entity->getData(); foreach ($data_original as $key => $value) { if (isset($config[$key]['encrypt']) && $config[$key]['encrypt']) { $encryption_profile = \Drupal\encrypt\Entity\EncryptionProfile::load($config[$key]['encrypt_profile']); $data[$key] = Drupal::service('encryption')->encrypt($value, $encryption_profile); } else { $data[$key] = $value; } } $entity->setData($data); } }