You are here

public function SocialQuickJoinController::quickJoin in Open Social 8.6

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  2. 8.4 modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  3. 8.5 modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  4. 8.7 modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  5. 8.8 modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  6. 10.3.x modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  7. 10.0.x modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  8. 10.1.x modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()
  9. 10.2.x modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php \Drupal\social_group_quickjoin\Controller\SocialQuickJoinController::quickJoin()

Function that add the current user to a group without confirmation step.

Parameters

\Drupal\group\Entity\GroupInterface $group: The group you want to join.

Return value

\Symfony\Component\HttpFoundation\RedirectResponse Where to redirect to.

Throws

\Drupal\Core\Entity\EntityMalformedException

1 string reference to 'SocialQuickJoinController::quickJoin'
social_group_quickjoin.routing.yml in modules/social_features/social_group/modules/social_group_quickjoin/social_group_quickjoin.routing.yml
modules/social_features/social_group/modules/social_group_quickjoin/social_group_quickjoin.routing.yml

File

modules/social_features/social_group/modules/social_group_quickjoin/src/Controller/SocialQuickJoinController.php, line 73

Class

SocialQuickJoinController
Class SocialQuickJoinController.

Namespace

Drupal\social_group_quickjoin\Controller

Code

public function quickJoin(GroupInterface $group) {

  // No group, so go home.
  if (!$group instanceof GroupInterface) {
    return new RedirectResponse(Url::fromRoute('<front>')
      ->toString());
  }

  // It's a group, so determine the path for redirection.
  $groupRedirect = $group
    ->toUrl()
    ->toString();

  // Check if the settings are active.
  $active = $this->configFactory
    ->get('social_group_quickjoin.settings')
    ->get('social_group_quickjoin_enabled');

  // Not active, so back to group canonical.
  if (!$active) {

    // Redirect to the group.
    return new RedirectResponse($groupRedirect);
  }

  // Already a member.
  if ($group
    ->getMember($this
    ->currentUser())) {

    // Set a message.
    $this
      ->messenger()
      ->addMessage($this
      ->t("You're already a member of this group."));

    // Redirect to the group.
    return new RedirectResponse($groupRedirect);
  }

  // Fetch the user from the accountproxy.
  $account = User::load($this
    ->currentUser()
    ->id());
  if ($account instanceof UserInterface) {

    // Extra exceptions based on groupmembership rules.
    if ($group
      ->hasPermission('join group', $account) === FALSE) {
      $this
        ->messenger()
        ->addMessage($this
        ->t("You don't have access to join this group."));
      return new RedirectResponse($groupRedirect);
    }

    // Add this person to the group.
    $group
      ->addMember($account);

    // Invalidate cache of the group, so we see newest member block updated.
    $this
      ->cache()
      ->invalidate('group:' . $group
      ->id());

    // Set message and redirect.
    $this
      ->messenger()
      ->addMessage($this
      ->t("You've been added to this group."));
    return new RedirectResponse($groupRedirect);
  }

  // Weird behaviour if here, so just go to group home.
  return new RedirectResponse($groupRedirect);
}