First commit

This commit is contained in:
GZod01 2025-02-10 17:16:17 +01:00
commit 4d6c5be99e
4 changed files with 378 additions and 0 deletions

37
config.php Normal file
View file

@ -0,0 +1,37 @@
<?php
$_db_events_format = <<<SQL
CREATE TABLE events (
event_code VARCHAR(255) PRIMARY KEY,
event_name VARCHAR(255),
admin_pass VARCHAR(255)
)
SQL;
$_db_sub_events_format = <<<SQL
CREATE TABLE sub_events (
event_code VARCHAR(255),
sub_event_code VARCHAR(255),
sub_event_name VARCHAR(255),
sub_event_type INT(2) COMMENT '0: score, 1: speedrun(time based score)',
start_time INT(11) DEFAULT 0,
PRIMARY KEY (event_code, sub_event_code)
)
SQL;
$_db_scores_format = <<<SQL
CREATE TABLE scores (
event_code VARCHAR(255),
sub_event_code VARCHAR(255),
player_id VARCHAR(255),
score INT(11),
score_time INT(11),
PRIMARY KEY (event_code, sub_event_code, player_id)
)
SQL;
$_db_event_players_format = <<<SQL
CREATE TABLE event_players (
event_code VARCHAR(255),
player_id VARCHAR(255),
player_name VARCHAR(255),
PRIMARY KEY (event_code, player_id)
)
SQL;
$con = mysqli_connect($db_host, $db_usr, $db_pass, $db_db, $db_port);

9
env.php Normal file
View file

@ -0,0 +1,9 @@
<?php
$db_host = "localhost";
$db_usr = "";
$db_pass = "";
$db_db = "makernight_leaderboard";
$db_port = 3306;
if(file_exists("env_override.php")){
include "env_override.php";
}

262
index.php Normal file
View file

