2024-07-27 22:03:17 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
require_once __DIR__ . "/../core.php";
|
2024-07-30 21:14:08 +00:00
|
|
|
require_once __DIR__ . "/../lib/pairing.php";
|
2024-08-01 18:50:08 +00:00
|
|
|
require_once __DIR__ . "/../lib/rating.php";
|
2024-08-08 20:31:52 +00:00
|
|
|
require_once __DIR__ . "/../lib/favicon.php";
|
2024-08-04 10:46:27 +00:00
|
|
|
|
|
|
|
ensureSession();
|
2024-07-27 22:03:17 +00:00
|
|
|
|
2024-08-01 18:50:08 +00:00
|
|
|
function renderChoice(): void {
|
|
|
|
[$left, $right] = [$_SESSION["left"], $_SESSION["right"]];
|
|
|
|
|
2024-08-01 19:36:58 +00:00
|
|
|
$csrfToken = $_SESSION["csrfToken"];
|
2024-08-01 18:50:08 +00:00
|
|
|
|
2024-08-02 19:45:51 +00:00
|
|
|
$ajax = isset($_GET["ajax"]);
|
|
|
|
|
2024-08-08 20:31:52 +00:00
|
|
|
$favicon = getFaviconUrl($left, $right);
|
|
|
|
|
2024-08-02 19:45:51 +00:00
|
|
|
if ($ajax) {
|
2024-08-02 15:25:23 +00:00
|
|
|
include __DIR__ . "/../view/fragments/mobSelection.php";
|
|
|
|
} else {
|
2024-08-08 17:30:32 +00:00
|
|
|
$title = "MobMash - Vote";
|
|
|
|
$description = "Which Minecraft mob is the best? Vote for your favorite mob. MobMash uses a chess rating algorithm to calculate a definitive ranking.";
|
2024-08-08 20:31:52 +00:00
|
|
|
|
|
|
|
$content = function() use ($left, $right, $csrfToken, $favicon) {
|
2024-08-02 19:45:51 +00:00
|
|
|
include __DIR__ . "/../view/pages/mobSelection.php";
|
2024-08-02 15:25:23 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
include __DIR__ . "/../view/layout.php";
|
|
|
|
}
|
2024-08-01 18:50:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function reload(): void {
|
2024-08-02 15:25:23 +00:00
|
|
|
if (isset($_GET["ajax"])) {
|
2024-08-08 20:35:06 +00:00
|
|
|
header("LOCATION: ?ajax", true, 303);
|
2024-08-02 15:25:23 +00:00
|
|
|
} else {
|
2024-08-08 20:35:06 +00:00
|
|
|
header("LOCATION: /", true, 303);
|
2024-08-02 15:25:23 +00:00
|
|
|
}
|
2024-08-01 18:50:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function newPairing(): array {
|
2024-08-05 20:42:44 +00:00
|
|
|
if (isset($_SESSION["csrfToken"]) && ($_REQUEST["csrfToken"] != $_SESSION["csrfToken"])) {
|
2024-08-04 12:08:50 +00:00
|
|
|
return [$_SESSION["left"], $_SESSION["right"]];
|
|
|
|
}
|
|
|
|
|
2024-08-01 18:50:08 +00:00
|
|
|
return makeInitialPairing(session_id());
|
|
|
|
}
|
2024-07-27 22:03:17 +00:00
|
|
|
|
2024-08-03 18:36:17 +00:00
|
|
|
const LEFT = 1;
|
|
|
|
const RIGHT = 2;
|
2024-07-27 22:03:17 +00:00
|
|
|
|
2024-08-01 18:50:08 +00:00
|
|
|
function voteAndNextPairing(int $winner): array {
|
2024-08-01 19:36:58 +00:00
|
|
|
if ($_POST["csrfToken"] != $_SESSION["csrfToken"]) {
|
|
|
|
return [$_SESSION["left"], $_SESSION["right"]];
|
|
|
|
}
|
|
|
|
|
2024-08-01 18:50:08 +00:00
|
|
|
addMatch($_SESSION["left"]["id"], $_SESSION["right"]["id"], $winner, session_id());
|
|
|
|
|
2024-08-03 21:38:35 +00:00
|
|
|
$winnerMob = ($winner == LEFT) ? $_SESSION["left"] : $_SESSION["right"];
|
2024-08-01 18:50:08 +00:00
|
|
|
|
|
|
|
[$left, $right] = makeFollowUpPairing(session_id(), $winnerMob["id"]);
|
|
|
|
if (($winner == LEFT && $left["id"] != $winnerMob["id"]) ||
|
|
|
|
($winner == RIGHT && $right["id"] != $winnerMob["id"])
|
|
|
|
) {
|
|
|
|
[$left, $right] = [$right, $left];
|
|
|
|
}
|
|
|
|
|
|
|
|
return [$left, $right];
|
|
|
|
}
|
|
|
|
|
|
|
|
[$_SESSION["left"], $_SESSION["right"], $render] = match (true) {
|
|
|
|
isset($_GET["new"]), !isset($_SESSION["left"]) => [...newPairing(), false],
|
|
|
|
isset($_GET["left"]) => [...voteAndNextPairing(LEFT), false],
|
|
|
|
isset($_GET["right"]) => [...voteAndNextPairing(RIGHT), false],
|
|
|
|
default => [$_SESSION["left"], $_SESSION["right"], true],
|
2024-07-27 22:03:17 +00:00
|
|
|
};
|
|
|
|
|
2024-08-01 18:50:08 +00:00
|
|
|
if ($render) {
|
|
|
|
renderChoice();
|
|
|
|
} else {
|
2024-08-01 19:36:58 +00:00
|
|
|
$_SESSION["csrfToken"] = makeCcrfToken();
|
2024-08-01 18:50:08 +00:00
|
|
|
reload();
|
|
|
|
}
|