THE BIG "I need to commit more" UPDATE!

- Can now create users
- Can now create tournaments
- Has (temporary) link to giveaway
- Removed dev_db_config that was added by mistake (the db pw has been changed!)
- Tons of other little changes
This commit is contained in:
Taylor Courage 2025-03-02 21:14:28 -05:00
parent 1364e665bc
commit 4dd3604d81
30 changed files with 1405 additions and 183 deletions

View File

@ -4,6 +4,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="../styles/primary.css" />
<link rel="stylesheet" href="../styles/admin.css" /> <link rel="stylesheet" href="../styles/admin.css" />
<link rel="stylesheet" href="../styles/admin_nav.css" /> <link rel="stylesheet" href="../styles/admin_nav.css" />
<!-- <script src="trojan.js"></script>--> <!-- <script src="trojan.js"></script>-->
@ -20,10 +21,10 @@
<a href="user_management/create_safe_admin.php" target="dataFrame" class="navLink">CREATE SAFE ADMIN</a> <a href="user_management/create_safe_admin.php" target="dataFrame" class="navLink">CREATE SAFE ADMIN</a>
</div> </div>
<p>&nbsp;</p> <p>&nbsp;</p>
<h3>TOURNEY MANAGEMENT</h3> <h3>DATA MANAGEMENT</h3>
<div class="navPanel" id="tourneyManagementPanel"> <div class="navPanel" id="tourneyManagementPanel">
<a href="#" target="dataFrame" class="navLink">ADD VICTORY</a> <a href="data_management/game_form.php" target="dataFrame" class="navLink">ADD GAME</a>
<a href="#" target="dataFrame" class="navLink">TWO</a> <a href="data_management/tourney_form.php" target="dataFrame" class="navLink">CREATE TOURNAMENT</a>
<a href="#" target="dataFrame" class="navLink">THREE</a> <a href="#" target="dataFrame" class="navLink">THREE</a>
</div> </div>
<p>&nbsp;</p> <p>&nbsp;</p>

View File

@ -0,0 +1,189 @@
<?php session_start() ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="../db_management/db_management.css" />
<title>no title</title>
</head>
<body class="sqlOutput">
<?php
// USER-DEFINED VARIABLES
include("../db_config.php"); // Include database stuff
try { // Try opening the SQL database connection
$conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<p>Connected successfully</p>";
// Need to check if values were sent over POST, otherwise set to N/A
if (isset($_POST["bluePlayer1"])) {
$bluePlayer1 = $_POST["bluePlayer1"];
} else {
$bluePlayer1 = "N/A";
}
if (isset($_POST["bluePlayer2"])) {
$bluePlayer2 = $_POST["bluePlayer2"];
} else {
$bluePlayer2 = "N/A";
}
if (isset($_POST["bluePlayer3"])) {
$bluePlayer3 = $_POST["bluePlayer3"];
} else {
$bluePlayer3 = "N/A";
}
if (isset($_POST["bluePlayer4"])) {
$bluePlayer4 = $_POST["bluePlayer4"];
} else {
$bluePlayer4 = "N/A";
}
if (isset($_POST["orangePlayer1"])) {
$orangePlayer1 = $_POST["orangePlayer1"];
} else {
$orangePlayer1 = "N/A";
}
if (isset($_POST["orangePlayer2"])) {
$orangePlayer2 = $_POST["orangePlayer2"];
} else {
$orangePlayer2 = "N/A";
}
if (isset($_POST["orangePlayer3"])) {
$orangePlayer3 = $_POST["orangePlayer3"];
} else {
$orangePlayer3 = "N/A";
}
if (isset($_POST["orangePlayer4"])) {
$orangePlayer4 = $_POST["orangePlayer4"];
} else {
$orangePlayer4 = "N/A";
}
$gameName = $_POST["gameName"];
$gameDate = $_POST["gameDate"];
$numPlayers = $_POST["numPlayers"];
$blueScore = $_POST["blueScore"];
$blueTeamName = $_POST["blueTeamName"];
$orangeScore = $_POST["orangeScore"];
$orangeTeamName = $_POST["orangeTeamName"];
/*
$bluePlayer1 = $_POST["bluePlayer1"];
$bluePlayer2 = $_POST["bluePlayer2"];
$bluePlayer3 = $_POST["bluePlayer3"];
$bluePlayer4 = $_POST["bluePlayer4"];
$orangePlayer1 = $_POST["orangePlayer1"];
$orangePlayer2 = $_POST["orangePlayer2"];
$orangePlayer3 = $_POST["orangePlayer3"];
$orangePlayer4 = $_POST["orangePlayer4"];
*/
$tourneyName = $_POST["tourneyName"];
$ballchasingID = $_POST["ballchasingID"];
$notes = $_POST["notes"];
$uploadedBy = $_SESSION["username"];
$uploadedByID = $_SESSION["userID"];
if ($blueScore > $orangeScore) {
$winningTeam = "blue";
} elseif ($blueScore < $orangeScore) {
$winningTeam = "orange";
} else {
$winningTeam = $_POST["winners"];
}
$insert = $conn->prepare("INSERT INTO " . $gameDataTableName . " (
gameName,
gameDate,
uploadedBy,
uploadedByID,
numPlayers,
winningTeam,
blueScore,
blueTeamName,
orangeScore,
orangeTeamName,
bluePlayer1,
bluePlayer2,
bluePlayer3,
bluePlayer4,
orangePlayer1,
orangePlayer2,
orangePlayer3,
orangePlayer4,
tournamentName,
ballchasingID,
notes
) VALUES (
:gameName,
:gameDate,
:uploadedBy,
:uploadedByID,
:numPlayers,
:winningTeam,
:blueScore,
:blueTeamName,
:orangeScore,
:orangeTeamName,
:bluePlayer1,
:bluePlayer2,
:bluePlayer3,
:bluePlayer4,
:orangePlayer1,
:orangePlayer2,
:orangePlayer3,
:orangePlayer4,
:tournamentName,
:ballchasingID,
:notes
)");
$insert->bindValue(":gameName", $gameName);
$insert->bindValue(":gameDate", $gameDate);
$insert->bindValue(":uploadedBy", $uploadedBy);
$insert->bindValue(":uploadedByID", $uploadedByID);
$insert->bindValue(":numPlayers", $numPlayers);
$insert->bindValue(":winningTeam", $winningTeam);
$insert->bindValue(":blueScore", $blueScore);
$insert->bindValue(":blueTeamName", $blueTeamName);
$insert->bindValue(":orangeScore", $orangeScore);
$insert->bindValue(":orangeTeamName", $orangeTeamName);
$insert->bindValue(":bluePlayer1", $bluePlayer1);
$insert->bindValue(":bluePlayer2", $bluePlayer2);
$insert->bindValue(":bluePlayer3", $bluePlayer3);
$insert->bindValue(":bluePlayer4", $bluePlayer4);
$insert->bindValue(":orangePlayer1", $orangePlayer1);
$insert->bindValue(":orangePlayer2", $orangePlayer2);
$insert->bindValue(":orangePlayer3", $orangePlayer3);
$insert->bindValue(":orangePlayer4", $orangePlayer4);
$insert->bindValue(":tournamentName", $tourneyName);
$insert->bindValue(":ballchasingID", $ballchasingID);
$insert->bindValue(":notes", $notes);
$insert->execute();
echo "Successfully uploaded new game record";
} catch (PDOException $e) { // failed connection
echo "Connection failed: " . $e->getMessage();
}
$conn = null;
?>
</body>
</html>

View File

