public function BetterExposedFilters::submitOptionsForm in Better Exposed Filters 8.4
Same name and namespace in other branches
- 8.5 src/Plugin/views/exposed_form/BetterExposedFilters.php \Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters::submitOptionsForm()
Handle any special handling on the validate form.
Overrides InputRequired::submitOptionsForm
File
- src/
Plugin/ views/ exposed_form/ BetterExposedFilters.php, line 627
Class
- BetterExposedFilters
- Exposed form plugin that provides a basic exposed form.
Namespace
Drupal\better_exposed_filters\Plugin\views\exposed_formCode
public function submitOptionsForm(&$form, FormStateInterface $form_state) {
// Drupal only passes in a part of the views form, but we need the complete
// form array for plugin subforms to work.
$parent_form = $form_state
->getCompleteForm();
// Save a shorthand to the BEF form.
$bef_form =& $form['bef'];
// Reorder options based on config - some keys may have shifted because of
// form alterations (@see \Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters::buildOptionsForm).
$options =& $form_state
->getValue('exposed_form_options');
$options = array_replace_recursive($this->options, $options);
// Save a shorthand to the BEF options.
$bef_options =& $options['bef'];
// Shorthand for all filter handlers in this view.
/** @var \Drupal\views\Plugin\views\HandlerBase[] $filters */
$filters = $this->view->display_handler->handlers['filter'];
parent::submitOptionsForm($form, $form_state);
// Iterate over all filter, sort and pager plugins.
foreach ($bef_options as $type => $config) {
// Save exposed filter configuration.
if ($type === 'filter') {
foreach ($config as $filter_id => $filter_options) {
$plugin_id = $filter_options['configuration']['plugin_id'] ?? NULL;
/** @var \Drupal\better_exposed_filters\Plugin\BetterExposedFiltersWidgetInterface $plugin */
if (!$plugin_id) {
unset($bef_options['filter'][$filter_id]);
continue;
}
$plugin = $this->filterWidgetManager
->createInstance($plugin_id);
$subform =& $bef_form[$type][$filter_id]['configuration'];
$subform_state = SubformState::createForSubform($subform, $parent_form, $form_state);
$plugin
->setView($this->view);
$plugin
->setViewsHandler($filters[$filter_id]);
$plugin
->submitConfigurationForm($subform, $subform_state);
$plugin_configuration = $plugin
->getConfiguration();
$bef_options[$type][$filter_id] = $plugin_configuration;
}
}
elseif (in_array($type, [
'pager',
'sort',
])) {
$plugin_id = $config['configuration']['plugin_id'] ?? NULL;
if (!$plugin_id) {
unset($bef_options[$type]);
continue;
}
// Use the correct widget manager.
if ($type === 'pager') {
/** @var \Drupal\better_exposed_filters\Plugin\BetterExposedFiltersWidgetInterface $plugin */
$plugin = $this->pagerWidgetManager
->createInstance($plugin_id);
}
else {
/** @var \Drupal\better_exposed_filters\Plugin\BetterExposedFiltersWidgetInterface $plugin */
$plugin = $this->sortWidgetManager
->createInstance($plugin_id);
}
$subform =& $bef_form[$type]['configuration'];
$subform_state = SubformState::createForSubform($subform, $parent_form, $form_state);
$plugin
->setView($this->view);
$plugin
->submitConfigurationForm($subform, $subform_state);
$plugin_configuration = $plugin
->getConfiguration();
$bef_options[$type] = $plugin_configuration;
}
}
}