protected function ActivityFilterPersonalisedHomepage::getAvailableNodeIds in Open Social 10.3.x
Same name and namespace in other branches
- 10.1.x modules/custom/activity_viewer/src/Plugin/views/filter/ActivityFilterPersonalisedHomepage.php \Drupal\activity_viewer\Plugin\views\filter\ActivityFilterPersonalisedHomepage::getAvailableNodeIds()
- 10.2.x modules/custom/activity_viewer/src/Plugin/views/filter/ActivityFilterPersonalisedHomepage.php \Drupal\activity_viewer\Plugin\views\filter\ActivityFilterPersonalisedHomepage::getAvailableNodeIds()
Gets list of node IDs to which user has access.
Parameters
\Drupal\Core\Session\AccountInterface $user: The current user.
array $memberships: List of user memberships.
Return value
array List of node IDs.
1 call to ActivityFilterPersonalisedHomepage::getAvailableNodeIds()
- ActivityFilterPersonalisedHomepage::query in modules/
custom/ activity_viewer/ src/ Plugin/ views/ filter/ ActivityFilterPersonalisedHomepage.php - Filters out activity items the user is not allowed to see.
File
- modules/
custom/ activity_viewer/ src/ Plugin/ views/ filter/ ActivityFilterPersonalisedHomepage.php, line 241
Class
- ActivityFilterPersonalisedHomepage
- Filters activity for a personalised homepage.
Namespace
Drupal\activity_viewer\Plugin\views\filterCode
protected function getAvailableNodeIds(AccountInterface $user, array $memberships) {
$query = $this->connection
->select('node_field_data', 'nfd');
$query
->fields('nfd', [
'nid',
]);
$query
->leftJoin('node__field_content_visibility', 'nfcv', 'nfcv.entity_id = nfd.nid');
$query
->leftJoin('group_content_field_data', 'gcfd', 'gcfd.entity_id = nfd.nid');
$or = $query
->orConditionGroup();
if ($user
->isAuthenticated()) {
// Nodes community visibility.
$community_access = $or
->andConditionGroup()
->condition('nfcv.field_content_visibility_value', [
'community',
'public',
], 'IN')
->isNull('gcfd.entity_id');
$or
->condition($community_access);
// Node visibility by group.
if (count($memberships) > 0) {
$access_by_group = $or
->andConditionGroup();
$access_by_group
->condition('nfcv.field_content_visibility_value', [
'group',
'community',
'public',
], 'IN');
$access_by_group
->condition('gcfd.type', '%-group_node-%', 'LIKE');
$access_by_group
->condition('gcfd.gid', $memberships, 'IN');
$or
->condition($access_by_group);
}
}
else {
// Public nodes without group.
$anonymous_access = $or
->andConditionGroup()
->condition('nfcv.field_content_visibility_value', 'public')
->isNull('gcfd.entity_id');
$or
->condition($anonymous_access);
}
$or
->isNull('nfcv.entity_id');
$query
->condition($or);
// Alter query for custom conditions.
$this->moduleHandler
->alter('activity_viewer_available_nodes_query', $query, $user);
// Check node status and user access to it.
$node_status = [
'1',
];
if ($user
->hasPermission('view any unpublished content')) {
$node_status[] = '0';
}
$query
->condition('nfd.status', $node_status, 'IN');
$nids = $query
->execute()
->fetchCol();
return array_unique($nids);
}