diff --git a/ginvite.module b/ginvite.module index 922df262d6462be2360dd1233e1fc1551f2cb37d..057807939d4e67e4d87a6098a3e393882c53438c 100644 --- a/ginvite.module +++ b/ginvite.module @@ -6,9 +6,12 @@ */ use Drupal\Component\Utility\Html; +use Drupal\Core\Access\AccessResult; +use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\BubbleableMetadata; use Drupal\Core\Routing\RouteMatchInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; use Drupal\ginvite\Event\UserLoginWithInvitationEvent; use Drupal\ginvite\Event\UserRegisteredFromInvitationEvent; @@ -464,3 +467,23 @@ function ginvite_user_login(UserInterface $user) { $event_dispatcher->dispatch($event, UserLoginWithInvitationEvent::EVENT_NAME); } } + +/** + * Implements hook_ENTITY_TYPE_access(). + */ +function ginvite_group_access(EntityInterface $entity, $operation, AccountInterface $account) { + if ($operation == 'view' || $operation == 'view label') { + $properties = [ + 'entity_id' => $account->id(), + 'gid' => $entity->id(), + 'invitation_status' => GroupInvitation::INVITATION_PENDING, + ]; + + $invitations = \Drupal::service('ginvite.invitation_loader')->loadByProperties($properties); + if (!empty($invitations)) { + return AccessResult::allowed(); + } + } + + return AccessResult::neutral(); +}