function ViewUI::submitItemAdd

Same name in other branches
  1. 8.9.x core/modules/views_ui/src/ViewUI.php \Drupal\views_ui\ViewUI::submitItemAdd()
  2. 10 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 435

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.