function HandlerBase::submitTemporaryForm

Same name and namespace in other branches
  1. 9 core/modules/views/src/Plugin/views/HandlerBase.php \Drupal\views\Plugin\views\HandlerBase::submitTemporaryForm()
  2. 8.9.x core/modules/views/src/Plugin/views/HandlerBase.php \Drupal\views\Plugin\views\HandlerBase::submitTemporaryForm()
  3. 11.x core/modules/views/src/Plugin/views/HandlerBase.php \Drupal\views\Plugin\views\HandlerBase::submitTemporaryForm()

Submits a temporary form.

A submit handler that is used for storing temporary items when using multi-step changes, such as ajax requests.

File

core/modules/views/src/Plugin/views/HandlerBase.php, line 882

Class

HandlerBase
Base class for Views handler plugins.

Namespace

Drupal\views\Plugin\views

Code

public function submitTemporaryForm($form, FormStateInterface $form_state) {
  // Run it through the handler's submit function.
  $this->submitOptionsForm($form['options'], $form_state);
  $item = $this->options;
  $types = ViewExecutable::getHandlerTypes();
  // For footer/header $handler_type is area but $type is footer/header.
  // For all other handle types it's the same.
  $handler_type = $type = $form_state->get('type');
  if (!empty($types[$type]['type'])) {
    $handler_type = $types[$type]['type'];
  }
  $override = NULL;
  $view = $form_state->get('view');
  $executable = $view->getExecutable();
  if ($executable->display_handler
    ->useGroupBy() && !empty($item['group_type'])) {
    if (empty($executable->query)) {
      $executable->initQuery();
    }
    $aggregate = $executable->query
      ->getAggregationInfo();
    if (!empty($aggregate[$item['group_type']]['handler'][$type])) {
      $override = $aggregate[$item['group_type']]['handler'][$type];
    }
  }
  // Create a new handler and unpack the options from the form onto it. We
  // can use that for storage.
  $handler = Views::handlerManager($handler_type)->getHandler($item, $override);
  $handler->init($executable, $executable->display_handler, $item);
  // Add the incoming options to existing options because items using
  // the extra form may not have everything in the form here.
  $options = $form_state->getValue('options') + $this->options;
  // This unpacks only options that are in the definition, ensuring random
  // extra stuff on the form is not sent through.
  $handler->unpackOptions($handler->options, $options, NULL, FALSE);
  // Store the item back on the view.
  $executable = $view->getExecutable();
  $executable->temporary_options[$type][$form_state->get('id')] = $handler->options;
  // @todo Decide if \Drupal\views_ui\Form\Ajax\ViewsFormBase::getForm() is
  //   perhaps the better place to fix the issue.
  // \Drupal\views_ui\Form\Ajax\ViewsFormBase::getForm() drops the current
  // form from the stack, even if it's an #ajax. So add the item back to the top
  // of the stack.
  $view->addFormToStack($form_state->get('form_key'), $form_state->get('display_id'), $type, $item['id'], TRUE);
  $form_state->get('rerender', TRUE);
  $form_state->setRebuild();
  // Write to cache
  $view->cacheSet();
}

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