Skip to content
Snippets Groups Projects
Commit 259d167d authored by Oleksandr Riumshyn's avatar Oleksandr Riumshyn
Browse files

Issue #3132480 by orom: Filter terms based on ...

Issue #3132480 by orom:  Filter terms based on  options_show_only_used_filtered set not working as expected
parent ef6e1f54
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,8 @@ REQUIREMENTS
This module requires the following modules:
* [Better Exposed Filters](https://drupal.org/project/better_exposed_filters)
* [For any reference support - patch from issue] (https://www.drupal.org/project/drupal/issues/2429699)
* [For any reference support - patch from issue]
(https://www.drupal.org/project/drupal/issues/2429699)
INSTALLATION
------------
......
{
"name": "drupal/selective_better_exposed_filters",
"type": "drupal-module",
"description": "Provide extra option for better exposed filters to show only used terms in filter.",
"keywords": ["Drupal"],
"license": "GPL-2.0+",
"type": "drupal-module",
"keywords": [
"Drupal"
],
"homepage": "https://www.drupal.org/project/selective_better_exposed_filters",
"minimum-stability": "dev",
"support": {
"issues": "https://www.drupal.org/project/issues/selective_better_exposed_filters",
"source": "http://cgit.drupalcode.org/selective_better_exposed_filters"
},
"require": {
"drupal/better_exposed_filters": "^4.0 || ^5.0 || ^6.0"
}
},
"minimum-stability": "dev"
}
......@@ -2,7 +2,7 @@
/**
* @file
* Install, update, and uninstall functions for the Selective Better Exposed Filters module.
* Install, update, and uninstall functions for the SBEF module.
*/
/**
......@@ -17,4 +17,4 @@ function selective_better_exposed_filters_install() {
*/
function selective_better_exposed_filters_update_8102() {
selective_better_exposed_filters_install();
}
\ No newline at end of file
}
......@@ -9,8 +9,8 @@ use Drupal\search_api\Plugin\views\filter\SearchApiFilterTrait;
use Drupal\search_api\Plugin\views\filter\SearchApiOptions;
use Drupal\taxonomy\Plugin\views\filter\TaxonomyIndexTid;
use Drupal\verf\Plugin\views\filter\EntityReference as VERF;
use Drupal\views\Plugin\views\filter\EntityReference;
use Drupal\views\Plugin\views\filter\Bundle;
use Drupal\views\Plugin\views\filter\EntityReference;
use Drupal\views\Plugin\views\filter\FilterPluginBase;
use Drupal\views\ViewExecutable;
use Drupal\views\Views;
......@@ -48,11 +48,11 @@ abstract class SelectiveFilterBase {
'#type' => 'checkbox',
'#title' => t('Filter items based on filtered result set by other applied filters'),
'#default_value' => !empty($settings['options_show_only_used_filtered']),
'#description' => t('Restrict exposed filter values to those presented in the already filtered result set by other applied filters.'),
'#description' => t('Restrict exposed filter values to those presented in the already filtered result set by other applied filters. (Not work when view use ajax form in block)'),
'#states' => [
'visible' => [
':input[name="exposed_form_options[bef][filter][' . $filter->field . '][configuration][options_show_only_used]"]' => [
'checked' => TRUE
'checked' => TRUE,
],
],
],
......@@ -65,7 +65,7 @@ abstract class SelectiveFilterBase {
'#states' => [
'visible' => [
':input[name="exposed_form_options[bef][filter][' . $filter->field . '][configuration][options_show_only_used]"]' => [
'checked' => TRUE
'checked' => TRUE,
],
],
],
......@@ -89,17 +89,39 @@ abstract class SelectiveFilterBase {
$view->setArguments($current_view->args);
$view->setDisplay($current_view->current_display);
$view->preExecute();
// Include all results of a view, ignoring items_per_page that
// are set in view itself or in one of `views_pre_view` hooks,
// which are executed in `$view->preExecute()`.
$view->setItemsPerPage(0);
// Items_per_page query parameter can override display default
// Save original query and replace with one without items_per_page
$query_orig = clone $view->getRequest()->query;
$view->getRequest()->query->remove('items_per_page');
// Query parameters can override display default.
// Save original query and replace with one without parameters.
$query_param = &$view->getRequest()->query;
$query_param_orig = clone $query_param;
// Disable per page param.
$query_param->remove('items_per_page');
// Unset exposed filters values.
if (!empty($settings['options_show_only_used_filtered'])) {
// Unset current filter value from input to avoid only one option,
// in other way current filter value will restrict himself.
if ($query_param->has($identifier)) {
$query_param->remove($identifier);
}
}
else {
// In this case we need to skip all filled values for full result.
foreach ($query_param->keys() as $key) {
$query_param->remove($key);
}
}
// Execute modified query.
$view->execute();
// Restore items_per_page for main query
$view->getRequest()->query = $query_orig;
// Restore parameters for main query.
$view->getRequest()->query = $query_param_orig;
$element = &$form[$identifier];
if (!empty($view->result)) {
......@@ -208,22 +230,6 @@ abstract class SelectiveFilterBase {
$element['#access'] = FALSE;
}
}
else {
if (!empty($settings['options_show_only_used_filtered'])) {
$user_input = $form_state->getUserInput();
// Unset current filter value from input to avoid only one option,
// in other way current filter value will restrict himself.
if (isset($user_input[$identifier])) {
unset($user_input[$identifier]);
}
}
else {
// In this case we need to skip all filled values for full result.
$user_input = [];
}
$form_state->setUserInput($user_input);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment