public static function add()
 {
     Controller::requirePermissions(["AdminAccessDashboard", "AdminAllLeagues"]);
     Controller::requireFields("post", ["name"], "/acp/league");
     LeagueModel::add($_POST["name"], $_POST["manager"]);
     Controller::addAlert(new Alert("success", "League added successfully"));
     Controller::redirect("/acp/league");
 }
 public static function add()
 {
     Controller::requirePermissions(["AdminAccessDashboard", "AdminUserGroups"]);
     Controller::requireFields("post", ["name"], "/acp/group");
     $id = UserGroupModel::add($_POST["name"]);
     Controller::addAlert(new Alert("success", "User group added successfully, you can now grant permissions to it below"));
     Controller::redirect("/acp/group/manage?id=" . $id);
 }
 public static function delete()
 {
     Controller::requireFields("get", ["id"], "/acp/team");
     Controller::requirePermissions(["AdminAccessDashboard", "AdminTeams", "AdminPlayers", "PerformDeletionOperations"]);
     $team = current(TeamModel::get($_GET["id"]));
     $team->delete();
     Controller::addAlert(new Alert("success", "Team deleted successfully"));
     Controller::redirect("/acp/team");
 }
 public static function add()
 {
     Controller::requirePermissions(["AdminAccessDashboard", "AdminUsers"]);
     Controller::requireFields("post", ["email", "password", "full-name", "phone-number", "group", "organization"], "/acp/user");
     if (count(UserModel::get(null, $_POST["email"])) > 0) {
         Controller::addAlert(new Alert("danger", "Email is already registered, please use a different one and try again."));
         Controller::redirect("/acp/user");
     }
     try {
         UserModel::add($_POST["email"], $_POST["full-name"], $_POST["phone-number"], $_POST["password"], $_POST["group"], $_POST["organization"]);
     } catch (EmailAddressAlreadyRegisteredException $e) {
         Controller::addAlert(new Alert("danger", "Email is already registered, please use a different one and try again."));
         Controller::redirect("/acp/user");
     }
     Controller::addAlert(new Alert("success", "User added successfully"));
     Controller::redirect("/acp/user");
 }
 public static function edit()
 {
     Controller::requirePermissions(["AdminAccessDashboard", "AdminOrganizations"]);
     if (empty($_POST)) {
         View::load("acp/organization_edit.twig", ["object" => current(OrganizationModel::get($_GET["id"]))]);
     } else {
         Controller::requireFields("post", ["name"], "/acp/organization");
         try {
             OrganizationModel::update($_POST["id"], $_POST["name"]);
             Controller::addAlert(new Alert("success", "Organization updated successfully"));
             Controller::redirect("/acp/organization");
         } catch (DuplicateException $e) {
             Controller::addAlert(new Alert("danger", "Organization name is already used, please choose an alternative name and try again"));
             Controller::redirect("/acp/organization");
         }
     }
 }
 public static function add()
 {
     Controller::requireFields("post", ["date", "type"], "/acp/league/manage?id=" . $_POST["league"]);
     Controller::requirePermissions(["AdminAccessDashboard"]);
     // check permissions
     $visitor = UserModel::getVisitor();
     if ($visitor->id != current(LeagueModel::get($_POST["league"]))->managerId) {
         Controller::requirePermissions(["AdminAllLeagues"]);
     }
     // check date
     $dt = \DateTime::createFromFormat("Y-m-d", $_POST["date"]);
     if ($dt === false || array_sum($dt->getLastErrors())) {
         Controller::addAlert(new Alert("danger", "The provided date was invalid"));
         Controller::redirect("/acp/league/manage?id=" . $_POST["league"]);
     }
     FixtureModel::add($_POST["type"], $_POST["date"], $_POST["league"], $_POST["home-team-id"], $_POST["away-team-id"], $_POST["home-team-number"], $_POST["away-team-number"]);
     Controller::addAlert(new Alert("success", "Fixture added successfully"));
     Controller::redirect("/acp/league/manage?id=" . $_POST["league"]);
 }
 public static function updateplayer()
 {
     Controller::requireFields("get", ["id"], "/acp/team");
     $player = current(Player::get($_GET["id"]));
     if (!User::getVisitor()->checkPermissions(["RegisterTeamsForAnyOrganization"])) {
         Controller::requirePermissions(["RegisterTeamsForOwnOrganization"]);
         if ($player->getTeam()->organizationId != User::getVisitor()->organizationId) {
             ErrorHandler::forbidden();
         }
     }
     if ($_GET["exempt"] == 1 && !$player->exempt) {
         if ($player->getTeam()->getNumberOfExemptPlayers() >= MAX_EXEMPTS) {
             Controller::addAlert(new Alert("danger", "You have already starred the maximum number of players"));
             Controller::redirect("/team/edit?id=" . $player->getTeam()->id);
         }
     }
     Player::update($player->id, null, (bool) $_GET["exempt"]);
     Controller::addAlert(new Alert("success", "Player updated successfully"));
     Controller::redirect("/team/edit?id=" . $player->getTeam()->id);
 }
 public static function submit()
 {
     Controller::requirePermissions(["SubmitMatchReports"]);
     if (empty($_POST)) {
         View::load("match/submit.twig", ["leagues" => League::get(), "players" => Player::get()]);
     } else {
         // basic input validation
         Controller::requireFields("post", ["date", "league", "reporter-team", "reporter-score", "opposing-team", "opposing-score"], "/match/submit");
         $datetime = DateTime::createFromFormat("Y-m-d", $_POST["date"]);
         $epoch = $datetime->getTimestamp();
         if ($datetime === false || array_sum($datetime->getLastErrors()) || $epoch > time() || time() - $epoch > 3600 * 24 * 365) {
             Controller::addAlert(new Alert("danger", "You did not enter a valid date, please try again."));
             Controller::redirect("/match/submit");
         }
         // check authorization of user to file reports on behalf of reporting team
         $reporterTeam = current(Team::get($_POST["reporter-team"]));
         $visitor = User::getVisitor();
         if ($visitor->organizationId != $reporterTeam->organizationId) {
             Controller::requirePermissions(["SubmitMatchReportsForAnyTeam"]);
         }
         // start determining the data for insertion
         if ($_POST["location"] == "home") {
             // reporting team is home
             $homeTeamId = $_POST["reporter-team"];
             $homeScore = $_POST["reporter-score"];
             $awayTeamId = $_POST["opposing-team"];
             $awayScore = $_POST["opposing-score"];
         } else {
             $awayTeamId = $_POST["reporter-team"];
             $awayScore = $_POST["reporter-score"];
             $homeTeamId = $_POST["opposing-team"];
             $homeScore = $_POST["opposing-score"];
         }
         // transaction
         Database::getConnection()->beginTransaction();
         // attempt to pull an existing match record or add a new one
         $match = current(MatchModel::get(null, $_POST["date"], $_POST["league"], $homeTeamId, $awayTeamId));
         if ($match) {
             $matchId = $match->id;
         } else {
             $matchId = MatchModel::add($_POST["date"], $_POST["league"], $homeTeamId, $awayTeamId);
         }
         try {
             MatchReport::add($matchId, $_POST["reporter-team"], $visitor->id, $homeScore, $awayScore);
         } catch (DuplicateException $e) {
             Database::getConnection()->rollBack();
             Controller::addAlert(new Alert("danger", "You have already submitted a report for that match!"));
             Controller::redirect("/match/submit");
         }
         if (!$match) {
             $match = current(MatchModel::get($matchId));
         }
         $players = $reporterTeam->getPlayers();
         foreach ($players as $player) {
             if (array_key_exists("player" . $player->id, $_POST)) {
                 $match->addParticipatingPlayer($reporterTeam->id, $player->id);
             }
         }
         for ($i = 1; $i <= 8; $i++) {
             if (array_key_exists("additional-player" . $i, $_POST) && $_POST["additional-player" . $i]) {
                 $match->addParticipatingPlayer($reporterTeam->id, null, $_POST["additional-player" . $i]);
             }
         }
         // commit
         Database::getConnection()->commit();
         // attempt reconciliation
         $matches = MatchModel::get($matchId);
         current($matches)->attemptReportReconciliation();
         Controller::addAlert(new Alert("success", "Match report submitted successfully!"));
         Controller::redirect("/match/record?id=" . $matchId);
     }
 }