summaryrefslogtreecommitdiff
path: root/daemons/next.php
diff options
context:
space:
mode:
Diffstat (limited to 'daemons/next.php')
-rw-r--r--daemons/next.php165
1 files changed, 165 insertions, 0 deletions
diff --git a/daemons/next.php b/daemons/next.php
new file mode 100644
index 0000000..c004a66
--- /dev/null
+++ b/daemons/next.php
@@ -0,0 +1,165 @@
+<?php
+
+$_SERVER['DOCUMENT_ROOT'] = "..";
+
+$ntfy = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/app.json"), true)["ntfy"];
+$pairs = [];
+
+$pairs2 = [
+ ["jybgq"],
+ ["ujcmc"],
+ ["vzyai"],
+ ["alqer"]
+];
+
+// --------------------
+
+if (!function_exists("formatPonypush")) {
+ function formatPonypush($message) {
+ return "Update to Ponypush 3.1.0 or later — (\$PA1$\$" . base64_encode($message) . "\$\$)";
+ }
+}
+
+function getLastFronted($members, $id) {
+ foreach ($members as $member) {
+ if ($member["id"] === $id) {
+ return $member["_lastFronted"];
+ }
+ }
+
+ return -1;
+}
+
+function getMemberWithoutSystem(string $id) {
+ global $isLowerLoggedIn; global $isLoggedIn;
+ $member = null;
+
+ $members2 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/gdapd/members.json"), true);
+ foreach ($members2 as $m) {
+ $m["_system"] = "gdapd";
+ $m["system"] = "gdapd";
+ if ($m["id"] === $id) $member = $m;
+ }
+
+ $members3 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/hrbom/members.json"), true);
+ foreach ($members3 as $m) {
+ $m["_system"] = "hrbom";
+ $m["system"] = "hrbom";
+ if ($m["id"] === $id) $member = $m;
+ }
+
+ if ($isLowerLoggedIn || $isLoggedIn) {
+ $app = $GLOBALS["ColdHazeApp"] ?? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/app.json"), true);
+ $members4 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/other/members.json"), true);
+
+ foreach ($members4 as $m) {
+ $m["_system"] = $app["other"]["id"];
+ $m["system"] = $app["other"]["id"];
+ if ($m["id"] === $id) $member = $m;
+ }
+ }
+
+ return $member;
+}
+
+$members = 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'] . "/data/$system/fronters.json"), true)["members"]);
+
+ if (in_array($id, $fronters)) {
+ $i["_lastFronted"] = time();
+ } else {
+ $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/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;
+}, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/gdapd/members.json"), true));
+
+$requested = []; foreach ([...$pairs, ...$pairs2] as $pair) {
+ array_push($requested, ...$pair);
+} $requested = array_unique($requested);
+
+usort($pairs2, function ($a, $b) use ($members) {
+ $times = [];
+
+ foreach ($a as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+
+ $timeA = time() - min($times);
+ $times = [];
+
+ foreach ($b as $id) {
+ if (getLastFronted($members, $id) > 0) $times[] = getLastFronted($members, $id);
+ }
+
+ $timeB = time() - min($times);
+
+ if ($timeA < 5 || $timeB < 5) {
+ return -INF;
+ } else {
+ return $timeB - $timeA;
+ }
+}); $pairsM = array_values($pairs2);
+
+$requested = array_map(function ($i) { return $i[0]; }, $pairsM);
+
+$fronters = array_map(function ($i) {
+ return $i["id"];
+}, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/gdapd/fronters.json"), true)["members"]);
+
+$requested = array_values(array_filter(array_unique($requested), function ($i) use ($fronters) {
+ return !in_array($i, $fronters);
+}));
+
+$i = 0;
+$list = [$requested[$i]];
+
+if (count($list) > 1) {
+ $str = implode(" or ", array_map(function ($i) {
+ return (getMemberWithoutSystem($i)["display_name"] ?? getMemberWithoutSystem($i)["name"]);
+ }, $list)) . " is fronting today.";
+} elseif (count($list) > 0) {
+ $str = (getMemberWithoutSystem($list[0])["display_name"] ?? getMemberWithoutSystem($list[0])["name"]) . " is fronting today.";
+} else {
+ $str = "We couldn't tell who will front today, sorry.";
+}
+
+$context = stream_context_create([
+ 'http' => [
+ 'method' => 'POST',
+ 'header' =>
+ "Content-Type: text/plain\r\n" .
+ "Title: " . formatPonypush("🎠 Pony fronting today") . "\r\n" .
+ "Priority: high\r\n" .
+ "Tags: schedule\r\n" .
+ "Authorization: Basic " . base64_encode($ntfy["user"] . ":" . $ntfy["password"]),
+ 'content' => formatPonypush($str)
+ ]
+]);
+
+file_get_contents('https://' . $ntfy["server"] . '/main', false, $context);