public function teamLeaveAction(Player $me, Conversation $conversation) { $team = $me->getTeam(); if (!$me->canEdit($team)) { throw new ForbiddenException("You are not allowed to remove your team from this conversation."); } elseif (!$conversation->isMember($team)) { throw new ForbiddenException("That team is not participating in this conversation."); } return $this->showConfirmationForm(function () use($conversation, $team) { $conversation->removeMember($team); $event = new ConversationAbandonEvent($conversation, $team); Service::getDispatcher()->dispatch(Events::CONVERSATION_ABANDON, $event); return new RedirectResponse($conversation->getURL()); }, "Are you sure you want to remove {$team->getEscapedName()} from this conversation?", "Your team is no longer participating in that conversation.", "Remove team"); }
private function getPlayer($wsId, Team $team = null) { if (array_key_exists($wsId, $this->players)) { $player = $this->players[$wsId]; } else { $player = $this->em->getRepository('AppBundle:Player')->findOneByWsId($wsId); } if ($player == null) { try { $data = $this->downloader->getPlayerData($wsId); } catch (\Exception $e) { throw $e; } $player = new Player(); $player->setFirstName($data->firstName); $player->setLastName($data->lastName); $player->setKnownName($data->knownName); $player->setAge($data->age); $player->setWsId($data->wsId); } if ($team !== null && $player->getTeam() !== $team) { $ret = $team; try { $teamId = $this->downloader->getActiveTeam($wsId); $ret = $this->getTeam($teamId); $player->setTeam($ret); } catch (\Exception $e) { } finally { $player->setTeam($ret); } } $this->players[$wsId] = $player; $this->em->persist($player); return $player; }
/** * Check if a player is part of this team * * @param int $playerID The player to check * * @return bool True if the player belongs to this team */ public function isMember($playerID) { $player = new Player($playerID); return $player->getTeam()->getId() == $this->getId(); }
/** * 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; }