public function FlexibleGroupNodeAccess::query in Open Social 8.9
Same name and namespace in other branches
- 8.7 modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
- 8.8 modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
- 10.3.x modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
- 10.0.x modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
- 10.1.x modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
- 10.2.x modules/social_features/social_group/modules/social_group_flexible_group/src/Plugin/views/filter/FlexibleGroupNodeAccess.php \Drupal\social_group_flexible_group\Plugin\views\filter\FlexibleGroupNodeAccess::query()
See _node_access_where_sql() for a non-views query based implementation.
Overrides FilterPluginBase::query
File
- modules/
social_features/ social_group/ modules/ social_group_flexible_group/ src/ Plugin/ views/ filter/ FlexibleGroupNodeAccess.php, line 33
Class
- FlexibleGroupNodeAccess
- Filter by node access based on Group membership.
Namespace
Drupal\social_group_flexible_group\Plugin\views\filterCode
public function query() {
$account = $this->view
->getUser();
$group_access = NULL;
if (!$account
->hasPermission('administer nodes') && !$account
->hasPermission('bypass node access')) {
// Ensure we check for group content.
// Join node table(s).
$configuration = [
'left_table' => 'node_field_data',
'left_field' => 'nid',
'table' => 'group_content_field_data',
'field' => 'entity_id',
'operator' => '=',
];
$join = Views::pluginManager('join')
->createInstance('standard', $configuration);
$this->query
->addRelationship('membership', $join, 'node_field_data');
// Add extra condition for Group Membership
// related check in Flexible groups.
$group_memberships = \Drupal::service('social_group.helper_service')
->getAllGroupsForUser($account
->id());
if (!empty($group_memberships) && !$account
->isAnonymous()) {
// OR content is GROUP.
$group_access = new Condition('OR');
$group_access
->condition('membership.gid', $group_memberships, 'IN');
}
// Also check for Open / Public within groups.
$configuration = [
'left_table' => 'node_field_data',
'left_field' => 'nid',
'table' => 'node__field_content_visibility',
'field' => 'entity_id',
'operator' => '=',
];
$join = Views::pluginManager('join')
->createInstance('standard', $configuration);
$this->query
->addRelationship('field_visibility_relationship', $join, 'node__field_content_visibility');
$group_visible = new Condition('OR');
$group_visible
->condition('field_content_visibility_value', 'public');
if (!$account
->isAnonymous()) {
$group_visible
->condition('field_content_visibility_value', 'community');
}
if ($group_access !== NULL) {
$group_visible
->condition($group_access);
}
// And we should check for open / public.
$this->query
->addWhere('visibility', $group_visible);
}
}