function EntityDisplayFormBase::submitForm

Same name and namespace in other branches
  1. 11.x core/modules/field_ui/src/Form/EntityDisplayFormBase.php \Drupal\field_ui\Form\EntityDisplayFormBase::submitForm()
  2. 10 core/modules/field_ui/src/Form/EntityDisplayFormBase.php \Drupal\field_ui\Form\EntityDisplayFormBase::submitForm()
  3. 8.9.x core/modules/field_ui/src/Form/EntityDisplayFormBase.php \Drupal\field_ui\Form\EntityDisplayFormBase::submitForm()

File

core/modules/field_ui/src/Form/EntityDisplayFormBase.php, line 541

Class

EntityDisplayFormBase
Base class for EntityDisplay edit forms.

Namespace

Drupal\field_ui\Form

Code

public function submitForm(array &$form, FormStateInterface $form_state) {
  // If the main "Save" button was submitted while a field settings subform
  // was being edited, update the new incoming settings when rebuilding the
  // entity, just as if the subform's "Update" button had been submitted.
  if ($edit_field = $form_state->get('plugin_settings_edit')) {
    $form_state->set('plugin_settings_update', $edit_field);
  }
  parent::submitForm($form, $form_state);
  $form_values = $form_state->getValues();
  // Handle the 'display modes' checkboxes if present.
  if ($this->entity
    ->getMode() == 'default' && !empty($form_values['display_modes_custom'])) {
    $display_modes = $this->getDisplayModes();
    $current_statuses = $this->getDisplayStatuses();
    $statuses = [];
    foreach ($form_values['display_modes_custom'] as $mode => $value) {
      if (!empty($value) && empty($current_statuses[$mode])) {
        // If no display exists for the newly enabled view mode, initialize
        // it with those from the 'default' view mode, which were used so
        // far.
        if (!$this->entityTypeManager
          ->getStorage($this->entity
          ->getEntityTypeId())
          ->load($this->entity
          ->getTargetEntityTypeId() . '.' . $this->entity
          ->getTargetBundle() . '.' . $mode)) {
          $display = $this->getEntityDisplay($this->entity
            ->getTargetEntityTypeId(), $this->entity
            ->getTargetBundle(), 'default')
            ->createCopy($mode);
          $display->save();
        }
        $display_mode_label = $display_modes[$mode]['label'];
        $url = $this->getOverviewUrl($mode);
        $this->messenger()
          ->addStatus($this->t('The %display_mode mode now uses custom display settings. You might want to <a href=":url">configure them</a>.', [
          '%display_mode' => $display_mode_label,
          ':url' => $url->toString(),
        ]));
      }
      $statuses[$mode] = !empty($value);
    }
    $this->saveDisplayStatuses($statuses);
  }
  $this->messenger()
    ->addStatus($this->t('Your settings have been saved.'));
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.