/** * @covers ::getSelected * * @dataProvider providerTestGetSelected */ public function testGetSelected($expected, $element = [], $parents = [], $user_input = [], $not_rebuilding_expected = NULL) { $not_rebuilding_expected = $not_rebuilding_expected ?: $expected; $form_state = new FormState(); $form_state->setUserInput($user_input); $actual = WizardPluginBase::getSelected($form_state, $parents, 'the_default_value', $element); $this->assertSame($not_rebuilding_expected, $actual); $this->assertSame($user_input, $form_state->getUserInput()); $form_state->setRebuild(); $actual = WizardPluginBase::getSelected($form_state, $parents, 'the_default_value', $element); $this->assertSame($expected, $actual); $this->assertSame($user_input, $form_state->getUserInput()); }
/** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $form['#attached']['css'] = static::getAdminCSS(); $form['#attached']['js'][] = drupal_get_path('module', 'views_ui') . '/js/views-admin.js'; $form['#attributes']['class'] = array('views-admin'); $form['name'] = array('#type' => 'fieldset', '#title' => t('View basic information'), '#attributes' => array('class' => array('fieldset-no-legend'))); $form['name']['label'] = array('#type' => 'textfield', '#title' => $this->t('View name'), '#required' => TRUE, '#size' => 32, '#default_value' => '', '#maxlength' => 255); $form['name']['id'] = array('#type' => 'machine_name', '#maxlength' => 128, '#machine_name' => array('exists' => '\\Drupal\\views\\Views::getView', 'source' => array('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'] = array('#type' => 'checkbox', '#title' => $this->t('Description')); $form['name']['description'] = array('#type' => 'textfield', '#title' => $this->t('Provide description'), '#title_display' => 'invisible', '#size' => 64, '#default_value' => '', '#states' => array('visible' => array(':input[name="description_enable"]' => array('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'] = array(); // Create the part of the form that allows the user to select the basic // properties of what the view will display. $form['displays']['show'] = array('#type' => 'fieldset', '#title' => t('View settings'), '#tree' => TRUE, '#attributes' => array('class' => array('container-inline'))); // Create the "Show" dropdown, which allows the base table of the view to be // selected. $wizard_plugins = $this->wizardManager->getDefinitions(); $options = array(); foreach ($wizard_plugins as $key => $wizard) { $options[$key] = $wizard['title']; } $form['displays']['show']['wizard_key'] = array('#type' => 'select', '#title' => $this->t('Show'), '#options' => $options); $show_form =& $form['displays']['show']; $default_value = \Drupal::moduleHandler()->moduleExists('node') ? 'node' : 'users'; $show_form['wizard_key']['#default_value'] = WizardPluginBase::getSelected($form_state, array('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', array('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; }