You are here

protected function ActivityFilterPersonalisedHomepage::getAvailableNodeIds in Open Social 10.3.x

Same name and namespace in other branches
  1. 10.1.x modules/custom/activity_viewer/src/Plugin/views/filter/ActivityFilterPersonalisedHomepage.php \Drupal\activity_viewer\Plugin\views\filter\ActivityFilterPersonalisedHomepage::getAvailableNodeIds()
  2. 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\filter

Code

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);
}