You are here

protected function FollowTaxonomyActivityContext::haveAccessToNode in Open Social 10.3.x

Same name and namespace in other branches
  1. 10.2.x modules/social_features/social_follow_taxonomy/src/Plugin/ActivityContext/FollowTaxonomyActivityContext.php \Drupal\social_follow_taxonomy\Plugin\ActivityContext\FollowTaxonomyActivityContext::haveAccessToNode()

Checks if recipient have access to view related node.

Parameters

\Drupal\user\UserInterface $recipient: The user who receives the message.

string|int $nid: Node ID.

Return value

bool Returns TRUE if have access.

2 calls to FollowTaxonomyActivityContext::haveAccessToNode()
FollowTagActivityContext::getRecipientsWhoFollowTaxonomy in modules/social_features/social_follow_taxonomy/modules/social_follow_tag/src/Plugin/ActivityContext/FollowTagActivityContext.php
Returns recipients from followed taxonomies.
FollowTaxonomyActivityContext::getRecipientsWhoFollowTaxonomy in modules/social_features/social_follow_taxonomy/src/Plugin/ActivityContext/FollowTaxonomyActivityContext.php
Returns recipients from followed taxonomies.

File

modules/social_features/social_follow_taxonomy/src/Plugin/ActivityContext/FollowTaxonomyActivityContext.php, line 251

Class

FollowTaxonomyActivityContext
Provides a 'FollowTaxonomyActivityContext' activity context plugin.

Namespace

Drupal\social_follow_taxonomy\Plugin\ActivityContext

Code

protected function haveAccessToNode(UserInterface $recipient, $nid) {
  $query = $this->connection
    ->select('node_field_data', 'nfd');
  $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();
  $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.
  $memberships = $this->groupHelperService
    ->getAllGroupsForUser($recipient
    ->id());
  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);
  }
  $or
    ->isNull('nfcv.entity_id');
  $query
    ->condition($or);
  $query
    ->condition('nfd.nid', $nid);
  $query
    ->groupBy('nfd.nid');
  $query
    ->addExpression('COUNT(*)');
  $nids = $query
    ->execute()
    ->fetchField();
  return !empty($nids);
}