First commit
This commit is contained in:
commit
4d6c5be99e
4 changed files with 378 additions and 0 deletions
37
config.php
Normal file
37
config.php
Normal 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
9
env.php
Normal 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
262
index.php
Normal 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
70
leaderboardtools.php
Normal 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;
|
||||
}
|
||||
?>
|
Loading…
Add table
Add a link
Reference in a new issue