예제 #1
0
 /**
  * @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());
 }
예제 #2
0
 /**
  * {@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;
 }