You are here

function social_group_invite_preprocess_group in Open Social 8.9

Same name and namespace in other branches
  1. 10.3.x modules/social_features/social_group/modules/social_group_invite/social_group_invite.module \social_group_invite_preprocess_group()
  2. 10.0.x modules/social_features/social_group/modules/social_group_invite/social_group_invite.module \social_group_invite_preprocess_group()
  3. 10.1.x modules/social_features/social_group/modules/social_group_invite/social_group_invite.module \social_group_invite_preprocess_group()
  4. 10.2.x modules/social_features/social_group/modules/social_group_invite/social_group_invite.module \social_group_invite_preprocess_group()

Implements hook_preprocess_group().

File

modules/social_features/social_group/modules/social_group_invite/social_group_invite.module, line 429
The Social Invite group module.

Code

function social_group_invite_preprocess_group(&$variables) {

  /** @var \Drupal\group\Entity\GroupInterface $group */
  $group = $variables['group'];
  $group_type = $group
    ->getGroupType();
  $variables['user_is_invited'] = FALSE;

  // Only for groups that have invites enabled.
  if (!$group_type
    ->hasContentPlugin('group_invitation')) {
    return;
  }

  // Only for LU.
  $account = \Drupal::currentUser();
  if ($account
    ->isAnonymous()) {
    return;
  }

  // Check if the user (entity_id) has a pending invite for the group.
  $properties = [
    'entity_id' => $account
      ->id(),
    'gid' => $group
      ->id(),
    'invitation_status' => GroupInvitation::INVITATION_PENDING,
  ];

  /** @var \Drupal\ginvite\GroupInvitationLoaderInterface $loader */
  $loader = \Drupal::service('ginvite.invitation_loader');
  $invitations = $loader
    ->loadByProperties($properties);

  // We have pending invites, let's build a button to accept or decline one.
  if ($invitations > 0) {

    // Build routes.
    $invitation = reset($invitations);
    if ($invitation instanceof GroupInvitationWrapper) {

      // Lets grab the group content so we can build the URL.
      $group_content = $invitation
        ->getGroupContent();
      if ($group_content instanceof GroupContent) {
        $variables['user_is_invited'] = TRUE;

        // It will become two links with a dropdown button.
        $variables['group_invite_accept_operations_url'] = Url::fromRoute('ginvite.invitation.accept', [
          'group_content' => $group_content
            ->id(),
        ]);
        $variables['group_invite_decline_operations_url'] = Url::fromRoute('ginvite.invitation.decline', [
          'group_content' => $group_content
            ->id(),
        ]);
        $variables['#cache']['tags'][] = 'group_content_list:entity:' . $account
          ->id();
        $variables['#cache']['tags'][] = 'group_content_list:plugin:group_invitation:entity:' . $account
          ->id();
        $variables['#cache']['contexts'][] = 'user';
      }
    }
  }
}