Drupal Version
10.3.5
Domain module version
2.0.0-beta2
Expected Behaviour
When setting up a views filter with DomainAccessCurrentAllFilter
value 0
, the generated query should show only entities which are NOT assigned to the current domain.
Actual Behaviour
The generated SQL query applies the same SQL as when the value is set to 1
.
Steps to reproduce
Set up a view with Available on current domain: YES
.
Generated view SQL:
SELECT DISTINCT "node_field_data"."nid" AS "nid"
FROM
{node_field_data} "node_field_data"
LEFT JOIN {node__field_domain_access} "node__field_domain_access" ON node_field_data.nid = node__field_domain_access.entity_id AND (node__field_domain_access.deleted = '0' AND node__field_domain_access.langcode = node_field_data.langcode)
LEFT JOIN {node__field_domain_all_affiliates} "node__field_domain_all_affiliates" ON node_field_data.nid = node__field_domain_all_affiliates.entity_id AND (node__field_domain_all_affiliates.deleted = '0' AND node__field_domain_all_affiliates.langcode = node_field_data.langcode)
WHERE ((node__field_domain_access.field_domain_access_target_id = 'mydomain' OR node__field_domain_all_affiliates.field_domain_all_affiliates_value = 1))
LIMIT 11 OFFSET 0
Set up a view with Available on current domain: NO
.
Generated view SQL:
SELECT DISTINCT "node_field_data"."nid" AS "nid"
FROM
{node_field_data} "node_field_data"
LEFT JOIN {node__field_domain_access} "node__field_domain_access" ON node_field_data.nid = node__field_domain_access.entity_id AND (node__field_domain_access.deleted = '0' AND node__field_domain_access.langcode = node_field_data.langcode)
LEFT JOIN {node__field_domain_all_affiliates} "node__field_domain_all_affiliates" ON node_field_data.nid = node__field_domain_all_affiliates.entity_id AND (node__field_domain_all_affiliates.deleted = '0' AND node__field_domain_all_affiliates.langcode = node_field_data.langcode)
WHERE ((node__field_domain_access.field_domain_access_target_id = 'mydomain' OR node__field_domain_all_affiliates.field_domain_all_affiliates_value = 1))
LIMIT 11 OFFSET 0
Example view:
uuid: d2d8bd7e-50df-4ccb-b09b-7c4516844636
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.full
module:
- domain_access
- node
- user
id: test_view
label: 'Test View'
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
title: 'Available on domain'
fields: { }
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next: ››
previous: ‹‹
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: perm
options:
perm: 'access content'
cache:
type: tag
options: { }
empty: { }
sorts: { }
arguments: { }
filters:
current_all:
id: current_all
table: node__field_domain_access
field: current_all
relationship: none
group_type: group
admin_label: ''
plugin_id: domain_access_current_all_filter
operator: '='
value: '1'
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
uses_fields: false
row:
type: 'entity:node'
options:
relationship: none
view_mode: full
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_interface'
- url.query_args
- url.site
- 'user.node_grants:view'
- user.permissions
tags: { }
available:
id: available
display_title: Available
display_plugin: block
position: 1
display_options:
display_description: ''
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_interface'
- url.query_args
- url.site
- 'user.node_grants:view'
- user.permissions
tags: { }
not_available:
id: not_available
display_title: 'Not available'
display_plugin: block
position: 2
display_options:
title: 'NOT Available on domain'
filters:
current_all:
id: current_all
table: node__field_domain_access
field: current_all
relationship: none
group_type: group
admin_label: ''
plugin_id: domain_access_current_all_filter
operator: '='
value: '0'
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
use_operator: false
operator: ''
operator_limit_selection: false
operator_list: { }
identifier: ''
required: false
remember: false
multiple: false
remember_roles:
authenticated: authenticated
is_grouped: false
group_info:
label: ''
description: ''
identifier: ''
optional: true
widget: select
multiple: false
remember: false
default_group: All
default_group_multiple: { }
group_items: { }
filter_groups:
operator: AND
groups:
1: AND
defaults:
title: false
filters: false
filter_groups: false
display_description: ''
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_interface'
- url.query_args
- url.site
- 'user.node_grants:view'
- user.permissions
tags: { }
The current operator code checks is_null
on the value, so clearly this is the part which is wrong:
if (is_null($this->value)) {
$where = "(($real_field <> '$current_domain_id' OR $real_field IS NULL) AND ($all_field = 0 OR $all_field IS NULL))";
if ($current_domain->isDefault()) {
$where = "($real_field <> '$current_domain_id' AND ($all_field = 0 OR $all_field IS NULL))";
}
}
else {
$where = "($real_field = '$current_domain_id' OR $all_field = 1)";
if ($current_domain->isDefault()) {
$where = "(($real_field = '$current_domain_id' OR $real_field IS NULL) OR $all_field = 1)";
}
}