Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 110 |
| ViewAddForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
182 | |
0.00% |
0 / 110 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
| prepareEntity | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| form | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 66 |
|||
| actions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| validateForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 11 |
|||
| submitForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 13 |
|||
| cancel | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\views_ui\ViewAddForm. | |
| */ | |
| namespace Drupal\views_ui; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\views\Plugin\views\wizard\WizardPluginBase; | |
| use Drupal\views\Plugin\views\wizard\WizardException; | |
| use Drupal\views\Plugin\ViewsPluginManager; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Form controller for the Views edit form. | |
| */ | |
| class ViewAddForm extends ViewFormBase { | |
| /** | |
| * The wizard plugin manager. | |
| * | |
| * @var \Drupal\views\Plugin\ViewsPluginManager | |
| */ | |
| protected $wizardManager; | |
| /** | |
| * Constructs a new ViewEditForm object. | |
| * | |
| * @param \Drupal\views\Plugin\ViewsPluginManager $wizard_manager | |
| * The wizard plugin manager. | |
| */ | |
| public function __construct(ViewsPluginManager $wizard_manager) { | |
| $this->wizardManager = $wizard_manager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('plugin.manager.views.wizard') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function prepareEntity() { | |
| // Do not prepare the entity while it is being added. | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function form(array $form, FormStateInterface $form_state) { | |
| $form['#attached']['library'][] = 'views_ui/views_ui.admin'; | |
| $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; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function actions(array $form, FormStateInterface $form_state) { | |
| $actions = parent::actions($form, $form_state); | |
| $actions['submit']['#value'] = $this->t('Save and edit'); | |
| // Remove EntityFormController::save() form the submission handlers. | |
| $actions['submit']['#submit'] = array(array($this, 'submitForm')); | |
| $actions['cancel'] = array( | |
| '#type' => 'submit', | |
| '#value' => $this->t('Cancel'), | |
| '#submit' => array('::cancel'), | |
| '#limit_validation_errors' => array(), | |
| ); | |
| return $actions; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state) { | |
| $wizard_type = $form_state->getValue(array('show', 'wizard_key')); | |
| $wizard_instance = $this->wizardManager->createInstance($wizard_type); | |
| $form_state->set('wizard', $wizard_instance->getPluginDefinition()); | |
| $form_state->set('wizard_instance', $wizard_instance); | |
| $errors = $wizard_instance->validateView($form, $form_state); | |
| foreach ($errors as $display_errors) { | |
| foreach ($display_errors as $name => $message) { | |
| $form_state->setErrorByName($name, $message); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| try { | |
| /** @var $wizard \Drupal\views\Plugin\views\wizard\WizardInterface */ | |
| $wizard = $form_state->get('wizard_instance'); | |
| $this->entity = $wizard->createView($form, $form_state); | |
| } | |
| // @todo Figure out whether it really makes sense to throw and catch exceptions on the wizard. | |
| catch (WizardException $e) { | |
| drupal_set_message($e->getMessage(), 'error'); | |
| $form_state->setRedirect('entity.view.collection'); | |
| return; | |
| } | |
| $this->entity->save(); | |
| drupal_set_message($this->t('The view %name has been saved.', array('%name' => $form_state->getValue('label')))); | |
| $form_state->setRedirectUrl($this->entity->urlInfo('edit-form')); | |
| } | |
| /** | |
| * Form submission handler for the 'cancel' action. | |
| * | |
| * @param array $form | |
| * An associative array containing the structure of the form. | |
| * @param \Drupal\Core\Form\FormStateInterface $form_state | |
| * The current state of the form. | |
| */ | |
| public function cancel(array $form, FormStateInterface $form_state) { | |
| $form_state->setRedirect('entity.view.collection'); | |
| } | |
| } |