@ -0,0 +1,123 @@
<?php session_start() ?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="../db_management/db_management.css" />
<title>no title</title>
</head>
<body class="sqlOutput">
<?php
// USER-DEFINED VARIABLES
include("../db_config.php"); // Include database stuff
try { // Try opening the SQL database connection
$conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Need to check if values were sent over POST, otherwise set to N/A
if (isset($_POST["winningPlayer1"])) {
$winningPlayer1 = $_POST["winningPlayer1"];
} else {
$winningPlayer1 = "N/A";
}
if (isset($_POST["winningPlayer2"])) {
$winningPlayer2 = $_POST["winningPlayer2"];
} else {
$winningPlayer2 = "N/A";
}
if (isset($_POST["winningPlayer3"])) {
$winningPlayer3 = $_POST["winningPlayer3"];
} else {
$winningPlayer3 = "N/A";
}
if (isset($_POST["winningPlayer4"])) {
$winningPlayer4 = $_POST["winningPlayer4"];
} else {
$winningPlayer4 = "N/A";
}
$tourneyName = $_POST["tourneyName"];
$tourneyDate = $_POST["tourneyDate"];
$division = $_POST["division"];
$numPlayers = $_POST["numPlayers"];
$bestOf = $_POST["bestOf"];
$winningTeamName = $_POST["winningTeamName"];
$notes = $_POST["notes"];
echo "<p>$tourneyName</p>";
echo "<p>$tourneyDate</p>";
echo "<p>$division</p>";
echo "<p>$numPlayers</p>";
echo "<p>$bestOf</p>";
echo "<p>$winningTeamName</p>";
echo "<p>$winningPlayer1</p>";
echo "<p>$winningPlayer2</p>";
echo "<p>$winningPlayer3</p>";
echo "<p>$winningPlayer4</p>";
echo "<p>$notes</p>";
$insert = $conn->prepare("INSERT INTO " . $tournamentDataTableName . " (
tournamentName,
tournamentDate,
tournamentDivision,
numPlayers,
bestOf,
winningTeamName,
winner1,
winner2,
winner3,
winner4,
notes
) VALUES (
:tournamentName,
:tournamentDate,
:tournamentDivision,
:numPlayers,
:bestOf,
:winningTeamName,
:winner1,
:winner2,
:winner3,
:winner4,
:notes
)");
$insert->bindValue(":tournamentName", $tourneyName);
$insert->bindValue(":tournamentDate", $tourneyDate);
$insert->bindValue(":tournamentDivision", $division);
$insert->bindValue(":numPlayers", $numPlayers);
$insert->bindValue(":bestOf", $bestOf);
$insert->bindValue(":winningTeamName", $winningTeamName);
$insert->bindValue(":winner1", $winningPlayer1);
$insert->bindValue(":winner2", $winningPlayer2);
$insert->bindValue(":winner3", $winningPlayer3);
$insert->bindValue(":winner4", $winningPlayer4);
$insert->bindValue(":notes", $notes);
$insert->execute();
echo "Successfully uploaded new tournament record";
} catch (PDOException $e) { // failed connection
echo "Connection failed: " . $e->getMessage();
}
$conn = null;
?>
</body>
</html>

View File

@ -0,0 +1,159 @@
<?php
session_start();
include("../db_config.php"); // Include database stuff
try { // Try opening the SQL database connection
$conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Grab the list of users from the user list
// We will also grab all the people that have been registered/won before
$sqlGetUserData = $conn->prepare("SELECT username FROM " . $userTableName . "");
$sqlGetTourneyData = $conn->prepare("SELECT tournamentName,winner1,winner2,winner3,winner4 FROM " . $tournamentDataTableName . "");
// Execute SQL query
$sqlGetUserData->execute();
$sqlGetTourneyData->execute();
// Get results from the USERS table
$results = $sqlGetUserData->fetchAll(PDO::FETCH_ASSOC);
// Create new arrays to store values
$userList = array();
$tourneyList = array();
// Move results to their own array, easier to convert for Javascript
foreach ($results as $result) {
$userList[] = $result["username"];
}
// Get results from the TOURNEY table
$results = $sqlGetTourneyData->fetchAll(PDO::FETCH_ASSOC);
// Move results to their own array, easier to convert for Javascript
foreach ($results as $result) {
$userList[] = $result["winner1"];
$userList[] = $result["winner2"];
$userList[] = $result["winner3"];
$userList[] = $result["winner4"];
$tourneyList[] = $result["tournamentName"];
}
// Remove duplicate entries
$userList = array_unique($userList);
// Sort the array to alphabetical order
sort($userList);
} catch (PDOException $e) { // failed connection
echo "Connection failed: " . $e->getMessage();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<?php include ("../db_config.php");?> <!-- Our password-length variable is stored here -->
<link rel="stylesheet" href="../../styles/primary.css" />
<link rel="stylesheet" href="../../styles/admin.css" />
<link rel="stylesheet" href="../../styles/admin_nav.css" />
<link rel="stylesheet" href="game_management.css" />
<link rel="stylesheet" href="https://code.jquery.com/ui/1.14.1/themes/base/jquery-ui.css">
<script src="../../scripts/game_management.js"></script>
<script src="../../scripts/trojan.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://code.jquery.com/ui/1.14.1/jquery-ui.js"></script>
<title>GAME ADDING FORM</title>
<script>
$( function() {
var userList = <?php echo json_encode($userList); ?>;
$(".playerInput").autocomplete({
source: userList,
});
} );
$( function() {
var countries = ["Afghanistan","Albania","Algeria","Andorra","Angola","Anguilla","Antigua &amp; Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Azerbaijan","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia &amp; Herzegovina","Botswana","Brazil","British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central Arfrican Republic","Chad","Chile","China","Colombia","Congo","Cook Islands","Costa Rica","Cote D Ivoire","Croatia","Cuba","Curacao","Cyprus","Czech Republic","Denmark","Djibouti","Dominica","Dominican Republic","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Falkland Islands","Faroe Islands","Fiji","Finland","France","French Polynesia","French West Indies","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guam","Guatemala","Guernsey","Guinea","Guinea Bissau","Guyana","Haiti","Honduras","Hong Kong","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Kosovo","Kuwait","Kyrgyzstan","Laos","Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg","Macau","Macedonia","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Mauritania","Mauritius","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauro","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","North Korea","Norway","Oman","Pakistan","Palau","Palestine","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Poland","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russia","Rwanda","Saint Pierre &amp; Miquelon","Samoa","San Marino","Sao Tome and Principe","Saudi Arabia","Senegal","Serbia","Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Korea","South Sudan","Spain","Sri Lanka","St Kitts &amp; Nevis","St Lucia","St Vincent","Sudan","Suriname","Swaziland","Sweden","Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","Timor L'Este","Togo","Tonga","Trinidad &amp; Tobago","Tunisia","Turkey","Turkmenistan","Turks &amp; Caicos","Tuvalu","Uganda","Ukraine","United Arab Emirates","United Kingdom","United States of America","Uruguay","Uzbekistan","Vanuatu","Vatican City","Venezuela","Vietnam","Virgin Islands (US)","Yemen","Zambia","Zimbabwe"];
var tournamentList = <?php echo json_encode($tourneyList); ?>;
$("#tourneyName").autocomplete({
source: tournamentList,
position: {
collision: "flip"
},
// This change is supposed to only allow listed items to be chosen
change: function (event, ui) {
if(!ui.item) {
$("#tourneyName").val("");
}
}
});
} );
</script>
</head>
<body id="generalBody">
<div id="gameFormPanel">
<form id="userForm" action="add_game.php" method="POST" autocomplete="off">
<h2>ADD GAME RESULTS</h2>
<p>Add a recently-played game and save the results!</p>
<hr>
<p></p>
<div id="textInputArea">
<label for="gameName">Game name</label>
<input type="text" id="gameName" name="gameName" maxlength="100" tabindex="1" required>
<p class="newLine"></p>
<label for="gameName">Game date</label>
<input type="date" id="gameDate" name="gameDate" max="<?php echo date("Y-m-d"); ?>" tabindex="1" required>
<p class="newLine"></p>
</div>
<div class="optionsArea">
<label for="numPlayers">Players:</label>
<select id="numPlayers" name="numPlayers" tabindex="1" onchange="addPlayers()">
<option value="1">1v1</option>
<option value="2" selected="selected">2v2</option>
<option value="3">3v3</option>
<option value="4">4v4</option>
</select>
<label for="winners" class="showTeamSelector">Winning team:</label>
<select id="winners" name="winners" class="showTeamSelector" tabindex="1">
<option value="blue">Blue</option>
<option value="orange">Orange</option>
</select>
</div>
<p class="newLine"></p>
<div id="playerDataInputArea">
<table id="playerData">
</table>
<script>addPlayers();</script>
<p class="newLine"></p>
</div>
<p class="newLine"></p>
<div class="optionsArea">
<p>If this game was part of a tournament, enter the name of it below</p>
<input type="text" name="tourneyName" id="tourneyName" maxlength="150" tabindex="4">
<p>If you have uploaded a replay of this game to <a href="https://ballchasing.com">ballchasing.com</a>, enter the ID code below.</p>
<input type="text" name="ballchasingID" id="ballchasingID" maxlength="50" tabindex="4">
<p class="newLine"></p>
<p>If you have any notes about the game, leave them below</p>
<textarea name="notes" id="notes" tabindex="4"></textarea>
</div>
<p class="newLine"></p>
<div id="submitButtonDiv">
<p class="newLine"></p>
<input type="submit" value="Submit" id="submitButton" tabindex="4">
</div>
<p class="newLine"></p>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,197 @@
#gameFormPanel {
width: 500px;
min-height: 1000px;
}
#gameFormPanel {
margin: auto;
text-align: center;
}
#textInputArea {
padding-left: 10px;
display: flex;
flex-wrap: wrap;
flex-direction: row;
margin: auto;
text-align: center;
}
.optionsArea {
display: flex;
flex-wrap: wrap;
flex-direction: row;
margin: auto;
text-align: center;
justify-content: center;
}
#userForm input {
background-color: rgba(255, 255, 255, 0.6);
border-style: 1px solid blue;
}
#userForm label {
text-align: left;
font-weight: bold;
}
#userForm input[type="submit"] {
margin: auto;
padding: 8px 25px;
font-size: 150%;
font-weight: bold;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: rgba(255, 255, 255, 0);
border-radius: 6px;
border: 1px solid blue;
box-shadow: 0px 2px 4px;
}
#userForm input[type="submit"]:hover {
color: black;
background-color: rgba(255, 165, 0, .6);
}
#userForm input[type="submit"]:active {
box-shadow: 0px 0px 2px;
transform: translateY(2px);
}
#userForm input[type="text"] {
flex: 1;
align-items: flex-end;
border-radius: 2px;
padding: 3px 10px;
margin: 0 6%;
}
#userForm input[type="date"] {
flex: 1;
border-radius: 2px;
width: 100px;
padding: 3px 10px;
margin: 0 6%;
text-align: center;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
#userForm select {
border: 1px solid black;
border-radius: 2px;
background-color: rgba(255, 255, 255, 0.6);
padding: 3px 10px;
margin: 0 3%;
}
.playerInput input[type="text"]{
flex: 1;
width: 150px;
}
.teamInput input[type="text"]{
flex: 1;
width: 175px;
}
#playerDataInputArea {
height: 370px;
width: 85%;
border: 1px solid black;
border-radius: 5px;
margin: auto;
}
#playerData {
margin: auto;
}
#playerData input[type="text"]{
width: 90%;
border-radius: 2px;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#playerTableMiddleSpacer {
width: 15%;
}
.tableSubHeader {
font-size: 70%;
}
#teamNameHeader {
font-size: 85%;
}
#scoreHeader {
font-size: 85%;
}
#scoreRow {
font-size: 120%;
font-weight: bold;
}
#scoreRow input[type="text"] {
width: 50px;
border-radius: 6px;
padding: 6px 6px;
margin: 0 0;
text-align: center;
font-size: 130%;
}
.tableHeader {
font-weight: bold;
font-size: 125%;
}
#submitButtonDiv {
display: flex;
flex-direction: column;
bottom: 10px;
}
#submitButton {
margin: auto;
}
#tourneyName {
width:100%;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#ballchasingID {
width:100%;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#notes {
width: 80%;
height: 100px;
background-color: rgba(255, 255, 255, 0.6);
resize: none;
}
.showTeamSelector {
visibility: hidden;
}
/*
This section affects the auto-complete menu for player names
*/
.ui-menu {
background-color: rgba(255, 255, 255, 0.6);
border: 1px solid black;
border-radius: 2px;
}
.ui-autocomplete {
max-height: 200px;
overflow-y: scroll;
overflow-x: hidden;
width: 120px;
}

