You are here

public function EntityTypeForm::submitForm in Field Encryption 3.0.x

Form submission handler.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Overrides FormInterface::submitForm

File

src/Form/EntityTypeForm.php, line 205

Class

EntityTypeForm
Configures field encryption on the entity type level.

Namespace

Drupal\field_encrypt\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  $entity_type_id = $form_state
    ->getValue('entity_type');
  if ($form['entity_type']['#default_value'] === $form_state
    ->getValue('entity_type')) {

    /** @var \Drupal\field_encrypt\Entity\FieldEncryptEntityType $field_encrypt_settings */
    $field_encrypt_settings = $this->entityTypeManager
      ->getStorage('field_encrypt_entity_type')
      ->load($entity_type_id);
    if (!$field_encrypt_settings) {
      $field_encrypt_settings = $this->entityTypeManager
        ->getStorage('field_encrypt_entity_type')
        ->create([
        'id' => $entity_type_id,
      ]);
    }
    $base_fields = [];

    // @todo Ajax results in form not having the correct values.
    $selected_base_fields = array_filter($form_state
      ->getUserInput()['base_fields']);
    foreach ($selected_base_fields as $base_field) {
      if ($form_state
        ->hasValue([
        'base_field_properties',
        $base_field,
      ])) {
        $selected_base_field_properties = array_filter($form_state
          ->getUserInput()['base_field_properties'][$base_field]);

        // Remove anything not that's change in user input.
        $base_fields[$base_field] = array_values(array_intersect_key($selected_base_field_properties, $form_state
          ->getValue([
          'base_field_properties',
          $base_field,
        ])));
        if (empty($base_fields[$base_field])) {
          unset($base_fields[$base_field]);
        }
      }
    }
    if (empty($base_fields)) {
      $field_encrypt_settings
        ->delete();
    }
    else {
      $field_encrypt_settings
        ->setBaseFields($base_fields)
        ->save();
    }
    $this
      ->messenger()
      ->addStatus($this
      ->t('Updated encryption settings for %entity_type base fields.', [
      '%entity_type' => $this->entityTypeManager
        ->getDefinition($entity_type_id)
        ->getLabel(),
    ]));
    $form_state
      ->setRedirect('field_encrypt.settings.entity_type');
  }
  elseif ($entity_type_id) {

    // Handle the non-javascript case and redirect to the form for the entity
    // type.
    $form_state
      ->setRedirect('field_encrypt.settings.entity_type', [
      'entity_type_id' => $entity_type_id,
    ]);
  }
}