Beispiel #1
0
 public function joinAction(Team $team, Player $me)
 {
     $this->requireLogin();
     if (!$me->isTeamless()) {
         throw new ForbiddenException("You are already a member of a team");
     } elseif ($team->getStatus() != 'open') {
         throw new ForbiddenException("This team is not accepting new members without an invitation");
     }
     return $this->showConfirmationForm(function () use($team, $me) {
         $team->addMember($me->getId());
         Service::getDispatcher()->dispatch(Events::TEAM_JOIN, new Event\TeamJoinEvent($team, $me));
         return new RedirectResponse($team->getUrl());
     }, "Are you sure you want to join {$team->getEscapedName()}?", "You are now a member of {$team->getName()}");
 }
Beispiel #2
0
 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");
     }
     $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()}");
 }
Beispiel #3
0
 /**
  * Adds a new member to the team
  *
  * @param int $id The id of the player to add to the team
  *
  * @return boolean|null True if both the player was added to the team AND the team member count was incremented
  */
 public function addMember($id)
 {
     $player = new Player($id);
     if (!$player->isTeamless()) {
         throw new Exception("The player already belongs in a team");
     }
     $player->setTeam($this->getId());
     $this->update('members', ++$this->members, "i");
 }
 /**
  * Queries the database to get the team which a group of players belong to
  *
  * @param  int[] $players The IDs of players
  * @return Team  The team
  */
 private function getTeam($players)
 {
     $team = null;
     foreach ($players as $id) {
         $player = new Player($id);
         if ($player->isTeamless()) {
             return Team::invalid();
         } elseif ($team == null) {
             $team = $player->getTeam();
         } elseif ($team->getId() != $player->getTeam()->getId()) {
             // This player is on a different team from the previous player!
             return Team::invalid();
         }
     }
     return $team;
 }