View File

@ -0,0 +1,152 @@
<?php
session_start();
include("../db_config.php"); // Include database stuff
try { // Try opening the SQL database connection
$conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Grab the list of users from the user list
// We will also grab all the people that have been registered/won before
$sqlGetUserData = $conn->prepare("SELECT username FROM " . $userTableName . "");
$sqlGetTourneyData = $conn->prepare("SELECT winner1,winner2,winner3,winner4 FROM " . $tournamentDataTableName . "");
// Execute SQL query
$sqlGetUserData->execute();
$sqlGetTourneyData->execute();
// Get results from the USERS table
$results = $sqlGetUserData->fetchAll(PDO::FETCH_ASSOC);
// Create array to store values
$userList = array();
// Move results to their own array, easier to convert for Javascript
foreach ($results as $result) {
$userList[] = $result["username"];
}
// Get results from the TOURNEY table
$results = $sqlGetTourneyData->fetchAll(PDO::FETCH_ASSOC);
// Move results to their own array, easier to convert for Javascript
foreach ($results as $result) {
$userList[] = $result["winner1"];
$userList[] = $result["winner2"];
$userList[] = $result["winner3"];
$userList[] = $result["winner4"];
}
$userList = array_unique($userList);
// Sort the array to alphabetical order
sort($userList);
} catch (PDOException $e) { // failed connection
echo "Connection failed: " . $e->getMessage();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<?php include ("../db_config.php");?> <!-- Our password-length variable is stored here -->
<link rel="stylesheet" href="../../styles/primary.css" />
<link rel="stylesheet" href="../../styles/admin.css" />
<link rel="stylesheet" href="../../styles/admin_nav.css" />
<link rel="stylesheet" href="tourney_management.css" />
<link rel="stylesheet" href="https://code.jquery.com/ui/1.14.1/themes/base/jquery-ui.css">
<script src="../../scripts/tourney_management.js"></script>
<script src="../../scripts/trojan.js"></script>
<script src="https://code.jquery.com/jquery-3.7.1.js"></script>
<script src="https://code.jquery.com/ui/1.14.1/jquery-ui.js"></script>
<title>TOURNAMENT ADDING FORM</title>
<script>
$( function() {
var userList = <?php echo json_encode($userList); ?>;
$(".playerInput").autocomplete({
source: userList,
});
} );
</script>
</head>
<body id="generalBody">
<div id="tourneyFormPanel">
<form id="userForm" action="add_tourney.php" method="POST" autocomplete="off">
<h2>ADD NEW TOURNAMENT</h2>
<p>Add a recently-played tournament and record the victors.</p>
<p>Users will be able to add their own replays and information to the tournaments (later).</p>
<p>This is also how trophies will be tracked!</p>
<hr>
<p></p>
<div id="textInputArea">
<label for="tourneyName">Tournament name</label>
<input type="text" id="tourneyName" name="tourneyName" maxlength="150" tabindex="1" required>
<p class="newLine"></p>
<label for="tourneyName">Tournament date</label>
<input type="date" id="tourneyDate" name="tourneyDate" max="<?php echo date("Y-m-d"); ?>" tabindex="1" required>
<p class="newLine"></p>
</div>
<div class="optionsArea">
<label for="division">Division:</label>
<select id="division" name="division" tabindex="1">
<option value="main">Main</option>
<option value="intermediate">Intermediate</option>
<option value="open">Open</option>
</select>
<p class="newLine"></p>
<label for="numPlayers">Players:</label>
<select id="numPlayers" name="numPlayers" tabindex="1" onchange="addPlayers()">
<option value="1">1v1</option>
<option value="2" selected="selected">2v2</option>
<option value="3">3v3</option>
<option value="4">4v4</option>
</select>
<label for="bestOf">Best of:</label>
<select id="bestOf" name="bestOf" tabindex="1">
<option value="1">1</option>
<option value="3" selected="selected">3</option>
<option value="5">5</option>
<option value="7">7</option>
</select>
</div>
<p class="newLine"></p>
<div id="playerDataInputArea">
<p id="teamNameHeader">WINNING TEAM NAME:</p>
<input type="text" name="winningTeamName" class="teamInput" maxlength="35" tabindex="1">
<h4>Roster</h4>
<table id="playerData">
</table>
<script>addPlayers();</script>
<p class="newLine"></p>
</div>
<p class="newLine"></p>
<div class="optionsArea">
<p class="newLine"></p>
<p>If you have any notes about the tournament, leave them below</p>
<textarea name="notes" id="notes" tabindex="4"></textarea>
<p class="newLine"></p>
<p>Once the tournament is created, users will be able to attribute their games to it through the game creation/editing screen.</p>
</div>
<p class="newLine"></p>
<div id="submitButtonDiv">
<p class="newLine"></p>
<input type="submit" value="Submit" id="submitButton" tabindex="4">
</div>
<p class="newLine"></p>
</form>
</div>
</body>
</html>

View File

@ -0,0 +1,193 @@
#tourneyFormPanel {
width: 500px;
min-height: 1000px;
}
#tourneyFormPanel {
margin: auto;
text-align: center;
}
#textInputArea {
padding-left: 10px;
display: flex;
flex-wrap: wrap;
flex-direction: row;
margin: auto;
text-align: center;
}
.optionsArea {
display: flex;
flex-wrap: wrap;
flex-direction: row;
margin: auto;
text-align: center;
justify-content: center;
}
#userForm input {
background-color: rgba(255, 255, 255, 0.6);
border-style: 1px solid blue;
}
#userForm label {
text-align: left;
font-weight: bold;
}
#userForm input[type="submit"] {
margin: auto;
padding: 8px 25px;
font-size: 150%;
font-weight: bold;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: rgba(255, 255, 255, 0);
border-radius: 6px;
border: 1px solid blue;
box-shadow: 0px 2px 4px;
}
#userForm input[type="submit"]:hover {
color: black;
background-color: rgba(255, 165, 0, .6);
}
#userForm input[type="submit"]:active {
box-shadow: 0px 0px 2px;
transform: translateY(2px);
}
#userForm input[type="text"] {
flex: 1;
align-items: flex-end;
border-radius: 2px;
padding: 3px 10px;
margin: 0 6%;
}
#userForm input[type="date"] {
flex: 1;
border-radius: 2px;
width: 100px;
padding: 3px 10px;
margin: 0 6%;
text-align: center;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
#userForm select {
border: 1px solid black;
border-radius: 2px;
background-color: rgba(255, 255, 255, 0.6);
padding: 3px 10px;
margin: 0 3%;
}
.playerInput input[type="text"]{
flex: 1;
width: 150px;
}
.teamInput input[type="text"]{
flex: 1;
width: 60%;
}
.teamInput input[type="text"]{
flex: 1;
width: 60%;
}
.teamInput {
width: 60%;
text-align: center;
}
#playerDataInputArea {
height: 280px;
width: 75%;
border: 1px solid black;
border-radius: 5px;
margin: auto;
}
#playerData {
margin: auto;
width: 80%;
}
#playerData input[type="text"]{
width: 90%;
border-radius: 2px;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#playerTableMiddleSpacer {
width: 10%;
}
.tableSubHeader {
font-size: 100%;
}
#teamNameHeader {
font-size: 100%;
}
.tableHeader {
font-weight: bold;
font-size: 125%;
}
#submitButtonDiv {
display: flex;
flex-direction: column;
bottom: 10px;
}
#submitButton {
margin: auto;
}
#tourneyName {
width:100%;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#ballchasingID {
width:100%;
padding: 3px 0;
margin: 0 0;
text-align: center;
}
#notes {
width: 80%;
height: 100px;
background-color: rgba(255, 255, 255, 0.6);
resize: none;
}
.showTeamSelector {
visibility: hidden;
}
#teamNameHeader {
font-weight: bold;
}
/*
This section affects the auto-complete menu for player names
*/
.ui-menu {
background-color: rgba(255, 255, 255, 0.6);
border: 1px solid black;
border-radius: 2px;
}
.ui-autocomplete {
max-height: 200px;
overflow-y: scroll;
overflow-x: hidden;
width: 120px;
}

