function EntityDisplayFormBase::submitForm

Same name and namespace in other branches
  1. 9 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. 11.x core/modules/field_ui/src/Form/EntityDisplayFormBase.php \Drupal\field_ui\Form\EntityDisplayFormBase::submitForm()

Overrides EntityForm::submitForm

File

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

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.