protected function ActivityFilterPersonalisedHomepage::getAvailablePostIds in Open Social 10.1.x
Same name and namespace in other branches
- 10.3.x modules/custom/activity_viewer/src/Plugin/views/filter/ActivityFilterPersonalisedHomepage.php \Drupal\activity_viewer\Plugin\views\filter\ActivityFilterPersonalisedHomepage::getAvailablePostIds()
- 10.2.x modules/custom/activity_viewer/src/Plugin/views/filter/ActivityFilterPersonalisedHomepage.php \Drupal\activity_viewer\Plugin\views\filter\ActivityFilterPersonalisedHomepage::getAvailablePostIds()
Gets list of post 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 post IDs.
1 call to ActivityFilterPersonalisedHomepage::getAvailablePostIds()
- 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 276
Class
- ActivityFilterPersonalisedHomepage
- Filters activity for a personalised homepage.
Namespace
Drupal\activity_viewer\Plugin\views\filterCode
protected function getAvailablePostIds(AccountInterface $user, array $memberships) {
$query = $this->connection
->select('post_field_data', 'pfd');
$query
->fields('pfd', [
'id',
]);
$query
->leftJoin('post__field_visibility', 'pfv', 'pfv.entity_id = pfd.id');
$query
->leftJoin('post__field_recipient_group', 'pfrg', 'pfrg.entity_id = pfd.id');
$or = $query
->orConditionGroup();
if ($user
->isAuthenticated()) {
// Posts for authenticated users if has permission.
if ($user
->hasPermission('view community posts')) {
// Posts community visibility.
$community_access = $or
->andConditionGroup()
->condition('pfv.field_visibility_value', [
'0',
'1',
'2',
], 'IN')
->isNull('pfrg.entity_id');
$or
->condition($community_access);
}
// Posts related to the group where the user is a member.
if (count($memberships) > 0) {
$access_by_group = $or
->andConditionGroup();
$access_by_group
->condition('pfv.field_visibility_value', [
'0',
'1',
'2',
'3',
], 'IN');
$access_by_group
->condition('pfrg.field_recipient_group_target_id', $memberships, 'IN');
$or
->condition($access_by_group);
}
}
else {
// Public posts or do not have visibility settings.
if ($user
->hasPermission('view public posts')) {
$anonymous_access = $or
->andConditionGroup()
->condition('pfv.field_visibility_value', '1')
->isNull('pfrg.entity_id');
$or
->condition($anonymous_access);
}
}
$or
->isNull('pfv.entity_id');
$query
->condition($or);
// Alter query for custom conditions.
$this->moduleHandler
->alter('activity_viewer_available_posts_query', $query, $user);
// Check posts status and user access to it.
$post_status = [
'1',
];
if ($user
->hasPermission('view unpublished post entities')) {
$post_status[] = '0';
}
$query
->condition('pfd.status', $post_status, 'IN');
$pids = $query
->execute()
->fetchCol();
return array_unique($pids);
}