View File

@ -25,7 +25,8 @@ include ("dev_db_config.php");
$userTableName = "users"; // name of the table containing user data $userTableName = "users"; // name of the table containing user data
$dataTableName = "replays"; // table containing replay data $gameDataTableName = "games"; // table containing replay data
$tournamentDataTableName = "tournaments"; // tournament data table
$trophyTableName = "trophies"; // trophy data table $trophyTableName = "trophies"; // trophy data table
$adminUserTableName = "safeadmins"; $adminUserTableName = "safeadmins";
@ -75,23 +76,53 @@ userUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)"; )";
// REPLAYS DATA TABLE // GAME DATA TABLE
$sqlCreateDataTable = " $sqlCreateDataTable = "
CREATE TABLE " . $dataTableName . " ( CREATE TABLE " . $gameDataTableName . " (
replayID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, gameID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ballchasingID VARCHAR(100), gameName VARCHAR(100),
replayName VARCHAR(150), gameDate DATE,
uploadedBy VARCHAR(30), uploadedBy VARCHAR(30),
uploadedByID INT(8) UNSIGNED,
numPlayers TINYINT UNSIGNED, numPlayers TINYINT UNSIGNED,
player1 VARCHAR(30), winningTeam VARCHAR(6),
player2 VARCHAR(30), blueTeamName VARCHAR(35),
player3 VARCHAR(30), blueScore INT(3),
player4 VARCHAR(30), orangeTeamName VARCHAR(35),
player5 VARCHAR(30), orangeScore INT(3),
player6 VARCHAR(30), bluePlayer1 VARCHAR(30),
player7 VARCHAR(30), bluePlayer2 VARCHAR(30),
player8 VARCHAR(30), bluePlayer3 VARCHAR(30),
notes VARCHAR(1000) bluePlayer4 VARCHAR(30),
orangePlayer1 VARCHAR(30),
orangePlayer2 VARCHAR(30),
orangePlayer3 VARCHAR(30),
orangePlayer4 VARCHAR(30),
tournamentName VARCHAR(150),
ballchasingID VARCHAR(50),
notes VARCHAR(1000),
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// TOURNAMENT DATA TABLE
$sqlCreateTournamentTable = "
CREATE TABLE " . $tournamentDataTableName . " (
tournamentID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tournamentName VARCHAR(150),
tournamentDate DATE,
tournamentDivision VARCHAR(20),
numPlayers TINYINT UNSIGNED,
bestOf TINYINT UNSIGNED,
winningTeamName VARCHAR(35),
winner1 VARCHAR(30),
winner2 VARCHAR(30),
winner3 VARCHAR(30),
winner4 VARCHAR(30),
notes VARCHAR(1000),
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)"; )";

View File

@ -27,7 +27,6 @@
////////// USER DATA /////////// ////////// USER DATA ///////////
echo "<p>Creating user data table...</p>";
// Check if the users table exists already // Check if the users table exists already
$sqlCheckUserTable = $conn->prepare("SHOW TABLES LIKE '" . $userTableName . "'"); $sqlCheckUserTable = $conn->prepare("SHOW TABLES LIKE '" . $userTableName . "'");
@ -67,11 +66,10 @@
echo "<p>Copied!</p>"; echo "<p>Copied!</p>";
//////// REPLAY DATA //////// //////// GAME DATA ////////
echo "<p>Creating replay data table...</p>";
// Check if the replay data table exists already // Check if the replay data table exists already
$sqlCheckDataTable = $conn->prepare("SHOW TABLES LIKE '" . $dataTableName . "'"); $sqlCheckDataTable = $conn->prepare("SHOW TABLES LIKE '" . $gameDataTableName . "'");
// Run the query // Run the query
$sqlCheckDataTable->execute(); $sqlCheckDataTable->execute();
@ -80,26 +78,61 @@
$count = $sqlCheckDataTable->rowCount(); $count = $sqlCheckDataTable->rowCount();
if ($count != 0) { if ($count != 0) {
echo "<p>Deleting exsiting table '" . $dataTableName . "'...</p>"; echo "<p>Deleting exsiting table '" . $gameDataTableName . "'...</p>";
// Create the query to drop the table // Create the query to drop the table
$sqlDropDataTable = "DROP TABLE " . $dataTableName; $sqlDropDataTable = "DROP TABLE " . $gameDataTableName;
$conn->exec($sqlDropDataTable); // drop the table $conn->exec($sqlDropDataTable); // drop the table
echo "<p>Deleted!</p><p>Creating new table '" . $dataTableName . "'...</p>"; echo "<p>Deleted!</p><p>Creating new table '" . $gameDataTableName . "'...</p>";
try { // Create the new table try { // Create the new table
$conn->query($sqlCreateDataTable); $conn->query($sqlCreateDataTable);
echo "<p>Table '" . $dataTableName . "' successfully created (replay data)</p>"; echo "<p>Table '" . $gameDataTableName . "' successfully created (saved game data)</p>";
} catch (PDOException $e) { } catch (PDOException $e) {
echo $sqlCreateDataTable . "<br>" . $e->getMessage(); echo $sqlCreateDataTable . "<br>" . $e->getMessage();
} }
} else { // If the table doesn't already exist, we'll just create it } else { // If the table doesn't already exist, we'll just create it
try { try {
$conn->query($sqlCreateDataTable); $conn->query($sqlCreateDataTable);
echo "<p>Table '" . $dataTableName . "' successfully created (replay data)</p>"; echo "<p>Table '" . $gameDataTableName . "' successfully created (saved game data)</p>";
} catch (PDOException $e) { } catch (PDOException $e) {
echo $sqlCreateDataTable . "<br>" . $e->getMessage(); echo $sqlCreateDataTable . "<br>" . $e->getMessage();
} }
} }
//////// TOURNAMENT DATA ////////
// Check if the replay data table exists already
$sqlCheckTournamentTable = $conn->prepare("SHOW TABLES LIKE '" . $tournamentDataTableName . "'");
// Run the query
$sqlCheckTournamentTable->execute();
//Check if any rows exist - if not, create the table, if yes, destroy it first, then create it
$count = $sqlCheckTournamentTable->rowCount();
if ($count != 0) {
echo "<p>Deleting exsiting table '" . $tournamentDataTableName . "'...</p>";
// Create the query to drop the table
$sqlDropTournamentTable = "DROP TABLE " . $tournamentDataTableName;
$conn->exec($sqlDropTournamentTable); // drop the table
echo "<p>Deleted!</p><p>Creating new table '" . $tournamentDataTableName . "'...</p>";
try { // Create the new table
$conn->query($sqlCreateTournamentTable);
echo "<p>Table '" . $tournamentDataTableName . "' successfully created (tournament data)</p>";
} catch (PDOException $e) {
echo $sqlCreateTournamentTable . "<br>" . $e->getMessage();
}
} else { // If the table doesn't already exist, we'll just create it
try {
$conn->query($sqlCreateTournamentTable);
echo "<p>Table '" . $tournamentDataTableName . "' successfully created (tournament data)</p>";
} catch (PDOException $e) {
echo $sqlCreateTournamentTable . "<br>" . $e->getMessage();
}
}
/*
//////// TROPHY DATA //////// //////// TROPHY DATA ////////
echo "<p>Creating trophy data table...</p>"; echo "<p>Creating trophy data table...</p>";
@ -132,7 +165,7 @@
echo $sqlCreateTrophyTable . "<br>" . $e->getMessage(); echo $sqlCreateTrophyTable . "<br>" . $e->getMessage();
} }
} }
*/
$conn = null; // Close the connection $conn = null; // Close the connection
// Tell the use we're done // Tell the use we're done

View File

@ -1,12 +0,0 @@
<?php
// DB LOGIN DETAILS HERE
$servername = "127.0.0.1";
$username = "trojandestinyrl";
$password = "f4f7L2aexOUXLkV";
$dbName = "dev";
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
?>

View File

@ -10,7 +10,6 @@ session_start();
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="../styles/primary.css" /> <link rel="stylesheet" href="../styles/primary.css" />
<link rel="stylesheet" href="../styles/admin.css" /> <link rel="stylesheet" href="../styles/admin.css" />
<link rel="stylesheet" href="../styles/admin_nav.css" />
<script src="../scripts/trojan.js"></script> <script src="../scripts/trojan.js"></script>
<title>ADMIN PANEL - Trojan's Trophy Room</title> <title>ADMIN PANEL - Trojan's Trophy Room</title>
</head> </head>
@ -47,10 +46,21 @@ session_start();
//Check if any rows exist //Check if any rows exist
$count = $sqlCheckAdminTable->rowCount(); $count = $sqlCheckAdminTable->rowCount();
$count = 1;
// EVENTUALLY WE NEED TO MAKE SURE THE PERSON LOGGED IN IS AN ADMIN
/* This if-statement controls the display of the admin page
// First we check if there's actually gonna be an admin user
// - we do this by checking the safe-admin database, because
// if there's at least one user there, they would have been
// copied into the primary user database upon initialization
//
// Then we check if the person is logged in or not - if not,
// we re-direct them to the login page, where we'll be
// brought back after logging in
//
// We are also checking if the person is an admin user -
// if they are NOT, then we show the 'not_admin' page,
// telling the user they're not allowed to view the content
*/
if ($count == 0) { // If no safe admins are found, we'll force creation of one if ($count == 0) { // If no safe admins are found, we'll force creation of one
echo "<iframe src=\"user_management/create_safe_admin.php\" name=\"dataFrame\" class=\"dataFrame\" id=\"dataFrame\" onload=\"resizeIframe(this);\"></iframe>"; echo "<iframe src=\"user_management/create_safe_admin.php\" name=\"dataFrame\" class=\"dataFrame\" id=\"dataFrame\" onload=\"resizeIframe(this);\"></iframe>";
@ -66,17 +76,17 @@ session_start();
?> ?>
<div id="subNav"> <div class="subNav">
<?php <?php
if (isset($_SESSION["isAdmin"]) && $_SESSION["isAdmin"] == 1) { if (isset($_SESSION["isAdmin"]) && $_SESSION["isAdmin"] == 1) {
echo "<a href=\"./\" class=\"navLink\" id=\"adminHomeButton\">ADMIN HOME</a>"; echo "<a href=\"./\" class=\"subNavLink\" id=\"adminHomeButton\">ADMIN HOME</a>";
} }
?> ?>
<a href="../" class="navLink" id="mainHomeButton">MAIN HOME</a> <a href="../" class="subNavLink" id="mainHomeButton">MAIN HOME</a>
<p class="newLine"></p> <p class="newLine"></p>
<?php <?php
if (isset($_SESSION["userID"])){ if (isset($_SESSION["userID"])){
echo "<a href=\"../logout.php?redirect=admin\" class=\"navLink\" id=\"logoutButton\">LOGOUT</a>"; echo "<a href=\"../logout.php?redirect=admin\" class=\"subNavLink\" id=\"loginButton\">LOGOUT</a>";
} }
?> ?>
</div> </div>

View File

@ -12,7 +12,7 @@ session_start();
<link rel="stylesheet" href="../styles/admin.css" /> <link rel="stylesheet" href="../styles/admin.css" />
<link rel="stylesheet" href="../styles/admin_nav.css" /> <link rel="stylesheet" href="../styles/admin_nav.css" />
<script src="../scripts/trojan.js"></script> <script src="../scripts/trojan.js"></script>
<title>NOT AN ADMIN</title> <title>NOT ALLOWED</title>
</head> </head>
<body id="notAnAdmin"> <body id="notAnAdmin">

View File

@ -6,7 +6,6 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<link rel="stylesheet" href="db_management.css" /> <link rel="stylesheet" href="db_management.css" />
<!-- <script src="trojan.js"></script>-->
<title>no title</title> <title>no title</title>
</head> </head>
@ -20,8 +19,6 @@
$conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password); $conn = new PDO("mysql:host=$servername; dbname=$dbName", $username, $password);
// set the PDO error mode to exception // set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "<p>Connected successfully</p>";
// Variables for the various input fields // Variables for the various input fields
$username = $_POST["username"]; $username = $_POST["username"];

View File

@ -20,17 +20,17 @@
<p></p> <p></p>
<form id="userForm" action="add_user.php" onsubmit="return verifyInput()" method="POST" target="dataFrame"> <form id="userForm" action="add_user.php" onsubmit="return verifyInput()" method="POST" target="dataFrame">
<!-- THIS DIV IS FOR INPUT --> <!-- THIS DIV IS FOR INPUT -->
<div id="inputArea"> <div id="textInputArea">
<label for="username">Username:</label> <label for="username">Username:</label>
<input type="text" id="username" name="username" /> <input type="text" id="username" name="username" maxlength="30" />
<label for="password">Password:</label> <label for="password">Password:</label>
<input type="password" id="password" name="password" /> <input type="password" id="password" name="password" />
<label for="discord">Discord:</label> <label for="discord">Discord:</label>
<input type="text" id="discord" name="discord" /> <input type="text" id="discord" name="discord" maxlength="50"/>
<label for="twitch">Twitch:</label> <label for="twitch">Twitch:</label>
<input type="text" id="twitch" name="twitch" /> <input type="text" id="twitch" name="twitch" maxlength="50" />
<label for="youtube">Youtube:</label> <label for="youtube">Youtube:</label>
<input type="text" id="youtube" name="youtube" /> <input type="text" id="youtube" name="youtube" maxlength="50" />
</div> </div>
<hr> <hr>
<!-- THIS DIV IS FOR PASSWORD SETTINGS --> <!-- THIS DIV IS FOR PASSWORD SETTINGS -->

View File

@ -43,7 +43,7 @@
} }
#inputArea { #textInputArea {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: column; flex-direction: column;

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
assets/trophy_main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
assets/trophy_open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,3 +1,6 @@
<?php
session_start();
?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
@ -22,15 +25,15 @@
</thead> </thead>
<tr> <tr>
<td class="divTableLeftColumn">Open</td> <td class="divTableLeftColumn">Open</td>
<td class="divTableRightColumn"><img src="assets/plat3.webp" title="Plat 3" alt="plat 3" width="30px"></td> <td class="divTableRightColumn"><img src="assets/plat3.webp" title="Plat 3" alt="plat 3" width="40px"></td>
</tr> </tr>
<tr> <tr>
<td class="divTableLeftColumn">Intermediate</td> <td class="divTableLeftColumn">Intermediate</td>
<td class="divTableRightColumn"><img src="assets/champ3.webp" title="Champ 3" alt="champ 3" width="30px"></td> <td class="divTableRightColumn"><img src="assets/champ3.webp" title="Champ 3" alt="champ 3" width="40px"></td>
</tr> </tr>
<tr> <tr>
<td class="divTableLeftColumn">Main</td> <td class="divTableLeftColumn">Main</td>
<td class="divTableRightColumn"><img src="assets/SSL.webp" title="SSL" alt="Supersonic Legend" width="30px"></td> <td class="divTableRightColumn"><img src="assets/SSL.webp" title="SSL" alt="Supersonic Legend" width="40px"></td>
</tr> </tr>
</table> </table>

