You are here

public function ViewAddForm::form in Drupal 9

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

Gets the actual form array to be built.

Overrides EntityForm::form

See also

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

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

File

core/modules/views_ui/src/ViewAddForm.php, line 54

Class

ViewAddForm
Form controller for the Views add form.

Namespace

Drupal\views_ui

Code

public function form(array $form, FormStateInterface $form_state) {
  $form['#attached']['library'][] = 'views_ui/views_ui.admin';
  $form['#attributes']['class'] = [
    'views-admin',
  ];
  $form['name'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('View basic information'),
    '#attributes' => [
      'class' => [
        'fieldset-no-legend',
      ],
    ],
  ];
  $form['name']['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('View name'),
    '#required' => TRUE,
    '#size' => 32,
    '#default_value' => '',
    '#maxlength' => 255,
  ];
  $form['name']['id'] = [
    '#type' => 'machine_name',
    '#maxlength' => 128,
    '#machine_name' => [
      'exists' => '\\Drupal\\views\\Views::getView',
      'source' => [
        'name',
        'label',
      ],
    ],
    '#description' => $this
      ->t('A unique machine-readable name for this View. It must only contain lowercase letters, numbers, and underscores.'),
  ];
  $form['name']['description_enable'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Description'),
  ];
  $form['name']['description'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Provide description'),
    '#title_display' => 'invisible',
    '#size' => 64,
    '#default_value' => '',
    '#states' => [
      'visible' => [
        ':input[name="description_enable"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
  ];

  // Create a wrapper for the entire dynamic portion of the form. Everything
  // that can be updated by AJAX goes somewhere inside here. For example, this
  // is needed by "Show" dropdown (below); it changes the base table of the
  // view and therefore potentially requires all options on the form to be
  // dynamically updated.
  $form['displays'] = [];

  // Create the part of the form that allows the user to select the basic
  // properties of what the view will display.
  $form['displays']['show'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('View settings'),
    '#tree' => TRUE,
    '#attributes' => [
      'class' => [
        'container-inline',
      ],
    ],
  ];

  // Create the "Show" dropdown, which allows the base table of the view to be
  // selected.
  $wizard_plugins = $this->wizardManager
    ->getDefinitions();
  $options = [];
  foreach ($wizard_plugins as $key => $wizard) {
    $options[$key] = $wizard['title'];
  }
  $form['displays']['show']['wizard_key'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Show'),
    '#options' => $options,
    '#sort_options' => TRUE,
  ];
  $show_form =& $form['displays']['show'];
  $default_value = \Drupal::moduleHandler()
    ->moduleExists('node') ? 'node' : 'users';
  $show_form['wizard_key']['#default_value'] = WizardPluginBase::getSelected($form_state, [
    'show',
    'wizard_key',
  ], $default_value, $show_form['wizard_key']);

  // Changing this dropdown updates the entire content of $form['displays'] via
  // AJAX.
  views_ui_add_ajax_trigger($show_form, 'wizard_key', [
    'displays',
  ]);

  // Build the rest of the form based on the currently selected wizard plugin.
  $wizard_key = $show_form['wizard_key']['#default_value'];
  $wizard_instance = $this->wizardManager
    ->createInstance($wizard_key);
  $form = $wizard_instance
    ->buildForm($form, $form_state);
  return $form;
}