public function acceptAction(Invitation $invitation, Player $me) { if (!$me->isTeamless()) { throw new ForbiddenException("You can't join a new team until you leave your current one."); } if ($invitation->getInvitedPlayer()->getId() != $me->getId()) { throw new ForbiddenException("This invitation isn't for you!"); } if ($invitation->getExpiration()->lt(TimeDate::now())) { throw new ForbiddenException("This invitation has expired"); } if ($invitation->getTeam()->isDeleted()) { $invitation->updateExpiration(); throw new ForbiddenException("This invitation is for a team which has been deleted."); } $inviter = $invitation->getSentBy()->getEscapedUsername(); $team = $invitation->getTeam(); return $this->showConfirmationForm(function () use($invitation, $team, $me) { $team->addMember($me->getId()); $invitation->updateExpiration(); Service::getDispatcher()->dispatch(Events::TEAM_JOIN, new TeamJoinEvent($team, $me)); return new RedirectResponse($team->getUrl()); }, "Are you sure you want to accept the invitation from {$inviter} to join {$team->getEscapedName()}?", "You are now a member of {$team->getName()}"); }