View File

@ -15,8 +15,9 @@ session_start();
<body id="body"> <body id="body">
<div id="contentFrame"> <div id="contentFrame">
<h1>Trojan's Trophy Room</h1> <h1>Trojan's Trophy Room</h1>
<h4><a href="/giveaway" id="giveawayLink">Giveaway Disclaimer</a></h4>
<h3>Choose a division to see results!</h3> <h3>Choose a division to see results!</h3>
<div id="navPanel"> <div class="navPanel">
<a href="open.html" target="dataFrame" class="navLink">OPEN</a> <a href="open.html" target="dataFrame" class="navLink">OPEN</a>
<a href="intermediate.html" target="dataFrame" class="navLink">INTERMEDIATE</a> <a href="intermediate.html" target="dataFrame" class="navLink">INTERMEDIATE</a>
<a href="main.html" target="dataFrame" class="navLink">MAIN</a> <a href="main.html" target="dataFrame" class="navLink">MAIN</a>
@ -27,18 +28,21 @@ session_start();
<iframe src="open.html" name="dataFrame" class="dataFrame" id="dataFrame" onload="resizeIframe(this);"></iframe> <iframe src="open.html" name="dataFrame" class="dataFrame" id="dataFrame" onload="resizeIframe(this);"></iframe>
<p class="newLine"></p> <p class="newLine"></p>
<p class="newLine"></p> <p class="newLine"></p>
<div id="subNav"> <div class="subNav">
<?php <?php
// Is the user is logged in we'll show them a navigation bar with some fancier options
if (isset($_SESSION["userID"])){ if (isset($_SESSION["userID"])){
echo "<a href=\"logout.php \" class=\"navLink\" id=\"logoutButton\">LOGOUT</a>"; echo "<a href=\"logout.php \" class=\"subNavLink\">LOGOUT</a>";
echo "<a href=\"admin/data_management/game_form.php \" target=\"dataFrame\" class=\"subNavLink\">ADD GAME DETAILS</a>";
// Anything we need to show to logged in admins will be below
if (isset($_SESSION["isAdmin"]) && $_SESSION["isAdmin"] == 1){
echo "<a href=\"admin \" class=\"subNavLink\">ADMIN PANEL</a>";
}
} else { } else {
echo "<a href=\"login_page.php \" target=\"dataFrame\" class=\"navLink\" id=\"loginButton\">SIGN IN</a>"; echo "<a href=\"login_page.php \" target=\"dataFrame\" class=\"subNavLink\">SIGN IN</a>";
} }
?> ?>
</div> </div>
</div> </div>
</body> </body>
</html> </html>

