You are here

public function LayoutBuilderEntityViewDisplayForm::form in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/layout_builder/src/Form/LayoutBuilderEntityViewDisplayForm.php \Drupal\layout_builder\Form\LayoutBuilderEntityViewDisplayForm::form()

Gets the actual form array to be built.

Overrides EntityDisplayFormBase::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

core/modules/layout_builder/src/Form/LayoutBuilderEntityViewDisplayForm.php, line 46

Class

LayoutBuilderEntityViewDisplayForm
Edit form for the LayoutBuilderEntityViewDisplay entity type.

Namespace

Drupal\layout_builder\Form

Code

public function form(array $form, FormStateInterface $form_state) {
  $form = parent::form($form, $form_state);

  // Remove the Layout Builder field from the list.
  $form['#fields'] = array_diff($form['#fields'], [
    OverridesSectionStorage::FIELD_NAME,
  ]);
  unset($form['fields'][OverridesSectionStorage::FIELD_NAME]);
  $is_enabled = $this->entity
    ->isLayoutBuilderEnabled();
  if ($is_enabled) {

    // Hide the table of fields.
    $form['fields']['#access'] = FALSE;
    $form['#fields'] = [];
    $form['#extra'] = [];
  }
  $form['manage_layout'] = [
    '#type' => 'link',
    '#title' => $this
      ->t('Manage layout'),
    '#weight' => -10,
    '#attributes' => [
      'class' => [
        'button',
      ],
    ],
    '#url' => $this->sectionStorage
      ->getLayoutBuilderUrl(),
    '#access' => $is_enabled,
  ];
  $form['layout'] = [
    '#type' => 'details',
    '#open' => TRUE,
    '#title' => $this
      ->t('Layout options'),
    '#tree' => TRUE,
  ];
  $form['layout']['enabled'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Use Layout Builder'),
    '#default_value' => $is_enabled,
  ];
  $form['#entity_builders']['layout_builder'] = '::entityFormEntityBuild';

  // @todo Expand to work for all view modes in
  //   https://www.drupal.org/node/2907413.
  if ($this
    ->isCanonicalMode($this->entity
    ->getMode())) {
    $entity_type = $this->entityTypeManager
      ->getDefinition($this->entity
      ->getTargetEntityTypeId());
    $form['layout']['allow_custom'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Allow each @entity to have its layout customized.', [
        '@entity' => $entity_type
          ->getSingularLabel(),
      ]),
      '#default_value' => $this->entity
        ->isOverridable(),
      '#states' => [
        'disabled' => [
          ':input[name="layout[enabled]"]' => [
            'checked' => FALSE,
          ],
        ],
        'invisible' => [
          ':input[name="layout[enabled]"]' => [
            'checked' => FALSE,
          ],
        ],
      ],
    ];
    if (!$is_enabled) {
      $form['layout']['allow_custom']['#attributes']['disabled'] = 'disabled';
    }

    // Prevent turning off overrides while any exist.
    if ($this
      ->hasOverrides($this->entity)) {
      $form['layout']['enabled']['#disabled'] = TRUE;
      $form['layout']['enabled']['#description'] = $this
        ->t('You must revert all customized layouts of this display before you can disable this option.');
      $form['layout']['allow_custom']['#disabled'] = TRUE;
      $form['layout']['allow_custom']['#description'] = $this
        ->t('You must revert all customized layouts of this display before you can disable this option.');
      unset($form['layout']['allow_custom']['#states']);
      unset($form['#entity_builders']['layout_builder']);
    }
  }
  else {
    $form['layout']['allow_custom'] = [
      '#type' => 'value',
      '#value' => $this->entity
        ->isOverridable(),
    ];
  }
  return $form;
}