This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
accm-website/pages/TournamentAdministrationPage.inc.php

283 lines
11 KiB
PHP

<?php
include_once './pages/AdministrationPage.inc.php';
include_once './includes/tournaments/Tournament.inc.php';
include_once './includes/tournaments/TournamentLister.inc.php';
include_once './includes/tournaments/TournamentEntry.inc.php';
include_once './includes/tournaments/TournamentEntryLister.inc.php';
include_once './includes/tournaments/Category.inc.php';
include_once './includes/tournaments/CategoryLister.inc.php';
include_once './includes/tournaments/CategoryListFormatter.inc.php';
include_once './includes/users/MemberListFormatter.inc.php';
include_once './includes/utils/DateParser.inc.php';
include_once './includes/utils/DateFormatter.inc.php';
/**
* This class represents the administration page for the tournaments
* part of the website.
*
* @author Thomas Schwery <thomas.schwery@epfl.ch>
*/
class TournamentAdministrationPage extends AdministrationPage {
private $title;
private $content;
protected function constructAdmin() {
$this->content = "";
if (key_exists('tournamentIdentifier', $_POST)) {
$this->save();
} else if (key_exists("type", $_GET) AND ($_GET['type'] == "create")) {
$this->create();
} else if (key_exists("type", $_GET) AND ($_GET['type'] == "delete")) {
$this->delete();
} else if (key_exists("tournamentIdentifier", $_GET)) {
$this->modify();
} else {
$this->listing();
}
}
public function getContent() {
return $this->content;
}
public function getTitle() {
return $this->title;
}
public function getHeaderEntry() {
$entryName = "entryName_'+counter+'";
$nameSelect = MemberListFormatter::getSelectMembers($entryName, "delete");
$entryCategory = "entryCategory_'+counter+'";
$entrySelect = CategoryListFormatter::getSelectCategories($entryCategory, "");
$formHelper = <<<FORM
<script type="text/javascript">
function test() {
var tblBody = document.getElementById('tableId').tBodies[0];
var counter=document.getElementById('tableId').rows.length;
var newRow = tblBody.insertRow(-1);
var newCell0 = newRow.insertCell(0);
newCell0.innerHTML = '$nameSelect';
newCell0.innerHTML += '$entrySelect';
var newCell1 = newRow.insertCell(1);
newCell1.innerHTML = '<input name="entryPoints_'+counter+'"type="input" value="Points '+counter+'"/>';
var newCell2 = newRow.insertCell(2);
newCell2.innerHTML = '<input name="entryRank_'+counter+'"type="input" value="Rank '+counter+'"/>';
newCell2.innerHTML += '<input name="entryParticipants_'+counter+'"type="input" value="Participants '+counter+'"/>';
var newCell3 = newRow.insertCell(3);
newCell3.innerHTML = '<input name="entryId_'+counter+'"type="hidden" value="-1"/>';
}
window.onload = test;
</script>
FORM;
return $formHelper;
}
private function create() {
$identifier = -1;
$name = Localization::tournamentCategory;
$type = Localization::tournamentType;
$date = time();
$comments = Localization::tournamentComment;
$location = Localization::tournamentLocation;
$entries = array();
$this->form($identifier, $name, $type, $date, $location, $comments, $entries);
}
private function modify() {
$identifier = $_GET['tournamentIdentifier'];
$tournament = Tournament::Get($identifier);
$name = $tournament->getName();
$type = $tournament->getType();
$date = $tournament->getDate();
$location = $tournament->getLocation();
$comments = $tournament->getComments();
$entries = TournamentEntryLister::getAllEntries($tournament);
$this->form($identifier, $name, $type, $date, $location, $comments, $entries);
}
private function form($identifier, $name, $type, $date, $location, $comments, $entries) {
$this->title = Localization::tournamentEdition . " : " . $name;
$existantEntries = "";
$counter = 0;
foreach($entries as $entry) {
$counter++;
$entryName = $entry->getMember()->getUsername();
$entryCategory = $entry->getCategory()->getName();
$entryPoints = $entry->getPoints();
$entryRank = $entry->getRank();
$entryParticipants = $entry->getParticipants();
$entryId = $entry->getIdentifier();
$existantEntries .= "<tr><td>";
$existantEntries .= MemberListFormatter::getSelectMembers("entryName_$counter", $entryName);
$existantEntries .= CategoryListFormatter::getSelectCategories("entryCategory_$counter",$entryCategory);
$existantEntries .= "</td><td>";
$existantEntries .= "<input name='entryPoints_$counter' value='$entryPoints' type='input'>";
$existantEntries .= "</td><td>";
$existantEntries .= "<input name='entryRank_$counter' value='$entryRank' type='input'>";
$existantEntries .= "<input name='entryParticipants_$counter' value='$entryParticipants' type='input'>";
$existantEntries .= "</td><td>";
$existantEntries .= "<input name='entryId_$counter' value='$entryId' type='hidden'>";
$existantEntries .= "</td></tr>";
}
$labelTournamentName = Localization::tournamentName;
$labelLocation = Localization::tournamentLocation;
$labelDate = Localization::tournamentDate;
$labelType = Localization::tournamentType;
$labelComments = Localization::tournamentComment;
$labelName = Localization::userFullName;
$labelCategory = Localization::tournamentCategory;
$labelPoints = Localization::tournamentPoints;
$labelRank = Localization::tournamentRank;
$labelParticipants = Localization::tournamentParticipants;
$labelAddEntry = Localization::tournamentAddEntry;
$labelSubmit = Localization::generalSubmit;
$datePart = DateFormatter::GetDMYForm("tournamentDate", $date);
$this->content = <<<FORM
<form method="post" action="./?page=TournamentAdministration">
<input name="tournamentIdentifier" type="hidden" value="$identifier">
<label for="tournamentName">$labelTournamentName</label>
<input name="tournamentName" id="tournamentName" type="text" value="$name"><br>
<label for="tournamentLocation">$labelLocation</label>
<input name="tournamentLocation" id="tournamentLocation" type="text" value="$location"><br>
<label for="tournamentDate">$labelDate</label>
$datePart<br>
<label for="tournamentType">$labelType</label>
<input name="tournamentType" id="tournamentType" type="text" value="$type"><br>
<label for="tournamentComments">$labelComments</label>
<input name="tournamentComments" id="tournamentComments" type="text" value="$comments">
<br><br>
<table id='tableId' style='width: 100%; text-align: center;'>
<tr>
<th>$labelName / $labelCategory</th>
<th>$labelPoints</th>
<th>$labelRank / $labelParticipants</th>
</<tr>
$existantEntries
</table>
<br>
<input type="button" id="moreFields" onclick="test();" value="$labelAddEntry" />
<input type="submit" value="$labelSubmit" />
</form>
<!--ZZZEEEEUUUUUU T'AIIIIMMMMMEEEUUUUU!!!! <3 <3 <3 -->
FORM;
}
private function listing() {
$this->title = Localization::tournamentList;
$labelCreate = Localization::generalCreate;
$labelModify = Localization::generalEdit;
$labelDelete = Localization::generalDelete;
$tournamentsArray = TournamentLister::getAllTournaments();
foreach ($tournamentsArray as $tournament) {
$this->content .= TournamentFormatter::getSummary($tournament);
$this->content .= "<a href='./?page=TournamentAdministration&tournamentIdentifier=" .
$tournament->getIdentifier() . "'>$labelModify</a> - ";
$this->content .= "<a href='./?page=TournamentAdministration&tournamentIdentifier=" .
$tournament->getIdentifier() . "&type=delete'>$labelDelete</a><br><br>";
}
$this->content .= "<a href='./?page=TournamentAdministration&type=create'>$labelCreate</a><br><br>";
}
private function save() {
$this->title = Localization::tournamentEdition;
$identifier = $_POST['tournamentIdentifier'];
$name = $_POST['tournamentName'];
$type = $_POST['tournamentType'];
$location = $_POST['tournamentLocation'];
$comments = $_POST['tournamentComments'];
$date = mktime(0,0,0,
$_POST['tournamentDate_months'], $_POST['tournamentDate_days'], $_POST['tournamentDate_year']);
if ($identifier >= 0) {
$tournament = Tournament::Get($identifier);
$tournament->setInformations($name, $location, $date, $type, $comments);
} else {
$tournament = Tournament::Create($name, $location, $date, $type, $comments);
}
$entryCounter = 1;
$entries = array();
while (key_exists("entryName_$entryCounter", $_POST)) {
$entryName = $_POST["entryName_$entryCounter"];
$entryPoints = $_POST["entryPoints_$entryCounter"];
$entryCategory = $_POST["entryCategory_$entryCounter"];
$entryParticipants = $_POST["entryParticipants_$entryCounter"];
$entryRank = $_POST["entryRank_$entryCounter"];
$entryId = $_POST["entryId_$entryCounter"];
$user = MemberLister::getByLogin($entryName);
$category = CategoryLister::GetCategoryByName($entryCategory);
if (!$category || !$user) {
if($entryId>0) {
TournamentEntry::Remove($entryId);
}
break;
}
if($entryId>0) {
$entry = TournamentEntry::Get($entryId);
$entry->setContent($user, $category, $entryPoints, $entryRank, $entryParticipants);
} else {
$entry = TournamentEntry::Create($tournament, $user, $category, $entryPoints, $entryRank, $entryParticipants);
}
$entryCounter++;
}
$this->content .= Localization::generalEditionResult;
$this->content.= "<br>";
$this->content.= "<a href='./?page=TournamentAdministration'>" . Localization::generalBackAdmin . "</a>";
}
private function delete() {
$this->title = Localization::tournamentDeletion;
if (!key_exists("sure", $_GET)) {
$deleteLabel = Localization::generalDelete;
$this->content = Localization::generalDeletionConfirmation . "<br>";
$this->content.= "<a href='./?page=TournamentAdministration&tournamentIdentifier=" .
$_GET['tournamentIdentifier'] . "&type=delete&sure=yes'>$deleteLabel</a><br><br>";
} else {
$result = Tournament::Remove($_GET['tournamentIdentifier']);
$this->content .= $result . " " . Localization::generalDeletionNumber;
$this->content.= "<br>";
$this->content.= "<a href='./?page=TournamentAdministration'>" . Localization::generalBackAdmin . "</a>";
}
}
}
?>