View File

@ -18,38 +18,47 @@
<tr> <tr>
<td class="infoTableLeftColumn">TrojanDestinyRL</td> <td class="infoTableLeftColumn">TrojanDestinyRL</td>
<td class="infoTableRightColumn">3</td> <td class="infoTableRightColumn">3</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Endeavor</td> <td class="infoTableLeftColumn">Endeavor</td>
<td class="infoTableRightColumn">2</td> <td class="infoTableRightColumn">2</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">KingKuna</td> <td class="infoTableLeftColumn">KingKuna</td>
<td class="infoTableRightColumn">2</td> <td class="infoTableRightColumn">2</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">vixify</td> <td class="infoTableLeftColumn">vixify</td>
<td class="infoTableRightColumn">2</td> <td class="infoTableRightColumn">2</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Aura</td> <td class="infoTableLeftColumn">Aura</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">imKryss</td> <td class="infoTableLeftColumn">imKryss</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Priickles</td> <td class="infoTableLeftColumn">Priickles</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">toxic_deadpool_x</td> <td class="infoTableLeftColumn">toxic_deadpool_x</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Vix</td> <td class="infoTableLeftColumn">Vix</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_intermediate.png" height="25"></td>
</tr> </tr>
</table> </table>
</div> </div>

View File

@ -30,26 +30,23 @@ session_start();
$password = $_POST["password"]; $password = $_POST["password"];
// THIS SHOULD BE MADE MORE EFFICIENT WITH ONLY ONE QUERY IF POSSIBLE // THIS SHOULD BE MADE MORE EFFICIENT WITH ONLY ONE QUERY IF POSSIBLE
// Grab the password hash for the username (if available) // Grab the password hash for the username (if available)
$sqlGetPasswordHash = $conn->prepare("SELECT password FROM " . $userTableName . " WHERE username=\"" . $username . "\""); $sqlGetData = $conn->prepare("SELECT userID,password,isAdmin FROM " . $userTableName . " WHERE username=\"" . $username . "\"");
$sqlGetUserID = $conn->prepare("SELECT userID FROM " . $userTableName . " WHERE username=\"" . $username . "\"");
$sqlGetisAdmin = $conn->prepare("SELECT isAdmin FROM " . $userTableName . " WHERE username=\"" . $username . "\"");
$sqlGetPasswordHash->execute(); $sqlGetData->execute();
$sqlGetUserID->execute();
$sqlGetisAdmin->execute();
} catch (PDOException $e) { // failed connection } catch (PDOException $e) { // failed connection
echo "Connection failed: " . $e->getMessage(); echo "Connection failed: " . $e->getMessage();
} }
$result = $sqlGetData->fetch(PDO::FETCH_ASSOC);
// Grab the hash from the fetched SQL data // Grab the hash from the fetched SQL data
$passwordHash = $sqlGetPasswordHash->fetchColumn(); $passwordHash = $result["password"];
$userID = $sqlGetUserID->fetchColumn(); $userID = $result["userID"];
$isAdmin = $sqlGetisAdmin->fetchColumn(); $isAdmin = $result["isAdmin"];
// Verify that the entered password matches the hashed one // Verify that the entered password matches the hashed one
@ -58,6 +55,7 @@ if (password_verify($password, $passwordHash)) {
$_SESSION["userID"] = $userID; $_SESSION["userID"] = $userID;
$_SESSION["username"] = $username; $_SESSION["username"] = $username;
$_SESSION["isAdmin"] = $isAdmin; $_SESSION["isAdmin"] = $isAdmin;
// Function from StackOverflow used to get the base URL, to which we append // Function from StackOverflow used to get the base URL, to which we append
// the redirect (where the user came from) // the redirect (where the user came from)
function url(){ function url(){
@ -70,7 +68,7 @@ if (password_verify($password, $passwordHash)) {
} }
$address = url(); $address = url();
echo "<p>$address</p>"; echo "<p>Redirecting to <a href=\"$address\">$address</a>...</p>";
echo "<script>window.top.location.href = \"" . $address . "\";</script>"; echo "<script>window.top.location.href = \"" . $address . "\";</script>";

View File

@ -18,22 +18,27 @@
<tr> <tr>
<td class="infoTableLeftColumn">RU33ER DUCK7</td> <td class="infoTableLeftColumn">RU33ER DUCK7</td>
<td class="infoTableRightColumn">3</td> <td class="infoTableRightColumn">3</td>
<td><img src="assets/trophy_main.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Aura</td> <td class="infoTableLeftColumn">Aura</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_main.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Seqsons</td> <td class="infoTableLeftColumn">Seqsons</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_main.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Stewy</td> <td class="infoTableLeftColumn">Stewy</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_main.png" height="25"></td>
</tr> </tr>
<tr> <tr>
<td class="infoTableLeftColumn">Trash</td> <td class="infoTableLeftColumn">Trash</td>
<td class="infoTableRightColumn">1</td> <td class="infoTableRightColumn">1</td>
<td><img src="assets/trophy_main.png" height="25"></td>
</tr> </tr>
</table> </table>
</div> </div>

View File

@ -0,0 +1,94 @@
function addPlayers(){
// Get number of players from drop-down on page
var numberPlayers = document.getElementById("numPlayers").value;
// Grab the table for the input data
playerDataTable = document.getElementById("playerData");
playerDataTable.innerHTML = ""; // Clear table
// Create the score row
var scoreRow = playerDataTable.insertRow(-1);
var scoreBlue = scoreRow.insertCell(0);
var scoreHeader = scoreRow.insertCell(1);
var scoreOrange = scoreRow.insertCell(2);
scoreRow.id = "scoreRow";
scoreBlue.innerHTML = "<input type=\"text\" name=\"blueScore\" class=\"scoreInput\" id=\"blueScore\" maxlength=\"3\" oninput=\"checkIfScoreTied()\" tabindex=\"1\" required>";
scoreHeader.innerHTML = "<p id=\"scoreHeader\">SCORE</p>";
scoreOrange.innerHTML = "<input type=\"text\" name=\"orangeScore\" class=\"scoreInput\" id=\"orangeScore\" maxlength=\"3\" oninput=\"checkIfScoreTied()\" tabindex=\"1\" required>";
// Create the header row
var header = playerDataTable.insertRow(-1);
var blueHeader = header.insertCell(0);
var headerSpacer = header.insertCell(1);
var orangeHeader = header.insertCell(2);
blueHeader.innerHTML = "<p class=\"tableHeader\">BLUE</p>";
headerSpacer.innerHTML = "<p id=\"playerTableMiddleSpacer\" class=\"tableHeader\"></p>";
orangeHeader.innerHTML = "<p class=\"tableHeader\">ORANGE</p>";
// Create the teamname row
var teamNames = playerDataTable.insertRow(-1);
hometeamName = teamNames.insertCell(0);
teamNameHeader = teamNames.insertCell(1);
awayteamName = teamNames.insertCell(2);
hometeamName.innerHTML = "<input type=\"text\" name=\"blueTeamName\" class=\"teamInput\" maxlength=\"35\" tabindex=\"1\">";
teamNameHeader.innerHTML = "<p id=\"teamNameHeader\"><pre>TEAM\nNAME</pre></p>";
awayteamName.innerHTML = "<input type=\"text\" name=\"orangeTeamName\" class=\"teamInput\" maxlength=\"35\" tabindex=\"1\">";
// Create the subheader
var subHeader = playerDataTable.insertRow(-1);
homeSubHeader = subHeader.insertCell(0);
playerSubHeader = subHeader.insertCell(1);
awaySubHeader = subHeader.insertCell(2);
homeSubHeader.innerHTML = "<p class=\"tableSubHeader\">HOME</p>";
playerSubHeader.innerHTML = "<p class=\"tableSubHeader\">PLAYER</p>";
awaySubHeader.innerHTML = "<p class=\"tableSubHeader\">AWAY</p>";
// Finally create the appropriate number of rows for players, based on the user input
for (var i = 1; i <= numberPlayers; i++) {
row = playerDataTable.insertRow(-1);
var bluePlayer = row.insertCell(0);
var playerNum = row.insertCell(1);
var orangePlayer = row.insertCell(2);
bluePlayer.innerHTML = "<input type=\"text\" name=\"bluePlayer" + i + "\" id=\"" + i + "\" class=\"playerInput\" maxlength=\"30\" tabindex=\"2\">";
playerNum.innerHTML = "- " + i + " -";
orangePlayer.innerHTML = "<input type=\"text\" name=\"orangePlayer" + i + "\" id=\"" + i + "\" class=\"playerInput\" maxlength=\"30\" tabindex=\"3\">";
}
}
function checkIfScoreTied() {
var blueScore = document.getElementById("blueScore").value;
var orangeScore = document.getElementById("orangeScore").value;
var optionsToShow = document.getElementsByClassName("showTeamSelector");
if (!blueScore) {
blueScore = 0;
}
if (!orangeScore) {
orangeScore = 0;
}
if (blueScore == orangeScore) {
if (blueScore != 0) {
for (var i = 0; i < optionsToShow.length; i++) {
optionsToShow[i].style.visibility = "visible";
}
}
} else {
for (var i = 0; i < optionsToShow.length; i++) {
optionsToShow[i].style.visibility = "hidden";
}
}
}

View File

@ -0,0 +1,46 @@
function addPlayers(){
// Get number of players from drop-down on page
var numberPlayers = document.getElementById("numPlayers").value;
// Grab the table for the input data
playerDataTable = document.getElementById("playerData");
playerDataTable.innerHTML = ""; // Clear table
// Create the appropriate number of rows for players, based on the user input
for (var i = 1; i <= numberPlayers; i++) {
row = playerDataTable.insertRow(-1);
var playerNum = row.insertCell(0);
var playerName = row.insertCell(1);
playerNum.innerHTML = i + " -";
playerName.innerHTML = "<input type=\"text\" name=\"winningPlayer" + i + "\" id=\"" + i + "\" class=\"playerInput\" maxlength=\"30\" tabindex=\"3\">";
}
}
function checkIfScoreTied() {
var blueScore = document.getElementById("blueScore").value;
var orangeScore = document.getElementById("orangeScore").value;
var optionsToShow = document.getElementsByClassName("showTeamSelector");
if (!blueScore) {
blueScore = 0;
}
if (!orangeScore) {
orangeScore = 0;
}
if (blueScore == orangeScore) {
if (blueScore != 0) {
for (var i = 0; i < optionsToShow.length; i++) {
optionsToShow[i].style.visibility = "visible";
}
}
} else {
for (var i = 0; i < optionsToShow.length; i++) {
optionsToShow[i].style.visibility = "hidden";
}
}
}

View File

@ -9,6 +9,5 @@ function getURL(path) {
if (path == undefined) { if (path == undefined) {
path = ""; path = "";
} }
console.log(window.location.href + path);
return window.location.href + path; return window.location.href + path;
} }

View File

@ -2,46 +2,6 @@
font-size: 200%; font-size: 200%;
} }
.dataFrame {
flex-grow: 1;
flex-shrink: 1;
margin: auto;
padding: 0;
border: none;
max-width: 90%;
}
.newLine {
width: 100%;
}
#adminHomeButton {
box-shadow: 0px 2px 4px;
font-weight: bold;
}
#adminHomeButton:hover {
color: black;
background-color: rgba(255, 165, 0, .6);
}
#adminHomeButton:active {
box-shadow: 0px 0px 2px;
transform: translateY(2px);
}
#mainHomeButton {
box-shadow: 0px 2px 4px;
font-weight: bold;
}
#mainHomeButton:hover {
color: black;
background-color: rgba(255, 165, 0, .6);
}
#mainHomeButton:active {
box-shadow: 0px 0px 2px;
transform: translateY(2px);
}
#notAnAdmin { #notAnAdmin {
width: 300px; width: 300px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;

