diff options
Diffstat (limited to 'pages')
-rw-r--r-- | pages/api/evening.php | 138 | ||||
-rw-r--r-- | pages/api/schedule.php | 73 |
2 files changed, 138 insertions, 73 deletions
diff --git a/pages/api/evening.php b/pages/api/evening.php new file mode 100644 index 0000000..9884e05 --- /dev/null +++ b/pages/api/evening.php @@ -0,0 +1,138 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/session.inc"; global $isLoggedIn; global $isLowerLoggedIn; +if (!$isLoggedIn || $isLowerLoggedIn) { + header("Location: /-/login"); + die(); +} + +$pairs = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/pairs.json"), true); +$ignored = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/evening/ignored.json"), true); +$data = []; + +$members = $members = [ + ...array_map(function ($i) { + $system = "ynmuc"; + $i["_lastFronted"] = -1; + $id = $i["id"]; + $memberData = $i; + + $fronters = array_map(function ($item) { + return $item["id"]; + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]); + + if (in_array($id, $fronters)) { + $i["_lastFronted"] = time(); + } else { + $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true); + + $thisMember = array_filter($switches, function ($item) use ($memberData) { + return in_array($memberData["id"], $item["members"]); + }); + + $thisMember = array_values($thisMember); + $frontingEnd = null; + + if (count($thisMember) > 0) { + $thisIndex = array_search($thisMember[0], $switches); + + $frontingStart = $thisMember[0]; + $frontingEnd = $switches[$thisIndex - 1]; + } + + if ($frontingEnd !== null && isset($frontingStart)) { + $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]); + } + } + + return $i; + }, array_values(array_filter(scoreOrderGlobal(), function ($i) { + return $i["_system"] === "ynmuc"; + }))), + ...array_map(function ($i) { + $system = "gdapd"; + $i["_lastFronted"] = -1; + $id = $i["id"]; + $memberData = $i; + + $fronters = array_map(function ($item) { + return $item["id"]; + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json"), true)["members"]); + + if (in_array($id, $fronters)) { + $i["_lastFronted"] = time(); + } else { + $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json"), true); + + $thisMember = array_filter($switches, function ($item) use ($memberData) { + return in_array($memberData["id"], $item["members"]); + }); + + $thisMember = array_values($thisMember); + $frontingEnd = null; + + if (count($thisMember) > 0) { + $thisIndex = array_search($thisMember[0], $switches); + + $frontingStart = $thisMember[0]; + $frontingEnd = $switches[$thisIndex - 1]; + } + + if ($frontingEnd !== null && isset($frontingStart)) { + $i["_lastFronted"] = strtotime($frontingEnd["timestamp"]); + } + } + + return $i; + }, array_values(array_filter(scoreOrderGlobal(), function ($i) { + return $i["_system"] === "gdapd"; + }))) +]; + +usort($pairs, function ($a, $b) use ($members) { + $times = []; + + foreach ($a[0] as $id) { + $times[] = getLastFronted($members, $id); + } + foreach ($a[1] as $id) { + $times[] = getLastFronted($members, $id); + } + + $timeA = time() - min(...$times); + $times = []; + + foreach ($b[0] as $id) { + $times[] = getLastFronted($members, $id); + } + foreach ($b[1] as $id) { + $times[] = getLastFronted($members, $id); + } + + $timeB = time() - min(...$times); + + return $timeB - $timeA; +}); $pairs = array_values($pairs); foreach ($pairs as $pair): $times = []; + foreach ($pair[0] as $id): $times[] = getLastFronted($members, $id); endforeach; + foreach ($pair[1] as $id): $times[] = getLastFronted($members, $id); endforeach; +endforeach; + +$listI = 0; for ($i = 0; $i < 2; $i++): $pair = $pairs[$listI]; + $data[$i] = []; + if (!in_array(date('Y-m-d', time() + 86400 * $i), $ignored)) { + $data[$i][0] = []; + $data[$i][1] = []; + foreach ($pair[0] as $id): + $data[$i][0][] = getMemberWithoutSystem($id)["display_name"] ?? getMemberWithoutSystem($id)["name"]; + endforeach; + foreach ($pair[1] as $id): + $data[$i][1][] = getMemberWithoutSystem($id)["display_name"] ?? getMemberWithoutSystem($id)["name"]; + endforeach; + } else { + $data[$i] = null; + } +if (!in_array(date('Y-m-d', time() + 86400 * $i), $ignored)) $listI++; if ($listI === count($pairs)) $listI = 0; endfor; + +header("Content-Type: application/json"); +die(json_encode($data, JSON_PRETTY_PRINT));
\ No newline at end of file diff --git a/pages/api/schedule.php b/pages/api/schedule.php deleted file mode 100644 index 7ae263c..0000000 --- a/pages/api/schedule.php +++ /dev/null @@ -1,73 +0,0 @@ -<?php - -require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/session.inc"; global $isLoggedIn; global $_PROFILE; -require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc"; -if (!$isLoggedIn) header("Location: /-/login") and die(); - -header("Content-Type: application/json"); - -$obj = [ - "today" => [], - "tomorrow" => [] -]; - -if (time() >= 1686787200) { - die(json_encode($obj, JSON_PRETTY_PRINT)); -} - -$raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/planner/gdapd.json"), true); -$cloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/planner/ynmuc.json"), true); - -if (isset($raindrops[date('Y-m-d', time())]) || isset($cloudburst[date('Y-m-d', time())])) { - $rd = $raindrops[date('Y-m-d', time())]; - $cb = $cloudburst[date('Y-m-d', time())]; - $longest = max(count($rd), count($cb)); - - for ($x = 0; $x < $longest; $x++) { - $item = []; - $item["raindrops"] = null; - $item["cloudburst"] = null; - - if (isset($rd[$x])) { - $item["raindrops"] = array_map(function ($i) { return getMemberWithoutSystem($i)["display_name"] ?? getMemberWithoutSystem($i)["name"]; }, array_filter($rd[$x], function ($i) { return isset($i); })); - } else if (isset($obj["today"][$x - 1]["raindrops"])) { - $item["raindrops"] = $obj["today"][$x - 1]["raindrops"]; - } - - if (isset($cb[$x])) { - $item["cloudburst"] = array_map(function ($i) { return getMemberWithoutSystem($i)["display_name"] ?? getMemberWithoutSystem($i)["name"]; }, array_filter($cb[$x], function ($i) { return isset($i); })); - } else if (isset($obj["today"][$x - 1]["cloudburst"])) { - $item["cloudburst"] = $obj["today"][$x - 1]["cloudburst"]; - } - - $obj["today"][] = $item; - } -} - -if (isset($raindrops[date('Y-m-d', time() + 86400)]) || isset($cloudburst[date('Y-m-d', time() + 86400)])) { - $rd = $raindrops[date('Y-m-d', time() + 86400)]; - $cb = $cloudburst[date('Y-m-d', time() + 86400)]; - $longest = max(count($rd), count($cb)); - - for ($x = 0; $x < $longest; $x++) { - $item = []; - $item["raindrops"] = null; - $item["cloudburst"] = null; - - if (isset($rd[$x])) { - $item["raindrops"] = array_map(function ($i) { return getMemberWithoutSystem($i)["display_name"] ?? getMemberWithoutSystem($i)["name"]; }, array_filter($rd[$x], function ($i) { return isset($i); })); - } else if (isset($obj["tomorrow"][$x - 1]["raindrops"])) { - $item["raindrops"] = $obj["tomorrow"][$x - 1]["raindrops"]; - } - - if (isset($cb[$x])) { - $item["cloudburst"] = array_map(function ($i) { return getMemberWithoutSystem($i)["display_name"] ?? getMemberWithoutSystem($i)["name"]; }, array_filter($cb[$x], function ($i) { return isset($i); })); - } else if (isset($obj["tomorrow"][$x - 1]["cloudburst"])) { - $item["cloudburst"] = $obj["tomorrow"][$x - 1]["cloudburst"]; - } - - $obj["tomorrow"][] = $item; - } -} - -die(json_encode($obj, JSON_PRETTY_PRINT));
\ No newline at end of file |