public function HandlerBase::submitTemporaryForm in Drupal 8
Same name and namespace in other branches
- 9 core/modules/views/src/Plugin/views/HandlerBase.php \Drupal\views\Plugin\views\HandlerBase::submitTemporaryForm()
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 784
Class
- HandlerBase
- Base class for Views handler plugins.
Namespace
Drupal\views\Plugin\viewsCode
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();
}