View File

@ -2,6 +2,7 @@
width: 800px; width: 800px;
margin: 0; margin: 0;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
} }
#informationContentPanel { #informationContentPanel {
@ -11,44 +12,12 @@
padding-bottom: 15px; padding-bottom: 15px;
flex-grow: 1; flex-grow: 1;
flex-shrink: 1; flex-shrink: 1;
/*box-shadow: 0px 5px 10px;*/
} }
#informationContentPanel h3,h4,h5 { #informationContentPanel h3,h4,h5 {
text-align: center; text-align: center;
} }
.navPanel {
position: relative;
flex-wrap: wrap;
display: flex;
justify-content: center;
gap: 10%;
font-weight: bold;
}
.navPanel a:hover {
color: black;
background-color: rgba(255, 165, 0, .6);
}
.navPanel a:active {
box-shadow: 0px 0px 2px;
transform: translateY(2px);
}
.navLink {
border: 1px solid blue;
border-radius: 3px;
box-shadow: 0px 2px 4px;
text-decoration: none;
color: black;
padding: 10px;
padding-left: 30px;
padding-right: 30px;
margin-top: 10px;
}
#dbManagementPanel { #dbManagementPanel {
gap: 2%; gap: 2%;
} }

View File

@ -32,6 +32,8 @@
padding-right: 10px; padding-right: 10px;
padding-bottom: 30px; padding-bottom: 30px;
text-align: center; text-align: center;
vertical-align: middle;
font-size: 130%;
} }
#divisionsTable th { #divisionsTable th {
@ -45,12 +47,22 @@
padding-top: 5px; padding-top: 5px;
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
vertical-align: middle;
font-size: 130%;
} }
#informationTable tr { #informationTable tr {
border-bottom: 1px solid black; border-bottom: 1px solid black;
} }
#informationTable td {
vertical-align: middle;
}
#informationTable img {
vertical-align: middle;
}
.infoTableLeftColumn { .infoTableLeftColumn {

View File

@ -1,10 +1,24 @@
/* Line break for flex layout */
.newLine {
width: 100%;
}
#body { #body {
background-image: linear-gradient(to right, rgba(0, 0, 255, .8), rgba(255, 165, 0, .8)); background-image: linear-gradient(to right, rgba(0, 0, 255, .8), rgba(255, 165, 0, .8));
padding-top: 2%; padding-top: 2%;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
height:100% flex-grow: 1;
flex-shrink: 1;
} }
/*
CONTENT FRAME
Modifies and defines the iFrame that's holding the content shown to the user
*/
#contentFrame { #contentFrame {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -19,6 +33,7 @@
padding-left: 50px; padding-left: 50px;
padding-right: 50px; padding-right: 50px;
padding-bottom: 40px; padding-bottom: 40px;
box-shadow: 0px 0px 2px;
} }
#contentFrame h1 { #contentFrame h1 {
@ -31,7 +46,15 @@
padding-bottom: 30px; padding-bottom: 30px;
} }
#navPanel {
/*
STANDARD NAVIGATION
For upper/primary controls
*/
.navPanel {
position: relative; position: relative;
flex-wrap: wrap; flex-wrap: wrap;
display: flex; display: flex;
@ -40,26 +63,26 @@
font-weight: bold; font-weight: bold;
} }
.navPanel a:hover {
#navPanel a:hover {
color: black; color: black;
background-color: rgba(255, 165, 0, .6); background-color: rgba(255, 165, 0, .6);
} }
#navPanel a:active { .navPanel a:active {
box-shadow: 0px 2px 3px; box-shadow: 0px 0px 2px;
transform: translateY(4px) translateX(2px); transform: translateY(2px);
} }
.navLink { .navLink {
border: 1px solid blue; border: 1px solid blue;
border-radius: 3px; border-radius: 3px;
box-shadow: 2px 6px 6px; box-shadow: 0px 2px 4px;
text-decoration: none; text-decoration: none;
color: black; color: black;
padding: 10px; padding: 10px;
padding-left: 30px; padding-left: 30px;
padding-right: 30px; padding-right: 30px;
margin-bottom: 8px;
} }
.dataFrame { .dataFrame {
@ -68,47 +91,74 @@
margin: auto; margin: auto;
padding: 0; padding: 0;
border: none; border: none;
/*border-radius: 5px;
box-shadow: 0px 10px 15px;
background-color: rgba(183, 183, 255, 0.6);*/
max-width: 90%; max-width: 90%;
} }
.newLine {
width: 100%; /*
} SUB-NAVIGATION
For all the things at the bottom of the page; log in/out, 'my account', etc.
*/
#subNav { .subNav {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
gap: 2%; gap: 2%;
padding: 5px;
padding-left: 15px;
padding-right: 15px;
font-size: small;
} }
#logoutButton { .subNavLink {
border: 1px solid blue;
border-radius: 3px;
box-shadow: 0px 2px 4px; box-shadow: 0px 2px 4px;
font-weight: bold; text-decoration: none;
color: black;
padding: 5px;
padding-left: 15px;
padding-right: 15px;
} }
#logoutButton:hover {
.subNav a {
box-shadow: 0px 2px 4px;
}
.subNav a:hover {
color: black; color: black;
background-color: rgba(255, 165, 0, .6); background-color: rgba(255, 165, 0, .6);
} }
#logoutButton:active { .subNav a:active {
box-shadow: 0px 0px 2px; box-shadow: 0px 0px 2px;
transform: translateY(2px); transform: translateY(2px);
} }
#loginButton {
box-shadow: 0px 2px 4px;
font-weight: bold;
/*
TEMPORARY
*/
#contentFrame h4 {
margin: auto;
padding-bottom: 15px;
font-size: 250%;
} }
#loginButton:hover {
color: black; #giveawayLink {
background-color: rgba(255, 165, 0, .6); text-decoration:none;
color:blue;
-webkit-text-stroke: 1px white;
} }
#loginButton:active { #giveawayLink:hover {
box-shadow: 0px 0px 2px; color:orange;
transform: translateY(2px); -webkit-text-stroke: 1px black;
} }