Skip to content
Snippets Groups Projects

Issue #3488988 by mably, pietermouton: Support numeric between operator

@@ -97,7 +97,7 @@ class ViewsFiltersSummary extends Result {
$plugin_id,
$plugin_definition,
) {
return new static(
return new self(
$configuration,
$plugin_id,
$plugin_definition,
@@ -330,7 +330,7 @@ class ViewsFiltersSummary extends Result {
else {
$summary[] = $this->buildFilterSummaryItem(
$id, $label, $value
);
);
}
}
@@ -563,6 +563,36 @@ class ViewsFiltersSummary extends Result {
return !empty($value) || is_numeric($value);
}
/**
* Get the filter operator prefix for display.
*
* @param \Drupal\views\Plugin\views\filter\FilterPluginBase $filter
* The filter object.
* @param string $value
* The filter value.
*
* @return string
* The operator prefix.
*/
protected function getFilterValueLabel(FilterPluginBase $filter, string $value): string {
$label = match ($filter->getPluginId()) {
'boolean' => $filter->valueOptions[$value] ?? $value,
default => $value,
};
return match ($filter->operator) {
'!=' => $this->t('Not @label', ['@label' => $label]),
'<' => $this->t('Less than @label', ['@label' => $label]),
'<=' => $this->t('Less than or equal to @label', ['@label' => $label]),
'>' => $this->t('Greater than @label', ['@label' => $label]),
'>=' => $this->t('Greater than or equal to @label', ['@label' => $label]),
'starts' => $this->t('Starts with @label', ['@label' => $label]),
'contains' => $this->t('Contains @label', ['@label' => $label]),
'not contains' => $this->t('Does not contain @label', ['@label' => $label]),
'ends' => $this->t('Ends with @label', ['@label' => $label]),
default => $label,
};
}
/**
* Build the filter definition.
*
@@ -580,11 +610,11 @@ class ViewsFiltersSummary extends Result {
$original_value = $filter->value['value'] ?? $filter->value;
$processed_value = NULL;
if (is_array($original_value)) {
switch ($filter->getPluginId()) {
case 'search_api_term':
case 'taxonomy_index_tid':
case 'taxonomy_index_tid_depth':
switch ($filter->getPluginId()) {
case 'search_api_term':
case 'taxonomy_index_tid':
case 'taxonomy_index_tid_depth':
if (is_array($original_value)) {
$values = [];
$storage = $this->entityTypeManager->getStorage('taxonomy_term');
foreach ($original_value as $index => $term) {
@@ -597,9 +627,11 @@ class ViewsFiltersSummary extends Result {
}
}
$processed_value = $values;
break;
}
break;
case 'bundle':
case 'bundle':
if (is_array($original_value)) {
if ($entity_type = $filter->getEntityType()) {
$values = [];
$types = $this->entityTypeBundleInfo->getBundleInfo($entity_type);
@@ -615,9 +647,11 @@ class ViewsFiltersSummary extends Result {
}
$processed_value = $values;
}
break;
}
break;
case 'user_name':
case 'user_name':
if (is_array($original_value)) {
$values = [];
foreach ($original_value as $index => $value) {
if (!$this->isValidArrayValue($filter, $index, $value)) {
@@ -633,9 +667,11 @@ class ViewsFiltersSummary extends Result {
}
}
$processed_value = $values;
break;
}
break;
case 'list_field':
case 'list_field':
if (is_array($original_value)) {
if (method_exists($filter, 'getValueOptions')) {
$values = [];
$value_options = $filter->getValueOptions();
@@ -654,73 +690,117 @@ class ViewsFiltersSummary extends Result {
}
$processed_value = $values;
}
break;
}
break;
default:
$values = [];
if ($filter->options['is_grouped']) {
$filter_group_items = $filter->options['group_info']['group_items'];
foreach ($original_value as $index => $value) {
if (!$this->isValidArrayValue($filter, $index, $value)) {
continue;
}
foreach ($filter_group_items as $group_item) {
if ($value == $group_item['value']) {
default:
if ($filter->options['is_grouped']) {
if ($filter->operator === 'between' || $filter->operator === 'not between') {
$min_value = $filter->value['min'] ?? NULL;
$max_value = $filter->value['max'] ?? NULL;
if ($this->isValidValue($min_value) && $this->isValidValue($max_value)) {
$filter_group_items = $filter->options['group_info']['group_items'];
foreach ($filter_group_items as $group_index => $group_item) {
$item_operator = $group_item['operator'];
$item_min_value = $group_item['value']['min'] ?? NULL;
$item_max_value = $group_item['value']['max'] ?? NULL;
if ($filter->operator === $item_operator
&& $min_value === $item_min_value
&& $max_value === $item_max_value) {
$values[] = [
'id' => $index,
'raw' => $group_item['value'],
'value' => $group_item['title'],
'id' => 0,
'raw' => $group_index,
'value' => $min_value . '-' . $max_value,
];
$processed_value = $values;
break;
}
}
}
}
else {
foreach ($original_value as $index => $value) {
if (!$this->isValidArrayValue($filter, $index, $value)) {
continue;
if (is_array($original_value)) {
$values = [];
$filter_group_items = $filter->options['group_info']['group_items'];
foreach ($original_value as $index => $value) {
if (!$this->isValidArrayValue($filter, $index, $value)) {
continue;
}
foreach ($filter_group_items as $group_item) {
if ($filter->operator === $group_item['operator']
&& $value == $group_item['value']) {
$values[] = [
'id' => $index,
'raw' => $group_item['value'],
'value' => $group_item['title'],
];
break;
}
}
}
$processed_value = $values;
}
else {
$filter_group_items = $filter->options['group_info']['group_items'];
foreach ($filter_group_items as $group_index => $group_item) {
$group_item_value = $group_item['value']['value'] ?? $group_item['value'];
if ($filter->operator === $group_item['operator']
&& $original_value == $group_item_value) {
$values[] = [
'id' => 0,
'raw' => $group_index,
'value' => $group_item['title'],
];
$processed_value = $values;
break;
}
}
}
}
}
else {
if ($filter->operator === 'between' || $filter->operator === 'not between') {
$min_value = $filter->value['min'] ?? NULL;
$max_value = $filter->value['max'] ?? NULL;
if ($this->isValidValue($min_value) && $this->isValidValue($max_value)) {
$values[] = [
'id' => $index,
'raw' => (string) $value,
'value' => (string) $value,
'id' => 0,
'raw' => 'min|max',
'value' => $min_value . '-' . $max_value,
];
$processed_value = $values;
}
}
$processed_value = $values;
break;
}
}
else {
switch ($filter->getPluginId()) {
case 'todo':
default:
if ($filter->options['is_grouped']) {
$filter_group_items = $filter->options['group_info']['group_items'];
foreach ($filter_group_items as $group_item) {
if ($original_value == $group_item['value']) {
else {
if (is_array($original_value)) {
$values = [];
foreach ($original_value as $index => $value) {
if (!$this->isValidArrayValue($filter, $index, $value)) {
continue;
}
$values[] = [
'id' => $index,
'raw' => (string) $value,
'value' => (string) $value,
];
}
$processed_value = $values;
}
else {
if ($this->isValidValue($original_value)) {
$value = (string) $original_value;
$value_label = $this->getFilterValueLabel($filter, $value);
$values[] = [
'id' => 0,
'raw' => $group_item['value'],
'value' => $group_item['title'],
'raw' => $value,
'value' => $value_label,
];
$processed_value = $values;
break;
}
}
}
else {
if ($this->isValidValue($original_value)) {
$values[] = [
'id' => 0,
'raw' => (string) $original_value,
'value' => (string) $original_value,
];
$processed_value = $values;
}
}
}
}
break;
}
$info = [
Loading