function ViewUI::submitItemAdd

Same name and namespace in other branches
  1. 9 core/modules/views_ui/src/ViewUI.php \Drupal\views_ui\ViewUI::submitItemAdd()
  2. 8.9.x core/modules/views_ui/src/ViewUI.php \Drupal\views_ui\ViewUI::submitItemAdd()
  3. 11.x core/modules/views_ui/src/ViewUI.php \Drupal\views_ui\ViewUI::submitItemAdd()

Submit handler for adding new item(s) to a view.

File

core/modules/views_ui/src/ViewUI.php, line 439

Class

ViewUI
Stores UI related temporary settings.

Namespace

Drupal\views_ui

Code

public function submitItemAdd($form, FormStateInterface $form_state) {
  $type = $form_state->get('type');
  $types = ViewExecutable::getHandlerTypes();
  $section = $types[$type]['plural'];
  $display_id = $form_state->get('display_id');
  // Handle the override select.
  [
    $was_defaulted,
    $is_defaulted,
  ] = $this->getOverrideValues($form, $form_state);
  if ($was_defaulted && !$is_defaulted) {
    // We were using the default display's values, but we're now overriding
    // the default display and saving values specific to this display.
    $display =& $this->getExecutable()->displayHandlers
      ->get($display_id);
    // setOverride toggles the override of this section.
    $display->setOverride($section);
  }
  elseif (!$was_defaulted && $is_defaulted) {
    // We used to have an override for this display, but the user now wants
    // to go back to the default display.
    // Overwrite the default display with the current form values, and make
    // the current display use the new default values.
    $display =& $this->getExecutable()->displayHandlers
      ->get($display_id);
    // optionsOverride toggles the override of this section.
    $display->setOverride($section);
  }
  if (!$form_state->isValueEmpty('name') && is_array($form_state->getValue('name'))) {
    // Loop through each of the items that were checked and add them to the view.
    foreach (array_keys(array_filter($form_state->getValue('name'))) as $field) {
      [
        $table,
        $field,
      ] = explode('.', $field, 2);
      if ($cut = strpos($field, '$')) {
        $field = substr($field, 0, $cut);
      }
      $id = $this->getExecutable()
        ->addHandler($display_id, $type, $table, $field);
      // Check to see if we have group by settings
      $key = $type;
      // Footer,header and empty text have a different internal handler type(area).
      if (isset($types[$type]['type'])) {
        $key = $types[$type]['type'];
      }
      $item = [
        'table' => $table,
        'field' => $field,
      ];
      $handler = Views::handlerManager($key)->getHandler($item);
      if ($this->getExecutable()->displayHandlers
        ->get('default')
        ->useGroupBy() && $handler->usesGroupBy()) {
        $this->addFormToStack('handler-group', $display_id, $type, $id);
      }
      // Check to see if this type has settings, if so add the settings form first
      if ($handler && $handler->hasExtraOptions()) {
        $this->addFormToStack('handler-extra', $display_id, $type, $id);
      }
      // Then add the form to the stack
      $this->addFormToStack('handler', $display_id, $type, $id);
    }
  }
  if (isset($this->form_cache)) {
    unset($this->form_cache);
  }
  // Store in cache
  $this->cacheSet();
}

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