예제 #1
0
 /**
  * Handle the admin notes form
  * @param  Form   $form   The form
  * @param  Player $player The player in question
  * @param  Player $me     The currently logged in player
  * @return Form   The updated form
  */
 private function handleAdminNotesForm($form, $player, $me)
 {
     $notes = $form->get('notes')->getData();
     if ($form->get('save_and_sign')->isClicked()) {
         $notes .= ' — ' . $me->getUsername() . ' on ' . TimeDate::now()->toRFC2822String();
     }
     $player->setAdminNotes($notes);
     $this->getFlashBag()->add('success', "The admin notes for {$player->getUsername()} have been updated");
     // Reset the form so that the user sees the updated admin notes
     return $this->creator->create();
 }
예제 #2
0
 public function inviteAction(Team $team, Player $player, Player $me)
 {
     if (!$me->canEdit($team)) {
         throw new ForbiddenException("You are not allowed to invite a player to that team!");
     } elseif ($team->isMember($player->getId())) {
         throw new ForbiddenException("The specified player is already a member of that team.");
     } elseif (Invitation::hasOpenInvitation($player->getId(), $team->getId())) {
         throw new ForbiddenException("This player has already been invited to join the team.");
     }
     return $this->showConfirmationForm(function () use($team, $player, $me) {
         $invite = Invitation::sendInvite($player->getId(), $me->getId(), $team->getId());
         Service::getDispatcher()->dispatch(Events::TEAM_INVITE, new TeamInviteEvent($invite));
         return new RedirectResponse($team->getUrl());
     }, "Are you sure you want to invite {$player->getEscapedUsername()} to {$team->getEscapedName()}?", "Player {$player->getUsername()} has been invited to {$team->getName()}");
 }
예제 #3
0
 /**
  * Promote a player to an admin if the configuration file specifies so
  *
  * @param Player $player The player in question
  */
 private function configPromoteAdmin(Player $player)
 {
     $adminUsername = $this->container->getParameter('bzion.miscellaneous.admin');
     if (!$adminUsername) {
         return;
     }
     if (strtolower($player->getUsername()) === strtolower($adminUsername)) {
         $player->addRole(Player::DEVELOPER);
         // Remove the username from the configuration file so that we don't
         // give admin permissions to the wrong person in case callsign
         // changes take place. This is supposed to happen only once, so we
         // don't need to worry about the performance overhead due to the
         // parsing and dumping of the YML file
         $path = ConfigHandler::getConfigurationPath();
         $config = Yaml::parse($path);
         $config['bzion']['miscellaneous']['admin'] = null;
         file_put_contents($path, Yaml::dump($config, 4));
         $this->getLogger()->notice(sprintf("User %s with BZID %s is now an administrator, as instructed by the configuration file", $adminUsername, $player->getBZID()));
     }
 }
예제 #4
0
 /**
  * Send a confirmation e-mail to a player
  * @param Player $player The receiving player
  */
 private function sendConfirmationMessage($player)
 {
     if ($player->getConfirmCode() === null) {
         // The player has no confirmation code, don't send them a message
         return;
     }
     $from = $this->container->getParameter('bzion.email.from');
     $title = $this->container->getParameter('bzion.site.name');
     if (!$from) {
         $this->getLogger()->addError('Unable to send verification e-mail message to player due to the "From:" address not being specified', array('player' => array('id' => $player->getId(), 'username' => $player->getUsername())));
         return;
     }
     $message = Swift_Message::newInstance()->setSubject($title . ' Email Confirmation')->setFrom(array($from => $title))->setTo($player->getEmailAddress())->setBody($this->render('Email/confirm.txt.twig', array('player' => $player)))->addPart($this->render('Email/confirm.html.twig', array('player' => $player)), 'text/html');
     $this->container->get('mailer')->send($message);
     $this->getFlashBag()->add('info', 'Please check your inbox in order to confirm your email address.');
 }
예제 #5
0
 public function assignLeaderAction(Team $team, Player $me, Player $player)
 {
     $this->assertCanEdit($me, $team, "You are not allowed to change the leader of this team.");
     if (!$team->isMember($player->getId())) {
         throw new ForbiddenException("The specified player is not a member of {$team->getName()}");
     } elseif ($team->getLeader()->getId() == $player->getId()) {
         throw new ForbiddenException("{$player->getUsername()} is already the leader of {$team->getName()}");
     }
     return $this->showConfirmationForm(function () use($player, $team) {
         $event = new Event\TeamLeaderChangeEvent($team, $player, $team->getLeader());
         $team->setLeader($player->getId());
         Service::getDispatcher()->dispatch(Events::TEAM_LEADER_CHANGE, $event);
         return new RedirectResponse($team->getUrl());
     }, "Are you sure you want to transfer the leadership of the team to <strong>{$player->getEscapedUsername()}</strong>?", "{$player->getUsername()} is now leading {$team->getName()}", "Appoint leadership");
 }