function ViewAddForm::form

Same name in other branches
  1. 8.9.x core/modules/views_ui/src/ViewAddForm.php \Drupal\views_ui\ViewAddForm::form()
  2. 10 core/modules/views_ui/src/ViewAddForm.php \Drupal\views_ui\ViewAddForm::form()
  3. 11.x core/modules/views_ui/src/ViewAddForm.php \Drupal\views_ui\ViewAddForm::form()

Overrides EntityForm::form

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;
}

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