@ -0,0 +1,262 @@
<?php
session_start();
require "config.php";
require "leaderboardtools.php";
if (!isset($_GET["event_code"])) {
die("No event code = no leaderboard");
}
$event_code = $_GET["event_code"];
$event_code= mysqli_real_escape_string($con,$event_code);
$event_datas = getEventData($con, $event_code);
if ($event_datas === false) {
die("Event not found");
}
if (isset($_GET["admin"])) {
if (isset($_POST["pass"])) {
$sup = "&error";
if (md5($_POST["pass"]) == $event_datas["admin_pass"]) {
$_SESSION["admin_login"] = true;
$sup = "&success";
}
die(header("Location: /?event_code=$event_code&admin$sup"));
}
if (!isset($_SESSION["admin_login"])) {
?>
<form action="" method="post">
<?= isset($_GET["error"]) ? "<p>Mot de passe incorrect</p>" : "" ?>
<label for=pass>Mot de passe admin:<input type=password name=pass id=pass></label>
<input type=submit value=Valider>
</form>
<?php
} else {
$players_res = mysqli_query($con, "SELECT * FROM `event_players` WHERE event_code='$event_code'");
$players = [];
while ($player = mysqli_fetch_assoc($players_res)) {
$players[] = $player;
}
$sub_events_res = mysqli_query($con, "SELECT * FROM `sub_events` WHERE event_code='$event_code'");
$sub_events = [];
while ($sub_event = mysqli_fetch_assoc($sub_events_res)) {
$sub_events[] = $sub_event;
}
if ($_GET["admin"] === "players") {
if (isset($_GET["add"])) {
if (isset($_POST["player_name"])) {
$player_name = mysqli_real_escape_string($con,$_POST["player_name"]);
$player_id = md5(uniqid($player_name));
mysqli_query($con, "INSERT INTO `event_players` (event_code, player_id, player_name) VALUES ('$event_code', '$player_id', '$player_name')");
}
?>
<form action="" method="post">
<label for=player_name>Nom du joueur:<input type=text name=player_name id=player_name></label>
<input type=submit value=Valider>
</form>
<?php
} else if (isset($_GET["remove"])) {
if (isset($_POST["player_id"])) {
$player_id = $_POST["player_id"];
mysqli_query($con, "DELETE FROM `event_players` WHERE event_code='$event_code' AND player_id='$player_id'");
}
foreach ($players as $player) {
?>
<form action="" method="post">
<input type=hidden name=player_id value="<?= $player["player_id"] ?>">
<input type=submit value="Supprimer <?= htmlspecialchars($player["player_name"]) ?>">
</form>
<?php
}
}
?>
<h1>Admin de l'event <?= $event_datas["event_name"] ?></h1>
<h2><a href="/?event_code=<?= $event_code ?>&admin=players&add">Ajouter un joueur</a></h2>
<h2><a href="/?event_code=<?= $event_code ?>&admin=players&remove">Supprimer un joueur</a></h2>
<p>Liste des joueurs:</p>
<ul>
<?php
foreach ($players as $player) {
?>
<li><?= htmlspecialchars($player["player_name"]) ?></li>
<?php
}
?>
</ul>
<?php
}else if ($_GET["admin"]=="subevents"){
if(isset($_GET["add"])){
if(isset($_POST["sub_event_name"])){
$sub_event_name = mysqli_real_escape_string($con,$_POST["sub_event_name"]);
$sub_event_code = md5(uniqid($sub_event_name));
$sub_event_type = 0;
if(isset($_POST["sub_event_type"])){
$sub_event_type = intval($_POST["sub_event_type"]);
}
mysqli_query($con, "INSERT INTO `sub_events` (event_code, sub_event_code, sub_event_name, sub_event_type) VALUES ('$event_code', '$sub_event_code', '$sub_event_name', $sub_event_type)");
}
?>
<form action="" method="post">
<label for=sub_event_name>Nom du sous event:<input type=text name=sub_event_name id=sub_event_name></label>
<label for=sub_event_type>Type de sous event:<select name=sub_event_type id=sub_event_type>
<option value=0>Score</option>
<option value=1>Speedrun</option>
</select></label>
<input type=submit value=Valider>
</form>
<?php
}
else if(isset($_GET["remove"])){
if(isset($_POST["sub_event_code"])){
$sub_event_code = $_POST["sub_event_code"];
mysqli_query($con, "DELETE FROM `sub_events` WHERE event_code='$event_code' AND sub_event_code='$sub_event_code'");
}
foreach($sub_events as $sub_event){
?>
<form action="" method="post">
<input type=hidden name=sub_event_code value="<?= $sub_event["sub_event_code"] ?>">
<input type=submit value="Supprimer <?= htmlspecialchars($sub_event["sub_event_name"]) ?>">
</form>
<?php
}
}else if (isset($_GET["start"])) {
if (isset($_POST["sub_event_code"])) {
$sub_event_code = $_POST["sub_event_code"];
mysqli_query($con, "UPDATE `sub_events` SET start_time=".time()." WHERE event_code='$event_code' AND sub_event_code='$sub_event_code'");
}
foreach ($sub_events as $sub_event) {
?>
<form action="" method="post">
<input type=hidden name=sub_event_code value="<?= $sub_event["sub_event_code"] ?>">
<input type=submit value="Démarrer <?= htmlspecialchars($sub_event["sub_event_name"]) ?>">
</form>
<?php
}
}
?>
<h1>Admin de l'event <?= $event_datas["event_name"] ?></h1>
<h2><a href="/?event_code=<?= $event_code ?>&admin=subevents&add">Ajouter un sous event</a></h2>
<h2><a href="/?event_code=<?= $event_code ?>&admin=subevents&remove">Supprimer un sous event</a></h2>
<h2><a href="/?event_code=<?= $event_code ?>&admin=subevents&start">Démarrer un sous event</a></h2>
<p>Liste des sous events:</p>
<ul>
<?php
foreach ($sub_events as $sub_event) {
?>
<li><a href="/?event_code=<?= $event_code ?>&sub_event_code=<?= $sub_event["sub_event_code"] ?>"><?= $sub_event["sub_event_name"] ?></a></li>
<?php
}
?>
<?php
}
else if($_GET["admin"]==="score"){
if(isset($_GET["sub_event_code"])){
$sub_event_code = $_GET["sub_event_code"];
$sub_event_datas = getSubEventData($con, $event_code, $sub_event_code);
if($sub_event_datas===false){
die("Sub event not found");
}
$is_speedrun = $sub_event_datas["sub_event_type"]==1;
if(isset($_POST["player_id"]) and ($is_speedrun?isset($_POST["score_time"]):isset($_POST["score"]))){
if($sub_event_datas["start_time"]==0){
die("WARNING ! sub event not started");
}
$player_id = $_POST["player_id"];
$score_time = strtotime($_POST["score_time"]);
$score = 0;
if($is_speedrun){
//TODO: check this if code block when implementing "http request speedrun" (for dev speedrun or other things that can be complete with a special http request)
// SPEEDRUN SCORE CALCULATION
$start_time = $sub_event_datas["start_time"];
$timelength = $score_time-$start_time;
$get_position_in_classment = mysqli_query($con, "SELECT score_time FROM `scores` WHERE event_code='$event_code' AND sub_event_code='$sub_event_code' AND score_time<$score_time ORDER BY score_time ASC");
$position_in_classment = mysqli_num_rows($get_position_in_classment)+1;
$bestscore=$timelength;
if($position_in_classment!=1){
$bestscore = $get_position_in_classment->fetch_all()[0][0];
}
$score = (20000*$bestscore)/($timelength*$position_in_classment);
}else{
$score = intval($_POST["score"]);
}
mysqli_query($con, "INSERT INTO `scores` (event_code, sub_event_code, player_id, score, score_time) VALUES ('$event_code', '$sub_event_code', '$player_id', $score, $score_time) ON DUPLICATE KEY UPDATE score=$score, score_time=$score_time");
}
?>
<h1>Admin de l'event <?= $event_datas["event_name"] ?></h1>
<h2>Sub event: <?= $sub_event_datas["sub_event_name"] ?></h2>
<form action="" method="post">
<label for=player_id>Joueur:<select name=player_id id=player_id>
<?php
foreach($players as $player){
?>
<option value="<?= $player["player_id"] ?>"><?= htmlspecialchars($player["player_name"]) ?></option>
<?php
}
?>
</select></label>
<?php
if($is_speedrun){
?>
<label for=score_time>Temps:<input type=time step="1" name=score_time id=score_time></label>
<?php
}else{
?>
<label for=score>Score:<input type=number name=score id=score></label>
<?php
}
?>
<input type=submit value=Valider>
</form>
<?php
}
?>
<h1>Admin de l'event <?= $event_datas["event_name"] ?></h1>
<p>Liste des sous events:</p>
<ul>
<?php
foreach($sub_events as $sub_event){
?>
<li><a href="/?event_code=<?=$event_code?>&admin=score&sub_event_code=<?=$sub_event["sub_event_code"]?>"><?= $sub_event["sub_event_name"] ?></a></li>
<?php
}
?>
</ul>
<?php
}
?>
<a href="/?event_code=<?= $event_code ?>">Retour</a>
<h1>Admin de l'event <?= $event_datas["event_name"] ?></h1>
<h2><a href="/?event_code=<?= $event_code ?>&admin=players">Gestion des joueurs</a></h2>
<h2><a href="/?event_code=<?= $event_code ?>&admin=subevents">Gestion des sous events</a></h2>
<h2><a href="/?event_code=<?= $event_code ?>&admin=scores">Gestion des scores</a></h2>
<?php
}
}
$sub_event_code = "global";
if (isset($_GET["sub_event_code"])) {
$sub_event_code = $_GET["sub_event_code"];
}
if ($sub_event_code == "global") {
?>
<h1><?= $event_datas["event_name"] ?></h1>
<p>Liste des sous events:</p>
<ul>
<?php
$sub_events_res = mysqli_query($con, "SELECT * FROM `sub_events` WHERE event_code='$event_code'");
$sub_event_lists = [];
while ($sub_event = mysqli_fetch_assoc($sub_events_res)) {
$sub_event_lists[] = $sub_event;
?>
<li><a href="/?event_code=<?= $event_code ?>&sub_event_code=<?= $sub_event["sub_event_code"] ?>"><?= $sub_event["sub_event_name"] ?></a></li>
<?php
}
?>
</ul>
<?= getLeaderBoard($con, $event_code, "global"); ?>
<?php
die();
}
$sub_event_datas = getSubEventData($con, $event_code, $sub_event_code);
if ($sub_event_datas === false) {
die("Sub event not found");
}
?>

70
leaderboardtools.php Normal file
View file

@ -0,0 +1,70 @@
<?php
function getLeaderBoard($con, $event_code,$sub_event_code){
$scores=[];
if($sub_event_code=="global"){
$scores=getScoreGlobal($con,$event_code);
}else{
$scores=getScores($con,$event_code,$sub_event_code);
}
}
function getScores($con, $event_code,$sub_event_code){
$score_res= mysqli_query($con, "SELECT * FROM `scores` WHERE event_code='$event_code' AND sub_event_code='$sub_event_code'");
$scores = [];
while ($score = mysqli_fetch_assoc($score_res)) {
$scores[$score["player_id"]] = $score;
}
return $scores;
}
function getScoreGlobal($con, $event_code){
$sub_event_list=getSubEventsList($con,$event_code);
$scores=[];
foreach($sub_event_list as $sub_event){
$scores_event_list=getScores($con,$event_code,$sub_event["sub_event_code"]);
foreach($scores_event_list as $player_id=>$score){
if(!isset($scores[$player_id])){
$scores[$player_id]=["player_id"=>$player_id,"score"=>0,"player_name"=>$score["player_name"],"sub_scores_list"=>[]];
}
$scores[$player_id]["score"]+=$score["score"];
$scores[$player_id]["sub_scores_list"][$sub_event["sub_event_code"]]=$score["score"];
}
}
return $scores;
}
function getSubEventsList($con,$event_code){
$sub_events_res = mysqli_query($con, "SELECT * FROM `sub_events` WHERE event_code='$event_code'");
$sub_event_lists = [];
while ($sub_event = mysqli_fetch_assoc($sub_events_res)) {
$sub_event_lists[] = $sub_event;
}
return $sub_event_lists;
}
function getEventData($con, $event_code){
$event_datas_res = mysqli_query($con, "SELECT * FROM `events` WHERE event_code='$event_code'");
if (mysqli_num_rows($event_datas_res) == 0) {
return false;
}
$event_datas = mysqli_fetch_assoc($event_datas_res);
if(count($event_datas) == 0){
return false;
}
if($event_datas===false){
return false;
}
return $event_datas;
}
function getSubEventData($con,$event_code,$sub_event_code){
$sub_event_datas_res = mysqli_query($con, "SELECT * FROM `sub_events` WHERE event_code='$event_code' AND sub_event_code='$sub_event_code'");
if (mysqli_num_rows($sub_event_datas_res) == 0) {
return false;
}
$sub_event_datas = mysqli_fetch_assoc($sub_event_datas_res);
if(count($sub_event_datas) == 0){
return false;
}
if($sub_event_datas===false){
return false;
}
return $sub_event_datas;
}
?>