diff options
author | Minteck <contact@minteck.org> | 2022-08-21 17:31:56 +0200 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-08-21 17:31:56 +0200 |
commit | a2df9a69dcc14cb70118cda2ded499055e7ee358 (patch) | |
tree | 6dd283e4e9452d38bce81ddaaae49b5335755842 /includes | |
parent | 84dd0735820b16b60f600284d35183d76547a71f (diff) | |
download | pluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.tar.gz pluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.tar.bz2 pluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.zip |
m. update
Diffstat (limited to 'includes')
198 files changed, 3148 insertions, 275 deletions
diff --git a/includes/banner.php b/includes/banner.php index 8501a61..48bba83 100644 --- a/includes/banner.php +++ b/includes/banner.php @@ -1,18 +1,72 @@ <?php -global $memberData; -global $memberCommonName; -global $memberID; -global $systemCommonName; -global $systemID; -global $system; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/pronouns.php"; -$subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystems.json"), true) ?? []; +$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); +if (!function_exists("getMiniName")) { + function getMiniName(string $name) { + $parts = explode(" ", $name); -function getMember(string $id) { - global $systemID; + if (strlen($parts[0]) > 3 && !str_ends_with($parts[0], "e") && $parts[0] !== "Filly") { + if (str_contains($parts[0], "/")) { + return explode("/", $parts[0])[0]; + } else { + return $parts[0]; + } + } else { + return $name; + } + } +} + +if (!function_exists("getSystemMember")) { + function getSystemMember(string $system, string $id) { + $systemID = $system; + + $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); + $member = null; + + foreach ($members as $m) { + if ($m["id"] === $id) $member = $m; + } + + return $member; + } +} + +if (!function_exists("timeAgo")) { + function timeAgo($time): string { + if (!is_numeric($time)) { + $time = strtotime($time); + } + + $periods = ["second", "minute", "hour", "day", "week", "month", "year", "age"]; + $lengths = array("60", "60", "24", "7", "4.35", "12", "100"); + + $now = time(); + + $difference = $now - $time; + if ($difference <= 10 && $difference >= 0) { + return $tense = "now"; + } elseif ($difference > 0) { + $tense = "ago"; + } else { + $tense = "later"; + } + + for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) { + $difference /= $lengths[$j]; + } + + $difference = round($difference); - $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); + $period = $periods[$j] . ($difference >1 ? "s" :''); + return "{$difference} {$period} {$tense}"; + } +} + +function _header_getMember(string $id, $system) { + $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-members.json"), true); $member = null; foreach ($members as $m) { @@ -22,7 +76,7 @@ function getMember(string $id) { return $member; } -function memberPartOfSubsystem(array $member) { +function _header_memberPartOfSubsystem(array $member) { global $subsystems; $is = false; @@ -35,7 +89,7 @@ function memberPartOfSubsystem(array $member) { return $is; } -function getSubsystemFromMember(array $member) { +function _header_getSubsystemFromMember(array $member) { global $subsystems; $ss = false; @@ -48,179 +102,291 @@ function getSubsystemFromMember(array $member) { return $ss; } -?> - -<style> - .bg-light, .bg-light * { - color: black !important; - } -</style> -<div id="system-info" style="border:1px solid #<?= $memberData["color"] ?>;background:rgba(255, 255, 255, .1);border-radius:10px;display:grid;grid-template-columns: 128px 1fr;"> - <div style="margin:10px;width:100%;display:flex;align-items: center;justify-content: center;"> - <img id="member-icon" src="<?= $memberData['avatar_url'] ?>" alt="" style="height:128px;border-radius:5px;"> - </div> - <div style="padding:10px 10px 10px 20px;text-align:center;"> - <h3 style="margin-bottom:0;"> - <?= $memberCommonName ?> - </h3> - <div style="margin-bottom:0.5rem;"> - <?php if ($metadata["host"] ?? false): ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>This pony is the one who fronts the most often in their system." class="badge rounded-pill bg-primary">Host</span> - <?php endif; ?> - <?php if ($metadata["fictive"] ?? false): ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>This pony is based on the personality, look and behavior of a character that is fictional in this world." class="badge rounded-pill bg-info">Fictive</span> - <?php endif; ?> - <?php if (($metadata["little"] ?? 0) === 2): ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Little</b><br>This pony is mental younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Little</span> - <?php endif; ?> - <?php if (($metadata["little"] ?? 0) === 1): ?> - <?php if ($metadata["regression"] !== null && $metadata["regression"] !== false): $regression = getMember($metadata["regression"]); ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>This pony is capable of regressing their mental age, which causes them to become <?= getMiniName($regression["display_name"] ?? $regression["name"]) ?>, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regresses into <a href="/<?= $system ?>/<?= $regression["name"] ?>"><?= getMiniName($regression["display_name"] ?? $regression["name"]) ?></a></span> - <?php else: ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>This pony is capable of regressing their mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regressor</span> - <?php endif; ?> - <?php endif; ?> - <?php if ($metadata["median"] !== null && $metadata["median"] !== false): $source = getMember($metadata["median"]) ?> - <?php if ($metadata["little"] > 0): ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressed</b><br>This pony has regressed their mental age, making them <?= getMiniName($memberData["display_name"] ?? $memberData["name"]) ?> instead of <?= getMiniName($source["display_name"] ?? $source["name"]) ?>, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-warning">Age regressed from <a href="/<?= $system ?>/<?= $source["name"] ?>"><?= getMiniName($source["display_name"] ?? $source["name"]) ?></a></span> - <?php else: ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facet</b><br>This pony is a facet of <?= getMiniName($source["display_name"] ?? $source["name"]) ?>, meaning they are not totally independent from <?= getMiniName($source["display_name"] ?? $source["name"]) ?>." class="badge rounded-pill bg-light">Facet of <a href="/<?= $system ?>/<?= $source["name"] ?>"><?= getMiniName($source["display_name"] ?? $source["name"]) ?></a></span> - <?php endif; ?> - <?php endif; ?> - <?php if ($metadata["not_talking"] ?? false): ?> - <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Not talking</b><br>Although they are present in the system, this pony does not want to communicate with other members." class="badge rounded-pill bg-danger">Not talking</span> - <?php endif; ?> - <?php if (!($metadata["fictive"] ?? false) && !($metadata["host"] ?? false) && !($metadata["little"] ?? false) && !($metadata["not_talking"] ?? false)): ?> - - <?php endif; ?> - </div> - <div style="display:grid;grid-template-columns: repeat(<?php if (!$metadata["median"]): ?>5<?php else: ?>4<?php endif; ?>, 1fr);" id="member-card"> - <span> - <b>Prefixes: </b> - <?php $index = 0; foreach ($memberData['proxy_tags'] as $proxy): ?> - <code style="color: white;"><?= $proxy["prefix"] ?><?= $proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : "" ?></code><?php if ($index + 2 <= count($memberData["proxy_tags"])) echo(", "); ?> - <?php $index++; endforeach; ?> - </span> - <span> - <b>Pronouns: </b> - <?= $memberData["pronouns"] ?> - </span> - <?php if (!$metadata["median"]): ?> - <span> - <b>Last fronted: </b> - <?php - - $fronters = array_map(function ($item) { - return $item["id"]; - }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["members"]); - - if (in_array($memberID, $fronters)) { - echo("Right now<br>(started <span data-bs-toggle=\"tooltip\" title=\"" . date("D j M Y, G:i:s (e)", strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) . "\">" . trim(timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) . "</span>)"); +function getMemberBannerData(string $id, string $system) { + global $subsystems; + global $travelling; + + $subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystems.json"), true) ?? []; + + $member = getSystemMember($system, $id); + $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$id-metadata.json"), true)); + + $prn = getMemberPronouns($member['pronouns']); + + $prefixes = []; + foreach ($member['proxy_tags'] as $proxy) { + if ($travelling[$member['id']]["travelling"]) { + $prefixes[] = "+" . $proxy["prefix"] . ($proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : ""); + } else { + $prefixes[] = $proxy["prefix"] . ($proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : ""); + } + } + + $lastFronted = null; + if (!$metadata["median"]) { + $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)) { + $lastFronted = [ + 'now' => true, + 'relative' => timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"]), + 'absolute' => date("D j M Y, G:i:s (e)", strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"])), + 'timestamp' => strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"]), + 'duration' => [ + 'seconds' => null, + 'pretty' => null + ] + ]; + } else { + $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-switches.json"), true); + + $thisMember = array_filter($switches, function ($item) { + global $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)) { + $seconds = (strtotime($frontingEnd["timestamp"]) - strtotime($frontingStart["timestamp"])); + + $lastFronted = [ + 'now' => false, + 'relative' => timeAgo($frontingEnd["timestamp"]), + 'absolute' => date("D j M Y, G:i:s (e)", strtotime($frontingEnd["timestamp"])), + 'timestamp' => strtotime($frontingEnd["timestamp"]), + 'duration' => [ + 'seconds' => $seconds, + 'pretty' => $seconds . " seconds" + ] + ]; + if ($seconds > 60) { + if ($seconds > 3600) { + $lastFronted['duration']['pretty'] = round($seconds / 3600) . " hours"; } else { - $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-switches.json"), true); - - $thisMember = array_filter($switches, function ($item) { - global $memberData; - return in_array($memberData["id"], $item["members"]); - }); - $thisMember = array_values($thisMember); - $thisIndex = array_search($thisMember[0], $switches); - - $frontingStart = $thisMember[0]; - $frontingEnd = $switches[$thisIndex - 1]; - - if ($frontingEnd === null) { - echo("A long time ago<br>-"); - } else { - echo('<span data-bs-toggle="tooltip" title="' . date("D j M Y, G:i:s (e)", strtotime($frontingEnd["timestamp"])) . '">' . timeAgo($frontingEnd["timestamp"]) . '</span>'); - - $seconds = (strtotime($frontingEnd["timestamp"]) - strtotime($frontingStart["timestamp"])); - if ($seconds > 60) { - if ($seconds > 3600) { - echo("<br>(for " . round($seconds / 3600) . " hours)"); - } else { - echo("<br>(for " . round($seconds / 60) . " minutes)"); - } - } else { - echo("<br>(for " . $seconds . " seconds)"); - } - } + $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes"; } - - ?> - </span> - <?php endif; ?> - <span> - <span style="vertical-align: middle;position:relative;top:-5px;"><b>Species: </b></span> - <?php foreach ($metadata["species"] ?? [] as $species): ?> - <img data-bs-toggle="tooltip" title="<?php switch ($species) { - case "earth": - echo "Earth pony"; - break; - - case "alicorn": - echo "Alicorn"; - break; - - case "crystal": - echo "Crystal pony"; - break; - - case "pegasus": - echo "Pegasus"; - break; - - case "batpony": - echo "Bat pony"; - break; - - case "unicorn": - echo "Unicorn"; - break; - - default: - echo $species; - break; - } ?>" style="width:32px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?>.png" alt="<?= $species ?>"> - <?php endforeach; ?> - </span> - <span> - <b>System: </b><a class="member-link" href="/<?= $system ?>"><img style="width:24px;border-radius:5px;" src="/assets/uploads/<?= $system ?>.png"> <?= getMiniName($systemCommonName) ?></a> - <?php if (memberPartOfSubsystem($memberData) && getSubsystemFromMember($memberData)["source_type"] !== "member"): $subsystem = getSubsystemFromMember($memberData); ?> - <br><b>Subsystem: </b><a class="member-link" href="/<?= $system ?>/-/subsystem/<?= $subsystem["source"] ?>"><img style="width:24px;border-radius:5px;" src="/assets/uploads/ss-<?= $subsystem['source'] ?>.png"> <?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json"), true)["name"] : $subsystem["source"] ?></a> - <?php endif; ?> - </span> - </div> - <div style="display:grid;grid-template-columns: repeat(2, 1fr);margin-top:5px;"> - <?php - - if ($memberData["name"] === "scootaloo") { - if ((int)date('j') % 2 === 0) { - $metadata["marefriends"] = array_reverse($metadata["marefriends"]); } } + } + } + + $speciesList = []; + foreach ($metadata["species"] ?? [] as $species) { + $name = match ($species) { + "earth" => $metadata["robot"] ? "Robot earth pony" : "Earth pony", + "alicorn" => $metadata["robot"] ? "Robot alicorn" : "Alicorn", + "crystal" => $metadata["robot"] ? "Robot crystal pony" : "Crystal pony", + "pegasus" => $metadata["robot"] ? "Robot pegasus" : "Pegasus", + "batpony" => $metadata["robot"] ? "Robot bat pony" : "Bat pony", + "unicorn" => $metadata["robot"] ? "Robot unicorn" : "Unicorn", + default => $species . "_" . $metadata["robot"] + }; + + $speciesList[] = [ + "id" => $species, + "name" => $name, + "robot" => $metadata["robot"], + "icon" => $species . ($metadata["robot"] ? "-robot" : "") . ".png" + ]; + } + + $systemData = []; + $systemData['page'] = "/" . ($system === "gdapd" ? "raindrops" : "cloudburst"); + $systemData['icon'] = ($system === "gdapd" ? "raindrops" : "cloudburst") . ".png"; + $systemData['name'] = $system === "gdapd" ? "Raindrops" : "Cloudburst"; + $systemData['full_name'] = $system === "gdapd" ? "Raindrops System" : "Cloudburst System"; + $systemData['subsystem'] = null; + $systemData['temporary'] = false; + + if (_header_memberPartOfSubsystem($member) && _header_getSubsystemFromMember($member)["source_type"] !== "member") { + $subsystem = _header_getSubsystemFromMember($member); + $systemData['subsystem'] = [ + "page" => $systemData['page'] . "/-/subsystem/" . $subsystem["source"], + "icon" => "ss-$subsystem[source].png", + "name" => file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystem-$subsystem[source].json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystem-$subsystem[source].json"), true)["name"] : $subsystem["source"] + ]; + } + + if ($travelling[$member['id']]["travelling"]) { + $systemData['page'] = "/" . ($system === "gdapd" ? "cloudburst" : "raindrops"); + $systemData['icon'] = ($system === "gdapd" ? "cloudburst" : "raindrops") . ".png"; + $systemData['name'] = $system === "gdapd" ? "Cloudburst" : "Raindrops"; + $systemData['full_name'] = $system === "gdapd" ? "Cloudburst System" : "Raindrops System"; + $systemData['subsystem'] = null; + $systemData['temporary'] = true; + } + + $marefriends = []; + foreach ($metadata["marefriends"] as $marefriend) { + $mfSystem = explode("/", $marefriend)[0]; + $mfMemberID = explode("/", $marefriend)[1]; + $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) { + return $item["id"] === $mfMemberID; + }); + sort($mfMember); + $mfMember = $mfMember[0]; + + $marefriends[] = [ + "id" => $marefriend, + "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png", + "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]), + "full_name" => $mfMember["display_name"] ?? $mfMember["name"] + ]; + } + + $sisters = []; + foreach ($metadata["sisters"] as $marefriend) { + $mfSystem = explode("/", $marefriend)[0]; + $mfMemberID = explode("/", $marefriend)[1]; + $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) { + return $item["id"] === $mfMemberID; + }); + sort($mfMember); + $mfMember = $mfMember[0]; + + $sisters[] = [ + "id" => $marefriend, + "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png", + "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]), + "full_name" => $mfMember["display_name"] ?? $mfMember["name"] + ]; + } + + $caretakers = null; + + if ($metadata["little"] === 2) { + $caretakers = []; + foreach ($metadata["caretakers"] as $marefriend) { + $mfSystem = explode("/", $marefriend)[0]; + $mfMemberID = explode("/", $marefriend)[1]; + $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) { + return $item["id"] === $mfMemberID; + }); + sort($mfMember); + $mfMember = $mfMember[0]; + + $caretakers[] = [ + "id" => $marefriend, + "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png", + "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]), + "full_name" => $mfMember["display_name"] ?? $mfMember["name"] + ]; + } + } + + $badges = []; + + if ($metadata["host"] ?? false) { + if (!$travelling[$member['id']]["travelling"]) { + $badges[] = [ + "id" => "host", + "color" => "primary", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' the one who fronts the most often in ' . $prn["possessive_det"] . ' system." class="badge rounded-pill bg-primary">Host</span>' + ]; + } + } + + if ($metadata["fictive"] ?? false) { + $badges[] = [ + "id" => "fictive", + "color" => "info", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is fictional in this world." class="badge rounded-pill bg-info">Fictive</span>' + ]; + } + + if ($metadata["protector"] ?? false) { + $badges[] = [ + "id" => "protector", + "color" => "black", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Protector</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' a protector in the system and will front when somepony cannot handle it anymore." class="badge rounded-pill bg-black">Protector</span>' + ]; + } + + if (($metadata["little"] ?? 0) === 2) { + $badges[] = [ + "id" => "little", + "color" => "success", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Little</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' mentally younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Little</span>' + ]; + } + + if (($metadata["little"] ?? 0) === 3) { + $badges[] = [ + "id" => "younger", + "color" => "dark", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Younger</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' younger than the body, but not young enough to be classified as a little." class="badge rounded-pill bg-dark">Younger</span>' + ]; + } + + if (($metadata["little"] ?? 0) === 1) { + if ($metadata["regression"] !== null && $metadata["regression"] !== false) { + $regression = _header_getMember($metadata["regression"], $system); + $badges[] = [ + "id" => "regressor_median", + "color" => "secondary", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' capable of regressing ' . $prn["possessive_det"] . ' mental age, which causes ' . $prn["object"] . ' to become ' . (getMiniName($regression["display_name"] ?? $regression["name"])) . ', temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regresses into <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $regression["name"] . '">'. (getMiniName($regression["display_name"] ?? $regression["name"])) . '</a></span>' + ]; + } else { + $badges[] = [ + "id" => "regressor", + "color" => "secondary", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' capable of regressing ' . $prn["possessive_det"] . ' mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regressor</span>' + ]; + } + } + + if ($metadata["median"] !== null && $metadata["median"] !== false) { + $source = _header_getMember($metadata["median"], $system); + if ($metadata["little"] > 0) { + $badges[] = [ + "id" => "regressed", + "color" => "warning", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressed</b><br>' . ucfirst($prn["subjective"]) . ' has regressed ' . $prn["possessive_det"] . ' mental age, making ' . $prn["object"] . ' ' . getMiniName($member["display_name"] ?? $member["name"]) . ' instead of ' . (getMiniName($source["display_name"] ?? $source["name"])) . ', temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-warning">Age regressed from <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $source["name"] . '">' . (getMiniName($source["display_name"] ?? $source["name"])) . '</a></span>' + ]; + } else { + $badges[] = [ + "id" => "facet", + "color" => "light", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facet</b><br>' . ucfirst($prn["subjective"]) . ' is a facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . ', meaning ' . $prn["subjective"] . ' ' . ($prn["third"] ? "is" : "are") . ' not totally independent of ' . getMiniName($source["display_name"] ?? $source["name"]) . '." class="badge rounded-pill bg-light">Facet of <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $source["name"] . '">' . getMiniName($source["display_name"] ?? $source["name"]) . '</a></span>' + ]; + } + } - ?> - <span> - <b>Marefriends: </b><?= count($metadata["marefriends"]) > 1 ? '<span class="list-separator-mobile"><br></span>' : '' ?> - <?php $index = 0; foreach ($metadata["marefriends"] as $marefriend): $mfSystem = explode("/", $marefriend)[0]; $mfMemberID = explode("/", $marefriend)[1]; $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) { - global $mfMemberID; - return $item["id"] === $mfMemberID; - }); sort($mfMember); $mfMember = $mfMember[0]; ?> - <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($mfMember["display_name"] ?? $mfMember["name"]) ?></a><?php if ($index + 2 <= count($metadata["marefriends"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); ?> - <?php $index++; endforeach; ?> - <?php if (count($metadata["marefriends"]) === 0): ?>-<?php endif; ?> - </span> - <span> - <b>Sisters: </b><?= count($metadata["sisters"]) > 1 ? '<span class="list-separator-mobile"><br></span>' : '' ?> - <?php $index = 0; foreach ($metadata["sisters"] as $marefriend): $mfSystem = explode("/", $marefriend)[0]; $mfMemberID = explode("/", $marefriend)[1]; $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) { - global $mfMemberID; - return $item["id"] === $mfMemberID; - }); sort($mfMember); $mfMember = $mfMember[0]; ?> - <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($mfMember["display_name"] ?? $mfMember["name"]) ?></a><?php if ($index + 2 <= count($metadata["sisters"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); ?> - <?php $index++; endforeach; ?> - <?php if (count($metadata["sisters"]) === 0): ?>-<?php endif; ?> - </span> - </div> - </div> -</div>
\ No newline at end of file + return [ + 'id' => $member['name'], + 'color' => $member["color"] ?? "000000", + 'icon' => [ + "online" => $member['avatar_url'], + "offline" => "pf-$system-$id.webp" + ], + 'median' => $metadata["median"], + 'little' => $metadata["little"] === 2, + 'name' => $member["display_name"] ?? $member["name"], + 'badges' => $badges, + 'prefixes' => $prefixes, + 'pronouns' => getTooltipsFromMark($member["pronouns"]) ?? "<span data-bs-toggle='tooltip' title='Pronouns not specified' class='text-muted'>she/her</span>", + 'pronouns_usage' => $prn, + 'last_fronted' => $lastFronted, + 'species' => $speciesList, + 'system' => $systemData, + 'relations' => [ + 'marefriends' => $marefriends, + 'sisters' => $sisters, + 'caretakers' => $caretakers + ] + ]; +}
\ No newline at end of file diff --git a/includes/bitset.php b/includes/bitset.php new file mode 100644 index 0000000..272325a --- /dev/null +++ b/includes/bitset.php @@ -0,0 +1,73 @@ +<?php + +function parseBitset ($bitset) { + $bin = str_repeat("0", 24 - strlen(decbin($bitset))) . decbin($bitset); + + $sharedMemory = bindec(substr($bin, 0, 2)); + $median = substr($bin, 2, 1) !== "0"; + $little = bindec(substr($bin, 3, 2)); + $protector = substr($bin, 5, 1) !== "0"; + $fictive = substr($bin, 6, 1) !== "0"; + $notTalking = substr($bin, 7, 1) !== "0"; + $host = substr($bin, 8, 1) !== "0"; + $robot = substr($bin, 21, 1) !== "0"; + $species1 = substr($bin, 9, 4); + $species2 = substr($bin, 13, 4); + + $species1 = match ($species1) { + "0001" => "earth", + "0010" => "unicorn", + "0011" => "pegasus", + "0100" => "alicorn", + "0101" => "batpony", + "0110" => "crystal", + default => null, + }; + + $species2 = match ($species2) { + "0001" => "earth", + "0010" => "unicorn", + "0011" => "pegasus", + "0100" => "alicorn", + "0101" => "batpony", + "0110" => "crystal", + default => null, + }; + + return [ + 'shared_memory' => $sharedMemory, + 'median' => $median, + 'protector' => $protector, + 'fictive' => $fictive, + 'little' => $little, + 'not_talking' => $notTalking, + 'host' => $host, + 'robot' => $robot, + 'species' => array_filter([ + $species1, + $species2 + ], function ($i) { + return isset($i); + }) + ]; +} + +function parseMetadata ($metadata) { + if (isset($metadata)) { + if ($metadata["bitset"]) { + $m = parseBitset($metadata["bitset"]); + $m["marefriends"] = $metadata["marefriends"] ?? []; + $m["bitset"] = $metadata["bitset"] ?? []; + $m["sisters"] = $metadata["sisters"] ?? []; + $m["regression"] = $metadata["regression"] ?? null; + $m["caretakers"] = $metadata["caretakers"] ?? []; + $m["median"] = $metadata["median"] ?? null; + } else { + $m = $metadata; + } + + return $m; + } else { + return $metadata; + } +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-content.html b/includes/data.backup/gdapd-content.html new file mode 100644 index 0000000..47ab5c6 --- /dev/null +++ b/includes/data.backup/gdapd-content.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Raindrops System.</p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-fronters.json b/includes/data.backup/gdapd-fronters.json new file mode 100644 index 0000000..d49deb7 --- /dev/null +++ b/includes/data.backup/gdapd-fronters.json @@ -0,0 +1 @@ +{"id":"0eb51883-833d-4a0c-8b3f-9baa17738d20","timestamp":"2022-08-07T21:40:14.401648Z","members":[{"id":"rirgf","uuid":"be0dbae7-11c8-4629-a610-815d71d2131b","name":"scootaloo","display_name":"Scoots/Mia","color":"fea439","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1004449382181122078/final.png","banner":null,"description":null,"created":"2022-04-08T16:43:16.440878Z","keep_proxy":false,"proxy_tags":[{"prefix":"s.","suffix":null}],"privacy":null}]}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-general.json b/includes/data.backup/gdapd-general.json new file mode 100644 index 0000000..21f6d7f --- /dev/null +++ b/includes/data.backup/gdapd-general.json @@ -0,0 +1 @@ +{"id":"gdapd","uuid":"7d9f543e-f742-40f6-9d07-86c3f2983124","name":"Raindrops System","description":"**\"gonna be-gonna be-gonna be my day!\"**\nWe have absolutely no clue what type of system we are (and honestly we don't want to know), we just know it's plurality!\n(description stolen from our friends in the Cloudburst System)","tag":"(Raindrops System)","pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/989632412067696702/system.png","banner":null,"color":null,"created":"2022-04-08T16:43:05.309423Z","privacy":null}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-ghuln-metadata.json b/includes/data.backup/gdapd-ghuln-metadata.json new file mode 100644 index 0000000..d611a44 --- /dev/null +++ b/includes/data.backup/gdapd-ghuln-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 1, + "median": "rirgf", + "regression": null, + "protector": false, + "fictive": true, + "little": 2, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [ + "ynmuc/tmgiu" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-hpwyq-metadata.json b/includes/data.backup/gdapd-hpwyq-metadata.json new file mode 100644 index 0000000..cc8f4f6 --- /dev/null +++ b/includes/data.backup/gdapd-hpwyq-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "crystal" + ], + "marefriends": [ + "ynmuc/kkhbw" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-khsbb-metadata.json b/includes/data.backup/gdapd-khsbb-metadata.json new file mode 100644 index 0000000..b0cf1a2 --- /dev/null +++ b/includes/data.backup/gdapd-khsbb-metadata.json @@ -0,0 +1,15 @@ +{ + "shared_memory": 0, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-lllfw-metadata.json b/includes/data.backup/gdapd-lllfw-metadata.json new file mode 100644 index 0000000..12eeca0 --- /dev/null +++ b/includes/data.backup/gdapd-lllfw-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 0, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [ + "ynmuc/zzise" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-members.json b/includes/data.backup/gdapd-members.json new file mode 100644 index 0000000..bceedfa --- /dev/null +++ b/includes/data.backup/gdapd-members.json @@ -0,0 +1 @@ +[{"id":"ghuln","uuid":"c70080fb-8753-4a9d-a812-f960666a77ab","name":"smolscoots","display_name":"Filly Scoots","color":"bf5e94","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1005906858076282972/4020373__safe_artist-colon-kqaii_character-colon-scootaloo_species-colon-pegasus_species-colon-pony_g4_cherry_cute_cutealoo_drink_eyeclippingthroughhair_eyeb.jpg","banner":null,"description":null,"created":"2022-08-06T19:21:20.641634Z","keep_proxy":false,"proxy_tags":[{"prefix":"fi.","suffix":null}],"privacy":null},{"id":"ztfjz","uuid":"5ca268af-06ef-42af-9613-3e24c3552d72","name":"stuffie","display_name":"Stuffie","color":"9069d9","birthday":null,"pronouns":"it/its","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1004527634832703548/stuffie.png","banner":null,"description":null,"created":"2022-08-03T23:10:01.420647Z","keep_proxy":false,"proxy_tags":[{"prefix":"f.","suffix":null}],"privacy":null},{"id":"lllfw","uuid":"477c7f1b-547f-476d-91f5-90cf16eeea10","name":"zipp","display_name":"Zipp Storm","color":"feedfe","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1003661213676339281/4020729__safe_artist-colon-ninnydraws_character-colon-zippstorm_species-colon-pegasus_species-colon-pony_g5_abstractbackground_adorazipp_blushing_cloud_colore.png","banner":null,"description":null,"created":"2022-04-11T20:56:10.488905Z","keep_proxy":false,"proxy_tags":[{"prefix":"z.","suffix":null}],"privacy":null},{"id":"qraku","uuid":"6d178626-866d-4cd4-96c9-99120dd3f927","name":"starrynight","display_name":"Starry Night","color":"8fa2ff","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001054399843541035/1002349883153457254/aa.png","banner":null,"description":null,"created":"2022-07-28T22:59:28.759014Z","keep_proxy":false,"proxy_tags":[{"prefix":"st.","suffix":null}],"privacy":null},{"id":"tfbob","uuid":"836fb0f7-35ce-4c74-927d-a578fc4f9cd3","name":"violet","display_name":"Violet Dawn","color":"e7e27e","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/1000755118356054137/PT_Violet_copy.png","banner":null,"description":null,"created":"2022-07-24T13:18:23.34571Z","keep_proxy":false,"proxy_tags":[{"prefix":"v.","suffix":null}],"privacy":null},{"id":"qbzxm","uuid":"4f9b04df-0789-4729-bca3-c37c79d92f16","name":"minty","display_name":"Minty","color":"a4febe","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/871135099947741227/965236837847273482/1Minty_in_Sundae_Sundae_Sundae_MLPS5_copy.png","banner":null,"description":null,"created":"2022-04-08T16:43:20.621455Z","keep_proxy":false,"proxy_tags":[{"prefix":"m.","suffix":null}],"privacy":null},{"id":"pabmo","uuid":"602683be-8135-4a00-ae2b-239fe46c6bfc","name":"babs","display_name":"Babs Seed","color":"d69d46","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/983706729659387924/987267468181532672/babs.png","banner":null,"description":null,"created":"2022-06-17T08:00:44.14581Z","keep_proxy":false,"proxy_tags":[{"prefix":"b.","suffix":null}],"privacy":null},{"id":"nabky","uuid":"b8b13183-8d8d-4440-8bb1-bddcec34b4ff","name":"lyra","display_name":"Lyra","color":"99ffdf","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/871135099947741227/965237015408955432/1The_ponies_are_jumping_on_rooftops_S2E18_copy.png","banner":null,"description":null,"created":"2022-04-09T06:58:04.501701Z","keep_proxy":false,"proxy_tags":[{"prefix":"l.","suffix":null}],"privacy":null},{"id":"zdtsg","uuid":"f4d41b23-deb4-4501-b193-768fe5e56337","name":"unknown","display_name":"Unknown","color":"cccccc","birthday":null,"pronouns":"best to ask","avatar_url":"https://cdn.discordapp.com/attachments/996402620975562905/1001041785134518433/pony-town-Unknown_pony-stand-16x_copy.png","banner":null,"description":null,"created":"2022-07-21T20:55:06.06549Z","keep_proxy":false,"proxy_tags":[{"prefix":"{","suffix":"}"}],"privacy":null},{"id":"rirgf","uuid":"be0dbae7-11c8-4629-a610-815d71d2131b","name":"scootaloo","display_name":"Scoots/Mia","color":"fea439","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1004449382181122078/final.png","banner":null,"description":null,"created":"2022-04-08T16:43:16.440878Z","keep_proxy":false,"proxy_tags":[{"prefix":"s.","suffix":null}],"privacy":null},{"id":"zajrk","uuid":"5ddf123d-40ba-49fb-81b9-8d77728dbb3a","name":"mossystorm","display_name":"Mossy Storm","color":"9eff95","birthday":null,"pronouns":"she/they","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/997577513066831933/mossy.png","banner":null,"description":null,"created":"2022-07-15T18:55:35.694303Z","keep_proxy":false,"proxy_tags":[{"prefix":"t.","suffix":null}],"privacy":null}]
\ No newline at end of file diff --git a/includes/data.backup/gdapd-nabky-content.html b/includes/data.backup/gdapd-nabky-content.html new file mode 100644 index 0000000..8df6b9c --- /dev/null +++ b/includes/data.backup/gdapd-nabky-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">even though i'm here and chilling, it's very draining for my headmates to communicate with me, so please try to avoid talking with me. thanks! (also i don't like fronting)</span></p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-nabky-metadata.json b/includes/data.backup/gdapd-nabky-metadata.json new file mode 100644 index 0000000..b625c8a --- /dev/null +++ b/includes/data.backup/gdapd-nabky-metadata.json @@ -0,0 +1,15 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": true, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-pabmo-content.html b/includes/data.backup/gdapd-pabmo-content.html new file mode 100644 index 0000000..6796cec --- /dev/null +++ b/includes/data.backup/gdapd-pabmo-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">hi!!! i like to call scoots mom because this is what she is, and i love sweetie belle cos she is cute <3</span></p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-pabmo-metadata.json b/includes/data.backup/gdapd-pabmo-metadata.json new file mode 100644 index 0000000..71b6b88 --- /dev/null +++ b/includes/data.backup/gdapd-pabmo-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 1, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 2, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [ + "ynmuc/gevde" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-planner.json b/includes/data.backup/gdapd-planner.json new file mode 100644 index 0000000..a79adba --- /dev/null +++ b/includes/data.backup/gdapd-planner.json @@ -0,0 +1 @@ +{"2022-08-08":["rirgf"],"2022-08-09":["pabmo","qbzxm","ztfjz","lllfw"],"2022-08-10":[],"2022-08-11":[],"2022-08-12":[],"2022-08-13":[],"2022-08-14":[]}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-qbzxm-content.html b/includes/data.backup/gdapd-qbzxm-content.html new file mode 100644 index 0000000..90e39f1 --- /dev/null +++ b/includes/data.backup/gdapd-qbzxm-content.html @@ -0,0 +1 @@ +<p>Hello there, I'm Minty (not a fictive though)! I'm a member in the Raindrops System.</p><p>I... don't really have much to say here, I guess I can say I'm the... second host? Like I'm the one to front the most often after Scoots.</p><p>See ya!</p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-qbzxm-metadata.json b/includes/data.backup/gdapd-qbzxm-metadata.json new file mode 100644 index 0000000..574370e --- /dev/null +++ b/includes/data.backup/gdapd-qbzxm-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": true, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [ + "ynmuc/erknz" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-qraku-metadata.json b/includes/data.backup/gdapd-qraku-metadata.json new file mode 100644 index 0000000..f55873f --- /dev/null +++ b/includes/data.backup/gdapd-qraku-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [ + "ynmuc/xcjhj" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-rirgf-content.html b/includes/data.backup/gdapd-rirgf-content.html new file mode 100644 index 0000000..5d41c45 --- /dev/null +++ b/includes/data.backup/gdapd-rirgf-content.html @@ -0,0 +1 @@ +<p>Hey there!</p><p>My name is Scootaloo, and I am the host of the Raindrops System. We became plural "by accident" after I had to deal with high stress. <a href="/raindrops/minty">Minty</a> formed first and then others came; and now we're living happily! <a href="/page/raindrops/babs">Babs</a> is our little last one and she is cute.</p><p>Besides that, I don't really have much to say... Oh yeah, I'm also an alicorn; I became one after <a href="/page/cloudburst/sunnystarscout">Sunny</a> turned me into one!</p><p>Scootaloo scoot scoot scoot scootaloo</p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-rirgf-metadata.json b/includes/data.backup/gdapd-rirgf-metadata.json new file mode 100644 index 0000000..3fa70c5 --- /dev/null +++ b/includes/data.backup/gdapd-rirgf-metadata.json @@ -0,0 +1,15 @@ +{ + "bitset": 9085312, + "regression": "ghuln", + "marefriends": [ + "ynmuc/kkhbw", + "ynmuc/xbvwt" + ], + "sisters": [ + "ynmuc/erefx", + "ynmuc/zhtzs", + "ynmuc/gevde", + "ynmuc/jnbae" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-subsystems.json b/includes/data.backup/gdapd-subsystems.json new file mode 100644 index 0000000..d640e4a --- /dev/null +++ b/includes/data.backup/gdapd-subsystems.json @@ -0,0 +1,9 @@ +[ + { + "source": "rirgf", + "source_type": "member", + "members": [ + "ghuln" + ] + } +]
\ No newline at end of file diff --git a/includes/data.backup/gdapd-switches.json b/includes/data.backup/gdapd-switches.json new file mode 100644 index 0000000..6544d1e --- /dev/null +++ b/includes/data.backup/gdapd-switches.json @@ -0,0 +1 @@ +[{"id":"0eb51883-833d-4a0c-8b3f-9baa17738d20","timestamp":"2022-08-07T21:40:14.401648Z","members":["rirgf"]},{"id":"cf244a4f-c224-47a2-b0f2-8c94252f002a","timestamp":"2022-08-07T17:48:24.086037Z","members":["qraku"]},{"id":"3faf8e32-8270-418f-bdf4-5d309df1dc93","timestamp":"2022-08-06T17:29:22.598734Z","members":["rirgf"]},{"id":"65729cea-2351-45ed-a892-fe3719824b9b","timestamp":"2022-08-06T11:50:54.921437Z","members":["zajrk"]},{"id":"ad3b3d51-417c-4d7f-bbb0-3d788ea357ad","timestamp":"2022-08-05T21:07:14.043973Z","members":["tfbob"]},{"id":"f79729b4-1d7c-49fe-b4fa-f0a7dd39b53c","timestamp":"2022-08-05T20:48:10.001822Z","members":["qbzxm"]},{"id":"82321da0-ffa7-4635-b3d2-0b5f1ec9d9ce","timestamp":"2022-08-04T22:37:33.586985Z","members":["rirgf"]},{"id":"67c7eee0-0bfa-40f4-bac8-cfae90fcaaf0","timestamp":"2022-08-04T18:43:23.315562Z","members":["qbzxm"]},{"id":"3b25583f-1b1f-4ad3-ae93-407576994f92","timestamp":"2022-08-04T10:05:14.051056Z","members":["rirgf"]},{"id":"bc8d3507-17d1-4df7-8845-81f9a4843b45","timestamp":"2022-08-03T22:17:42.734142Z","members":["ztfjz"]},{"id":"4964e024-57a3-4b3f-9aef-e83fbdad0607","timestamp":"2022-08-01T20:11:28.55833Z","members":["rirgf"]},{"id":"fed1552f-e599-4ffe-b07b-907004ac4ab1","timestamp":"2022-08-01T20:04:25.509838Z","members":["pabmo"]},{"id":"d5b3828d-56e5-49ad-bd88-5029f5d7b22b","timestamp":"2022-08-01T19:43:48.588965Z","members":["rirgf"]},{"id":"ce44d6af-f0ae-4cb8-96a9-fe098eb46c6e","timestamp":"2022-08-01T19:01:29.115782Z","members":["qbzxm"]},{"id":"a6f6c503-8bb7-425e-a4e7-8866a79aee7b","timestamp":"2022-08-01T14:05:00.315012Z","members":["rirgf"]},{"id":"27845666-2a76-4d13-8a9d-5c17710fa370","timestamp":"2022-08-01T12:26:15.568718Z","members":["lllfw"]},{"id":"52ce7c22-a545-47ed-922f-8963c11a5ea2","timestamp":"2022-07-31T21:19:59.722328Z","members":["rirgf"]},{"id":"4272500e-7642-4d3d-8358-5ac3974f4fff","timestamp":"2022-07-31T17:06:55.285503Z","members":["qbzxm"]},{"id":"c4763a2f-b9a1-4b50-b2a9-071c38d72f02","timestamp":"2022-07-31T08:05:43.313585Z","members":["rirgf"]},{"id":"21ac816a-e8b1-426f-93ad-fc0df3c0530b","timestamp":"2022-07-30T20:22:25.228871Z","members":["qbzxm"]},{"id":"25445dd3-8ac7-404c-a52e-dad17da18ede","timestamp":"2022-07-29T20:14:19.761376Z","members":["qraku"]},{"id":"7040be4e-6f03-4138-99fe-16056fe5e576","timestamp":"2022-07-29T09:09:09.176402Z","members":["rirgf"]},{"id":"ef79772b-349c-4cc3-bbde-368a6ac2550c","timestamp":"2022-07-28T22:59:36.510106Z","members":["qraku"]},{"id":"fc93240f-d6f2-4bab-a069-e0c9981d2785","timestamp":"2022-07-28T21:52:05.87279Z","members":["zdtsg"]},{"id":"3126221d-1144-46ab-9c46-6e291b529556","timestamp":"2022-07-28T19:55:12.081418Z","members":["rirgf"]},{"id":"d4f080c6-4b1f-4089-9b89-88cf22d0f353","timestamp":"2022-07-28T18:06:22.938226Z","members":["tfbob"]},{"id":"43d22b42-7c2b-446e-a3d1-b957b7d9c712","timestamp":"2022-07-28T05:25:56.910286Z","members":["rirgf"]},{"id":"1715e122-4131-4085-bec2-6e2c0f149940","timestamp":"2022-07-27T21:42:13.259365Z","members":["pabmo"]},{"id":"f0b37bca-16c3-4698-b4be-7ec4afff2dc5","timestamp":"2022-07-27T18:46:36.560704Z","members":["rirgf"]},{"id":"c75db3f3-634a-4505-957b-cb423be0ad13","timestamp":"2022-07-27T16:12:22.243247Z","members":["zajrk"]},{"id":"b6c23549-5bc1-4e90-8fa4-48da5fc3b20b","timestamp":"2022-07-27T10:09:31.651745Z","members":["qbzxm"]},{"id":"20cee1ba-0a68-4c48-8485-849e2dc4e157","timestamp":"2022-07-26T21:04:51.450343Z","members":["rirgf"]},{"id":"1757ad08-90a6-4e82-b63d-afdfa3742c6e","timestamp":"2022-07-26T17:30:36.587593Z","members":["qbzxm"]},{"id":"ef14dae6-9818-4311-8dc7-1d0254a231db","timestamp":"2022-07-26T15:57:02.524728Z","members":["rirgf"]},{"id":"b090b4d3-562b-42fe-973d-f8962622ce41","timestamp":"2022-07-26T14:39:29.438447Z","members":["tfbob"]},{"id":"32b9da79-5f26-4649-bc20-19095a179167","timestamp":"2022-07-25T20:59:30.709838Z","members":["rirgf"]},{"id":"d1a3b61b-243c-4584-a5bb-9d8c00975282","timestamp":"2022-07-25T20:32:25.953745Z","members":["qbzxm"]},{"id":"397c4c5b-bee1-4554-958f-d3e2f6134a36","timestamp":"2022-07-24T17:43:00.397207Z","members":["rirgf"]},{"id":"f13f4738-e8fe-46c2-bd5b-bb131eaa7c10","timestamp":"2022-07-24T14:32:38.054365Z","members":["tfbob"]},{"id":"45668f5d-a891-478b-ac2b-7d31ce73421c","timestamp":"2022-07-24T08:58:33.529167Z","members":["rirgf"]},{"id":"0b7f4875-72fa-4243-a17b-604148103fe7","timestamp":"2022-07-23T21:45:15.230386Z","members":["qbzxm"]},{"id":"844bdef9-2b39-4d75-b001-aa4721f2ff1e","timestamp":"2022-07-23T21:34:44.271635Z","members":["pabmo"]},{"id":"985e06b3-3a97-4e7d-8e41-3c7d0ac06ffa","timestamp":"2022-07-23T18:18:21.309123Z","members":["rirgf"]},{"id":"1541719c-0f41-49e8-a609-483cf382b35d","timestamp":"2022-07-23T14:50:21.26306Z","members":["qbzxm"]},{"id":"512fa59d-765a-439f-a6db-8c866ccf0c6a","timestamp":"2022-07-22T15:46:19.2312Z","members":["rirgf"]},{"id":"f6b66e60-c856-41d4-8496-59975da4423d","timestamp":"2022-07-22T15:34:21.162526Z","members":["qbzxm"]},{"id":"84e8dbdf-b918-46e9-b4a3-bcdb7ee33b03","timestamp":"2022-07-21T13:52:07.216638Z","members":["rirgf"]},{"id":"e2b8e446-3e9b-4bb1-be22-ceb3258ceb8a","timestamp":"2022-07-21T12:03:32.175019Z","members":["pabmo"]},{"id":"c6192b28-0294-4e35-81cf-e9639ea3f559","timestamp":"2022-07-20T14:44:15.411925Z","members":["rirgf"]},{"id":"f88592a9-14b7-4889-9d9e-b93a21c62f53","timestamp":"2022-07-20T14:07:50.524272Z","members":["pabmo"]},{"id":"4399ab86-9f74-4ad0-8627-c3be32cf737c","timestamp":"2022-07-17T17:07:18.349492Z","members":["rirgf"]},{"id":"3f7b4427-a02b-4deb-9db9-e9da7d1b8328","timestamp":"2022-07-17T16:18:33.470761Z","members":["qbzxm"]},{"id":"71ce6e4a-929d-4ecd-b91b-c3d39a9543bd","timestamp":"2022-07-16T15:18:26.473768Z","members":["rirgf"]},{"id":"3b6b0887-c419-4f9a-913e-0ac0ecef6373","timestamp":"2022-07-16T13:42:24.106996Z","members":["zajrk"]},{"id":"58a0e1fa-20c0-492b-a8fc-ebbf67c460a9","timestamp":"2022-07-15T19:03:54.617821Z","members":["rirgf"]},{"id":"fc6b0777-ca66-42c6-8c7a-ae4d2036a5ca","timestamp":"2022-07-14T21:00:19.67511Z","members":["qbzxm"]},{"id":"6b871057-5004-4b71-9be2-4d2e700738a6","timestamp":"2022-07-13T09:59:26.547608Z","members":["rirgf"]},{"id":"1a8736fd-b23f-40c9-90d2-8d6a23470baf","timestamp":"2022-07-13T09:32:43.799837Z","members":["lllfw"]},{"id":"dca1c1a2-83e5-4f51-9b89-fc4d11929089","timestamp":"2022-07-07T20:04:12.645966Z","members":["rirgf"]},{"id":"8aa28015-1047-448b-b0b7-16e7fc32c969","timestamp":"2022-07-06T20:14:51.040455Z","members":["qbzxm"]},{"id":"eeb4cfac-14c1-4207-a477-82d3307de2f5","timestamp":"2022-05-01T10:41:26.557008Z","members":["rirgf"]},{"id":"6fef8d73-dccb-40b6-9ace-4463da383a94","timestamp":"2022-04-16T08:42:25.46511Z","members":[]},{"id":"16bbd909-af89-4454-ac7a-3a8209a624e2","timestamp":"2022-04-16T08:41:28.285794Z","members":["qbzxm"]}]
\ No newline at end of file diff --git a/includes/data.backup/gdapd-tfbob-content.html b/includes/data.backup/gdapd-tfbob-content.html new file mode 100644 index 0000000..275ba1d --- /dev/null +++ b/includes/data.backup/gdapd-tfbob-content.html @@ -0,0 +1 @@ +<p>Henlo! I am Violet Dawn, and I am a bat pony!</p><p>I really like all sorts of fruits (they're so tasty) but I hate light and loud/high pitched sounds. Besides that, I don't really have much to say; also I love Sky Dream.</p><p>eeeeeeeeee~!</p>
\ No newline at end of file diff --git a/includes/data.backup/gdapd-tfbob-metadata.json b/includes/data.backup/gdapd-tfbob-metadata.json new file mode 100644 index 0000000..0cc12cd --- /dev/null +++ b/includes/data.backup/gdapd-tfbob-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "batpony" + ], + "marefriends": [ + "ynmuc/zzise" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-zajrk-metadata.json b/includes/data.backup/gdapd-zajrk-metadata.json new file mode 100644 index 0000000..1f1aa56 --- /dev/null +++ b/includes/data.backup/gdapd-zajrk-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [ + "ynmuc/mglyq" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/gdapd-ztfjz-metadata.json b/includes/data.backup/gdapd-ztfjz-metadata.json new file mode 100644 index 0000000..41617f3 --- /dev/null +++ b/includes/data.backup/gdapd-ztfjz-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [], + "sisters": [ + "ynmuc/vvsxf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/migrate.js b/includes/data.backup/migrate.js new file mode 100644 index 0000000..716096f --- /dev/null +++ b/includes/data.backup/migrate.js @@ -0,0 +1,94 @@ +const fs = require('fs'); + +for (let file of fs.readdirSync(".").filter(i => i.endsWith("-metadata.json"))) { + let size = fs.readFileSync(file).toString().length; + let json = JSON.parse(fs.readFileSync(file).toString()); + console.log("-- " + file + " --"); + + if (!json['bitset']) { + console.log("Migrating file..."); + let p1r = "0".repeat(2 - json['shared_memory'].toString(2).length) + json['shared_memory'].toString(2); + let p2r = json['median'] ? "1" : "0"; + let p3r = "0".repeat(2 - json['little'].toString(2).length) + json['little'].toString(2); + let p4r = json['protector'] ? "1" : "0"; + let p5r = json['fictive'] ? "1" : "0"; + let p6r = json['not_talking'] ? "1" : "0"; + let p7r = json['host'] ? "1" : "0"; + let p8a = json['species'][0]; + let p9a = json['species'][1]; + + let p8r = "0000"; + switch (p8a) { + case "earth": + p8r = "0001"; + break; + + case "unicorn": + p8r = "0010"; + break; + + case "pegasus": + p8r = "0011"; + break; + + case "alicorn": + p8r = "0100"; + break; + + case "batpony": + p8r = "0101"; + break; + + case "crystal": + p8r = "0110"; + break; + } + + let p9r = "0000"; + switch (p9a) { + case "earth": + p9r = "0001"; + break; + + case "unicorn": + p9r = "0010"; + break; + + case "pegasus": + p9r = "0011"; + break; + + case "alicorn": + p9r = "0100"; + break; + + case "batpony": + p9r = "0101"; + break; + + case "crystal": + p9r = "0110"; + break; + } + + console.log("Generated bitset: " + p1r + p2r + p3r + p4r + p5r + p6r + p7r + p8r + p9r + "0000000"); + + let ret = { + bitset: parseInt(p1r + p2r + p3r + p4r + p5r + p6r + p7r + p8r + p9r + "0000000", 2), + regression: json['regression'] ?? null, + marefriends: json['marefriends'] ?? [], + sisters: json['sisters'] ?? [], + caretakers: json['caretakers'] ?? [] + } + + console.log("Saving..."); + fs.writeFileSync(file, JSON.stringify(ret, null, 2)); + let now = JSON.stringify(ret, null, 2).length; + + console.log("Saved space: " + (size - now) + " bytes, " + (((size - now) / size) * 100).toFixed(2) + "%"); + } else { + console.log("File has already been migrated, ignoring."); + } + + console.log(""); +}
\ No newline at end of file diff --git a/includes/data.backup/refresh.json b/includes/data.backup/refresh.json new file mode 100644 index 0000000..7eb983a --- /dev/null +++ b/includes/data.backup/refresh.json @@ -0,0 +1 @@ +{"timestamp":1659968112,"duration":10}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-content.html b/includes/data.backup/ynmuc-content.html new file mode 100644 index 0000000..7c84b7f --- /dev/null +++ b/includes/data.backup/ynmuc-content.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Cloudburst System system.</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-erefx-content.html b/includes/data.backup/ynmuc-erefx-content.html new file mode 100644 index 0000000..585463f --- /dev/null +++ b/includes/data.backup/ynmuc-erefx-content.html @@ -0,0 +1 @@ +<p><a href="/raindrops/scootaloo">Scoots</a><span style="color:rgb(255,255,255);">' sister. Definitely not written by Scoots /s</span></p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-erefx-metadata.json b/includes/data.backup/ynmuc-erefx-metadata.json new file mode 100644 index 0000000..e87109e --- /dev/null +++ b/includes/data.backup/ynmuc-erefx-metadata.json @@ -0,0 +1,19 @@ +{ + "shared_memory": 0, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [ + "ynmuc/xbvwt" + ], + "sisters": [ + "gdapd/rirgf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-erknz-metadata.json b/includes/data.backup/ynmuc-erknz-metadata.json new file mode 100644 index 0000000..e3507ef --- /dev/null +++ b/includes/data.backup/ynmuc-erknz-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [ + "gdapd/qbzxm" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-fronters.json b/includes/data.backup/ynmuc-fronters.json new file mode 100644 index 0000000..31c8c1e --- /dev/null +++ b/includes/data.backup/ynmuc-fronters.json @@ -0,0 +1 @@ +{"id":"d9bdd6d6-2794-4f4e-8835-db33290d7903","timestamp":"2022-08-08T08:46:10.402919Z","members":[{"id":"jnbae","uuid":"7adba16f-e0fe-4b4b-b5a2-658d1d73581f","name":"mistycloud","display_name":"Misty Cloud","color":"7083de","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/999794243113603103/misty.png","banner":null,"description":null,"created":"2022-06-22T07:49:16.85348Z","keep_proxy":false,"proxy_tags":[{"prefix":"c.","suffix":null}],"privacy":null}]}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-general.json b/includes/data.backup/ynmuc-general.json new file mode 100644 index 0000000..a0229be --- /dev/null +++ b/includes/data.backup/ynmuc-general.json @@ -0,0 +1 @@ +{"id":"ynmuc","uuid":"ade46823-206b-4b0c-ad3c-caae934a5f3b","name":"Cloudburst System","description":"**\"gonna be-gonna be-gonna be my day!\"**\nwe have absolutely no clue what type of system we are, we just know it's plurality!","tag":"| Cloudburst System","pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/923647860396929035/servericon.png","banner":null,"color":null,"created":"2019-12-01T20:21:59.755765Z","privacy":null}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-gevde-metadata.json b/includes/data.backup/ynmuc-gevde-metadata.json new file mode 100644 index 0000000..53960e6 --- /dev/null +++ b/includes/data.backup/ynmuc-gevde-metadata.json @@ -0,0 +1,19 @@ +{ + "shared_memory": 1, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 2, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [ + "gdapd/pabmo" + ], + "sisters": [ + "gdapd/rirgf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-gfhsr-content.html b/includes/data.backup/ynmuc-gfhsr-content.html new file mode 100644 index 0000000..5abc149 --- /dev/null +++ b/includes/data.backup/ynmuc-gfhsr-content.html @@ -0,0 +1 @@ +<p>hello... i'm fluttershy... as my name suggests i'm quite shy at first but once i get my bearings and we've talked for a bit i open up a bit more...</p><p>thanks for reading my page</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-gfhsr-metadata.json b/includes/data.backup/ynmuc-gfhsr-metadata.json new file mode 100644 index 0000000..a21d651 --- /dev/null +++ b/includes/data.backup/ynmuc-gfhsr-metadata.json @@ -0,0 +1,15 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-jnbae-metadata.json b/includes/data.backup/ynmuc-jnbae-metadata.json new file mode 100644 index 0000000..2ae4ef9 --- /dev/null +++ b/includes/data.backup/ynmuc-jnbae-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [], + "sisters": [ + "gdapd/rirgf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-kkhbw-content.html b/includes/data.backup/ynmuc-kkhbw-content.html new file mode 100644 index 0000000..0f6c62a --- /dev/null +++ b/includes/data.backup/ynmuc-kkhbw-content.html @@ -0,0 +1 @@ +<p>Hello!</p><p>I'm Twi, or Leah. Whichever you prefer honestly!</p><p>I'm the host for the <a href="https://ponies.equestria.horse/Cloudburst:About">Cloudburst System</a>...</p><p>I was not the original host, we don't know who they were but I guess they're gone now...</p><p>Honestly I'm <i>already</i> out of ideas on what to put here .c.</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-kkhbw-metadata.json b/includes/data.backup/ynmuc-kkhbw-metadata.json new file mode 100644 index 0000000..37a9ec0 --- /dev/null +++ b/includes/data.backup/ynmuc-kkhbw-metadata.json @@ -0,0 +1,18 @@ +{ + "shared_memory": 2, + "median": false, + "regression": "tmgiu", + "protector": false, + "fictive": true, + "little": 1, + "not_talking": false, + "host": true, + "species": [ + "pegasus" + ], + "marefriends": [ + "gdapd/rirgf", + "gdapd/hpwyq" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-members.json b/includes/data.backup/ynmuc-members.json new file mode 100644 index 0000000..999e82c --- /dev/null +++ b/includes/data.backup/ynmuc-members.json @@ -0,0 +1 @@ +[{"id":"rdstg","uuid":"5236c613-18e9-429f-91f4-dd96cc7c76f4","name":"unknown","display_name":"Twilight (Unknown)","color":"b2b2b2","birthday":null,"pronouns":"best to ask","avatar_url":"https://cdn.discordapp.com/attachments/872535986943426670/896673942872420372/unknown.png","banner":null,"description":"Hello! I'm likely not entirely sure who I am, but I'm using Twilight Sparkle as a temporary identity to stay calm and not panic while I figure out what's going on.\n\nI can either be an existing headmate who can't work out they're fronting, a blend of multiple headmates who can't work out who we are, or a new pony trying to figure themselves out. If you're unsure, feel free to ask!","created":"2021-10-07T10:07:27.811956Z","keep_proxy":false,"proxy_tags":[{"prefix":"{","suffix":"}"}],"privacy":null},{"id":"vncoa","uuid":"98604b5b-568d-46d3-aa9e-17a3a7c70d3a","name":"mintygrape","display_name":"Minty Grape","color":"92429a","birthday":null,"pronouns":"they/them","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913781/902177701836754994/Screenshot_20211025-134914_Chrome.jpg","banner":null,"description":null,"created":"2021-10-25T12:49:48.211953Z","keep_proxy":false,"proxy_tags":[{"prefix":"m.","suffix":null}],"privacy":null},{"id":"gfhsr","uuid":"36c0f97d-bb15-45f3-a4d4-d23ad41f0e6f","name":"fluttershy","display_name":"Fluttershy","color":"faf5ab","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913778/909143419652300810/2096296.png","banner":null,"description":null,"created":"2021-09-28T14:53:17.008534Z","keep_proxy":false,"proxy_tags":[{"prefix":"f.","suffix":null}],"privacy":null},{"id":"erefx","uuid":"6deaba57-be2b-4d45-9799-28a72bda38c1","name":"izzymoonbow","display_name":"Izzy Moonbow","color":"2176aa","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/972591390037004328/20220507_211034.jpg","banner":null,"description":null,"created":"2022-04-10T20:36:09.022697Z","keep_proxy":false,"proxy_tags":[{"prefix":"i.","suffix":null}],"privacy":null},{"id":"zhtzs","uuid":"5d092fbc-e3ce-4bb1-9b59-679e38413f4b","name":"pipppetals","display_name":"Pipp Petals","color":"ea95d5","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/1000175246374097026/FYOE0KoWYAc88hx.jpg","banner":null,"description":null,"created":"2022-06-17T20:36:02.751829Z","keep_proxy":false,"proxy_tags":[{"prefix":"pi.","suffix":null},{"prefix":"ฯ.","suffix":null}],"privacy":null},{"id":"vvsxf","uuid":"d37ad25f-cb72-4697-a2d0-b4bf0cef52ee","name":"plushie","display_name":"Plushie","color":"9073ff","birthday":null,"pronouns":"it/its","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/932592506854588436/20220117_110920.jpg","banner":null,"description":null,"created":"2021-09-25T21:50:25.790235Z","keep_proxy":false,"proxy_tags":[{"prefix":"p.","suffix":null}],"privacy":null},{"id":"mglyq","uuid":"d25282c7-e7c1-4052-bc38-1cc6ebd07c10","name":"velvet","display_name":"Velvet Cascade","color":"466cdb","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913778/917772337447858196/20211207_083155.jpg","banner":null,"description":null,"created":"2021-11-04T19:10:48.370778Z","keep_proxy":false,"proxy_tags":[{"prefix":"v.","suffix":null}],"privacy":null},{"id":"zzise","uuid":"198d3961-2408-40b2-8f59-30a8665693a5","name":"skydream","display_name":"Sky Dream","color":"a0f0ff","birthday":null,"pronouns":"she/it","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/932945518156464168/20220118_103210.jpg","banner":null,"description":null,"created":"2021-10-13T23:07:23.135639Z","keep_proxy":false,"proxy_tags":[{"prefix":"d.","suffix":null}],"privacy":null},{"id":"xcjhj","uuid":"e7e3a371-fa5f-49ce-8deb-86f089579310","name":"blueberrycloud","display_name":"Blueberry Cloud","color":"fffbae","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/998365934303580181/unknown.png","banner":null,"description":null,"created":"2022-07-17T23:06:38.533806Z","keep_proxy":false,"proxy_tags":[{"prefix":"b.","suffix":null}],"privacy":null},{"id":"erknz","uuid":"dd9ba9db-08f2-4518-aa90-a479f6e60b7e","name":"lavender","display_name":"Lavender","color":"e99fe4","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/872535986943426670/896674044701724723/lavender.png","banner":null,"description":null,"created":"2021-10-06T19:29:17.195373Z","keep_proxy":false,"proxy_tags":[{"prefix":"l.","suffix":null}],"privacy":null},{"id":"gevde","uuid":"91f6e79e-36a1-4fd6-8cd9-62e8522661aa","name":"sweetiebelle","display_name":"Sweetie Belle","color":"efeded","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511796539412/923255682227122226/20211222_164348.png","banner":null,"description":null,"created":"2021-12-22T16:42:59.140195Z","keep_proxy":false,"proxy_tags":[{"prefix":"sb.","suffix":null}],"privacy":null},{"id":"kkhbw","uuid":"6fde8569-27e1-4c4d-b305-66aa62915168","name":"twilight","display_name":"Twi/Leah","color":"cc9cdf","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1002285835565150360/pfp.png","banner":null,"description":null,"created":"2021-09-25T22:25:41.356595Z","keep_proxy":false,"proxy_tags":[{"prefix":"t.","suffix":null}],"privacy":null},{"id":"jnbae","uuid":"7adba16f-e0fe-4b4b-b5a2-658d1d73581f","name":"mistycloud","display_name":"Misty Cloud","color":"7083de","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/999794243113603103/misty.png","banner":null,"description":null,"created":"2022-06-22T07:49:16.85348Z","keep_proxy":false,"proxy_tags":[{"prefix":"c.","suffix":null}],"privacy":null},{"id":"xbvwt","uuid":"ef94e497-2b6c-4f8a-9533-0b0a125874e1","name":"sunnystarscout","display_name":"Sunny Starscout","color":"f3a493","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/962383825185419304/20220409_170931.jpg","banner":null,"description":null,"created":"2022-04-09T15:33:50.487224Z","keep_proxy":false,"proxy_tags":[{"prefix":"s.","suffix":null}],"privacy":null},{"id":"tmgiu","uuid":"0b7e9bc7-7555-49ec-b2f5-cb4175f5f6f4","name":"smoltwi","display_name":"Filly Twi","color":"e0c3eb","birthday":null,"pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1005754097267388517/20220807_092727.png","banner":null,"description":null,"created":"2022-08-07T08:21:20.865853Z","keep_proxy":false,"proxy_tags":[{"prefix":"st.","suffix":null}],"privacy":null}]
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-mglyq-content.html b/includes/data.backup/ynmuc-mglyq-content.html new file mode 100644 index 0000000..068c227 --- /dev/null +++ b/includes/data.backup/ynmuc-mglyq-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">heya! i'm velvet cascade. i'm an earth pony in the </span><a href="/cloudburst">Cloudburst System</a><span style="color:rgb(255,255,255);">. i like farming and gardening in general! i especially like setting up intricate displays to showcase flower designs on </span><a href="https://pony.town/">Pony Town</a><span style="color:rgb(255,255,255);"> (and hopefully one day, in real life!)</span></p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-mglyq-metadata.json b/includes/data.backup/ynmuc-mglyq-metadata.json new file mode 100644 index 0000000..0960683 --- /dev/null +++ b/includes/data.backup/ynmuc-mglyq-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [ + "gdapd/zajrk" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-planner.json b/includes/data.backup/ynmuc-planner.json new file mode 100644 index 0000000..47523b3 --- /dev/null +++ b/includes/data.backup/ynmuc-planner.json @@ -0,0 +1 @@ +{"2022-08-08":["jnbae","kkhbw","xbvwt"],"2022-08-09":["vncoa","zhtzs","zzise","gevde"],"2022-08-10":[],"2022-08-11":[],"2022-08-12":[],"2022-08-13":[],"2022-08-14":[]}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-sehke-metadata.json b/includes/data.backup/ynmuc-sehke-metadata.json new file mode 100644 index 0000000..9f6b4a4 --- /dev/null +++ b/includes/data.backup/ynmuc-sehke-metadata.json @@ -0,0 +1,15 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-subsystem-sparkles.html b/includes/data.backup/ynmuc-subsystem-sparkles.html new file mode 100644 index 0000000..dbcf6fc --- /dev/null +++ b/includes/data.backup/ynmuc-subsystem-sparkles.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Sparkles subsystem.</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-subsystem-sparkles.json b/includes/data.backup/ynmuc-subsystem-sparkles.json new file mode 100644 index 0000000..0f21fbd --- /dev/null +++ b/includes/data.backup/ynmuc-subsystem-sparkles.json @@ -0,0 +1,3 @@ +{ + "name": "The Sparkles" +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-subsystems.json b/includes/data.backup/ynmuc-subsystems.json new file mode 100644 index 0000000..7bfb72e --- /dev/null +++ b/includes/data.backup/ynmuc-subsystems.json @@ -0,0 +1,18 @@ +[ + { + "source": "kkhbw", + "source_type": "member", + "members": [ + "tmgiu" + ] + }, + { + "source": "sparkles", + "source_type": "trait", + "members": [ + "xbvwt", + "erefx", + "zhtzs" + ] + } +]
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-switches.json b/includes/data.backup/ynmuc-switches.json new file mode 100644 index 0000000..4d9db54 --- /dev/null +++ b/includes/data.backup/ynmuc-switches.json @@ -0,0 +1 @@ +[{"id":"d9bdd6d6-2794-4f4e-8835-db33290d7903","timestamp":"2022-08-08T08:46:10.402919Z","members":["jnbae"]},{"id":"128a2b8f-fe62-435c-a259-fc6e88be4740","timestamp":"2022-08-07T21:31:57.32411Z","members":["erefx"]},{"id":"d0f6aa63-1551-4a9c-a876-b8b5e4f966d9","timestamp":"2022-08-06T17:20:05.59652Z","members":["kkhbw"]},{"id":"96805b65-1a14-40ba-bb0c-ac1a7a2fe695","timestamp":"2022-08-06T11:28:53.357616Z","members":["mglyq"]},{"id":"6dc862a9-57e4-4e80-9657-ef96d7fa91ff","timestamp":"2022-08-05T17:03:51.0212Z","members":["zzise"]},{"id":"988fb87b-20bd-4f9c-9da5-ed7d1609b5db","timestamp":"2022-08-05T14:04:08.789779Z","members":["kkhbw"]},{"id":"f5d227a8-3ccd-4ff4-bd98-32e4c35671bd","timestamp":"2022-08-05T11:21:53.877057Z","members":["xbvwt"]},{"id":"d5a68fbe-fd0b-431a-ac8d-32933c299ad8","timestamp":"2022-08-03T12:33:47.377523Z","members":["kkhbw"]},{"id":"d91b19dc-b804-4004-89ae-1d18a2c1f1aa","timestamp":"2022-08-03T12:23:29.380125Z","members":["zzise"]},{"id":"75c3191e-59fa-4e25-b71b-c0ec9e1f1d5f","timestamp":"2022-08-02T11:05:20.26185Z","members":["kkhbw"]},{"id":"0f7b8774-bf31-4bf2-91c5-252dcc23973e","timestamp":"2022-08-01T20:52:37.799846Z","members":["xbvwt"]},{"id":"f6d24662-cf4b-4ecd-8264-fb289ca452ba","timestamp":"2022-08-01T15:50:48.57502Z","members":["kkhbw"]},{"id":"ff5cba2e-3ea9-401c-b9a9-b62de179d923","timestamp":"2022-08-01T11:24:16.404169Z","members":["zzise"]},{"id":"9293780d-b502-4f27-a115-36522dbaa3e7","timestamp":"2022-08-01T08:12:30.67668Z","members":["erefx"]},{"id":"5282f87a-ce79-4fca-a770-d5857ff14304","timestamp":"2022-07-31T21:27:03.295077Z","members":["kkhbw"]},{"id":"d100054f-9913-4a9b-86c5-7de60f6dacb0","timestamp":"2022-07-31T16:37:29.451006Z","members":["erknz"]},{"id":"a22e1e7a-93fa-4cd6-9ae7-8a7a3a629347","timestamp":"2022-07-31T07:45:55.285055Z","members":["kkhbw"]},{"id":"762444f5-1c33-4a74-8339-837ab2db6cf5","timestamp":"2022-07-30T18:44:08.38374Z","members":["vvsxf"]},{"id":"3293e085-c941-4064-8638-bee15bf849d0","timestamp":"2022-07-29T19:41:14.095032Z","members":["xcjhj"]},{"id":"f8d87515-1a83-4bcb-9454-5d7fcd1ef462","timestamp":"2022-07-28T14:07:47.151199Z","members":["kkhbw"]},{"id":"cf8da98b-c03a-49e8-a582-e7b6f0c88f25","timestamp":"2022-07-28T12:09:20.713711Z","members":["zzise"]},{"id":"f545f42f-b65f-4a9f-8c1b-34bb8cc1bc74","timestamp":"2022-07-27T18:54:03.359331Z","members":["kkhbw"]},{"id":"a511aa5c-4ed6-43cc-b8cb-9519e22183d1","timestamp":"2022-07-27T16:05:24.568466Z","members":["mglyq"]},{"id":"c67feae6-a4a7-49cb-96d1-cea3adb769f9","timestamp":"2022-07-27T11:06:43.47133Z","members":["jnbae"]},{"id":"dc8c5da0-174b-4cac-80de-5657b2803bc8","timestamp":"2022-07-26T20:57:19.984573Z","members":["kkhbw"]},{"id":"86d2deef-e055-4508-a0ea-313e6c8167e1","timestamp":"2022-07-26T14:58:21.681152Z","members":["zzise"]},{"id":"1e6c442b-014d-4b91-a379-a4163f43920f","timestamp":"2022-07-25T14:36:42.386763Z","members":["kkhbw"]},{"id":"ad3076f7-b51a-44de-b921-0757e7d47bab","timestamp":"2022-07-25T12:10:50.029186Z","members":["vvsxf"]},{"id":"d57d7696-d17a-4a8b-97a7-4612d441fde1","timestamp":"2022-07-24T18:31:35.598319Z","members":["kkhbw"]},{"id":"7af12cfe-2729-4fb9-825c-70cd64edd2c5","timestamp":"2022-07-24T12:38:56.745626Z","members":["zzise"]},{"id":"3000a921-3f20-4714-8573-4dd8125868d5","timestamp":"2022-07-24T11:46:50.66983Z","members":["vncoa"]},{"id":"c3ebc850-c824-4111-af0a-480002fcf065","timestamp":"2022-07-24T08:47:42.514505Z","members":["xbvwt"]},{"id":"c5ba5ee2-8a55-4918-a2dc-fc605fedbfe1","timestamp":"2022-07-23T14:57:11.288643Z","members":["erknz"]},{"id":"8b8cc2e4-68cc-4aec-bebf-7df5362e3e29","timestamp":"2022-07-23T13:36:15.160833Z","members":["zzise"]},{"id":"32a35653-6599-4e80-91d6-b0d3e6e3e170","timestamp":"2022-07-23T10:28:01.152984Z","members":["gfhsr"]},{"id":"cb17c0c9-c838-4ab1-998f-33cae191a52d","timestamp":"2022-07-21T13:53:03.172427Z","members":["kkhbw"]},{"id":"72e2646c-9361-4ae5-801d-51850b3c8143","timestamp":"2022-07-21T11:31:28.867135Z","members":["gevde"]},{"id":"79414944-2583-4e8e-81cf-11f04a46f81e","timestamp":"2022-07-20T20:35:36.162672Z","members":["zhtzs"]},{"id":"6ec067a3-bd21-4518-bc78-e134f77d2d14","timestamp":"2022-07-20T19:20:53.063531Z","members":["kkhbw"]},{"id":"70b06bb2-b01c-4788-b6a8-03314efe31fd","timestamp":"2022-07-20T13:46:42.675824Z","members":["gevde"]},{"id":"43286fcd-a098-47e1-a6e7-b6d5b5636732","timestamp":"2022-07-19T13:09:43.494648Z","members":["kkhbw"]},{"id":"27b6789c-1609-4d7c-8b66-cf0e68039cfa","timestamp":"2022-07-18T21:42:03.331665Z","members":["xbvwt"]},{"id":"a7cc7729-5e2e-44e6-b501-f8546c8a8ff8","timestamp":"2022-07-17T11:49:44.64922Z","members":["kkhbw"]},{"id":"50e76dbd-6855-4fcd-96e7-b213c3f285db","timestamp":"2022-07-16T19:37:20.60917Z","members":["vvsxf"]},{"id":"a981e819-839a-482d-ac3c-74478c867f44","timestamp":"2022-07-16T15:18:58.16575Z","members":["gfhsr"]},{"id":"fa0283b4-31fe-498f-b74f-a1612794a7ca","timestamp":"2022-07-16T09:21:47.01158Z","members":["mglyq"]},{"id":"7ec121a0-fa14-4c57-8ed2-fb56a09fb22b","timestamp":"2022-07-14T15:07:58.989759Z","members":["kkhbw"]},{"id":"cba1d4ff-7e83-4edd-b982-327177b4c655","timestamp":"2022-07-14T12:03:15.028238Z","members":["jnbae"]},{"id":"3fa8f4f0-8602-48e8-b8cd-9599ba27fcee","timestamp":"2022-07-14T09:29:01.28779Z","members":["gevde"]},{"id":"d4d1c284-0782-4251-9f7f-076d34ef5a3c","timestamp":"2022-07-13T13:04:04.902073Z","members":["kkhbw"]},{"id":"7c01a511-4354-4c6b-a104-14cd3989dfb6","timestamp":"2022-07-13T09:12:43.526116Z","members":["zzise"]},{"id":"dd3f423a-b96c-44ff-b0cc-7e4f6245cdd7","timestamp":"2022-07-12T21:55:41.538956Z","members":["kkhbw"]},{"id":"2d97bab7-4763-45b1-a677-7ef08cc5d2cb","timestamp":"2022-07-12T21:21:53.21364Z","members":["gevde"]},{"id":"7cb51d48-c3e3-4263-9f29-3bff23ac10a2","timestamp":"2022-07-12T11:26:52.991209Z","members":["kkhbw"]},{"id":"141b4704-4c7e-4917-946c-c4da8772b1f2","timestamp":"2022-07-12T08:39:41.032698Z","members":["erefx"]},{"id":"006b9de1-f932-43b0-890e-74949f888c03","timestamp":"2022-07-11T10:15:03.359372Z","members":["kkhbw"]},{"id":"17533ce0-7cdd-475c-bde3-5a9a4dfa207d","timestamp":"2022-07-10T21:25:04.944671Z","members":["xbvwt"]},{"id":"a94dbc79-4b88-4260-802f-025cbee5b87f","timestamp":"2022-07-09T16:29:14.271285Z","members":["kkhbw"]},{"id":"f4dc5275-675e-494f-90dd-b841687ff6ce","timestamp":"2022-07-09T11:33:00.936258Z","members":["zzise"]},{"id":"50f7800d-6cb2-49c1-a2e5-4e1324f21257","timestamp":"2022-07-07T15:22:20.21751Z","members":["kkhbw"]},{"id":"c5832aee-2fee-4541-a472-4a0c70c92c95","timestamp":"2022-07-07T08:21:26.060082Z","members":["erknz"]},{"id":"6f3994c5-55dd-408b-bb8f-ca33a2a7591c","timestamp":"2022-07-06T15:33:21.676895Z","members":["kkhbw"]},{"id":"c7712e6d-ff01-4aa4-9f0b-d512da395728","timestamp":"2022-07-06T09:02:21.109125Z","members":["vncoa"]},{"id":"7c706268-a8fd-45f5-a874-65745f016530","timestamp":"2022-07-05T15:00:00Z","members":["kkhbw"]},{"id":"ac130bb7-6797-47b8-9cea-37e0c3139d85","timestamp":"2022-07-05T07:31:28.323064Z","members":["vvsxf"]},{"id":"7a821888-f308-4b96-b77f-f19b9d34dbc2","timestamp":"2022-07-04T14:13:56.805013Z","members":["xbvwt"]},{"id":"05b8b6f3-7e8c-4d8c-b0d9-6decbd039e6d","timestamp":"2022-07-04T10:20:25.079436Z","members":["gfhsr"]},{"id":"83b06fac-98a2-4176-ab82-301300c8c89c","timestamp":"2022-07-03T10:14:49.183852Z","members":["kkhbw"]},{"id":"0fbcb1fa-e655-4d6c-b62b-7a50f37e9f7f","timestamp":"2022-07-02T20:39:29.011589Z","members":["erefx"]},{"id":"5a94547f-3088-49c7-ae16-ca3807109ecc","timestamp":"2022-07-02T13:20:05.497265Z","members":["kkhbw"]},{"id":"626ba9c5-6b39-406d-8637-6c342b4e263d","timestamp":"2022-07-02T10:52:21.830141Z","members":["gfhsr"]},{"id":"c6751376-d751-44ed-ac84-e761928b3bf2","timestamp":"2022-07-01T14:04:06.755324Z","members":["kkhbw"]},{"id":"22778489-4c56-4234-9f99-265aa46cd321","timestamp":"2022-07-01T10:08:14.509735Z","members":["zzise"]},{"id":"f67cc64a-3d28-4a36-9732-7d9359b2af42","timestamp":"2022-06-30T15:15:47.979457Z","members":["kkhbw"]},{"id":"90fa20b7-3d2b-4a02-b5e9-8a8a8e662469","timestamp":"2022-06-30T13:46:21.38271Z","members":["xbvwt"]},{"id":"20cfadd5-6b49-4754-9435-38883c5eed97","timestamp":"2022-06-30T09:42:01.969439Z","members":["vncoa"]},{"id":"36e1ad94-0887-47f0-adc6-32e8b4e7bb4d","timestamp":"2022-06-29T17:10:16.665544Z","members":["kkhbw"]},{"id":"aadb35ef-3fe1-4829-aa7a-5bcac8eb5d56","timestamp":"2022-06-29T12:41:36.685784Z","members":["jnbae"]},{"id":"9604cbf6-bf0e-4ba9-9e22-3352f390696e","timestamp":"2022-06-29T07:11:22.788588Z","members":["kkhbw"]},{"id":"918c8a5e-c093-48bb-af12-c35023b5e251","timestamp":"2022-06-28T19:17:36.294863Z","members":["xbvwt"]},{"id":"a1b86f12-ce33-4a95-ad0c-8799843bab16","timestamp":"2022-06-28T13:11:22.235496Z","members":["zhtzs"]},{"id":"d9e08db6-06cf-4ab7-af32-7b7c36e41f6e","timestamp":"2022-06-27T19:38:17.481836Z","members":["zzise"]},{"id":"4128fb46-1bdd-4915-aa0e-5f2d158affd5","timestamp":"2022-06-27T07:16:37.642028Z","members":["erknz"]},{"id":"8fa74862-3c60-4f08-ada5-15084ed43d10","timestamp":"2022-06-26T07:22:25.213651Z","members":["kkhbw"]},{"id":"da8d4483-58e7-4170-a088-8f6e37c95d87","timestamp":"2022-06-25T19:50:29.457044Z","members":["xbvwt"]},{"id":"0b3be5d1-b940-44d1-984a-edbff0edcc47","timestamp":"2022-06-25T16:20:43.824165Z","members":["kkhbw"]},{"id":"313e8c22-d88b-41b8-ba0b-0f214235be32","timestamp":"2022-06-25T09:53:39.588763Z","members":["zzise"]},{"id":"9dd1059a-6fd6-458c-ac18-e9534005bb8a","timestamp":"2022-06-24T16:36:02.580696Z","members":["kkhbw"]},{"id":"4d3414f1-6b74-4cdc-95f4-fffbe00db1a8","timestamp":"2022-06-24T09:11:14.900455Z","members":["gfhsr"]},{"id":"102dfa76-6fbd-42d5-bf9e-caa4e9bd1770","timestamp":"2022-06-23T15:02:17.056449Z","members":["kkhbw"]},{"id":"b64f485d-3e57-435d-a266-feec2f2d6922","timestamp":"2022-06-23T10:02:58.079289Z","members":["mglyq"]},{"id":"fcbe3e9a-1f7b-4b5b-b3aa-1d7d8311390d","timestamp":"2022-06-22T19:37:45.051851Z","members":["kkhbw"]},{"id":"fb01a31c-ba19-41c1-b407-912bdbf067f2","timestamp":"2022-06-22T07:21:10.425505Z","members":["zzise"]},{"id":"fbd8a99a-0531-48c7-85b8-f276302c7940","timestamp":"2022-06-20T15:14:06.523445Z","members":["kkhbw"]},{"id":"79237241-71b5-41c6-99af-9ee87814cba8","timestamp":"2022-06-20T07:20:58.570692Z","members":["vncoa"]},{"id":"b4caf679-89a6-4649-a78a-9270bc14aed2","timestamp":"2022-06-19T08:33:59.231122Z","members":["kkhbw"]},{"id":"80406c11-8690-47a5-bc64-4a74f0357f0f","timestamp":"2022-06-18T15:51:55.481343Z","members":["zzise"]},{"id":"841297b0-deac-47a3-bf2a-7640209995e4","timestamp":"2022-06-18T15:22:29.328761Z","members":["zhtzs"]},{"id":"a8e13251-4f49-496b-9b84-c6735b4cffb2","timestamp":"2022-06-18T09:11:09.456998Z","members":["gfhsr"]},{"id":"642d0eff-3d2d-4771-b5df-bec9aa810fb5","timestamp":"2022-06-16T14:09:11.530831Z","members":["kkhbw"]}]
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-tmgiu-metadata.json b/includes/data.backup/ynmuc-tmgiu-metadata.json new file mode 100644 index 0000000..467f8ce --- /dev/null +++ b/includes/data.backup/ynmuc-tmgiu-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 1, + "median": "kkhbw", + "regression": null, + "protector": false, + "fictive": true, + "little": 2, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [ + "gdapd/ghuln" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-vncoa-metadata.json b/includes/data.backup/ynmuc-vncoa-metadata.json new file mode 100644 index 0000000..9f6b4a4 --- /dev/null +++ b/includes/data.backup/ynmuc-vncoa-metadata.json @@ -0,0 +1,15 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth" + ], + "marefriends": [], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-vvsxf-content.html b/includes/data.backup/ynmuc-vvsxf-content.html new file mode 100644 index 0000000..a8ee483 --- /dev/null +++ b/includes/data.backup/ynmuc-vvsxf-content.html @@ -0,0 +1 @@ +<p>hello! i'm plushie, as my name suggests i am a literal plushie</p><p>yeah that's really it honestly</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-vvsxf-metadata.json b/includes/data.backup/ynmuc-vvsxf-metadata.json new file mode 100644 index 0000000..84a033c --- /dev/null +++ b/includes/data.backup/ynmuc-vvsxf-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [], + "sisters": [ + "gdapd/ztfjz" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-xbvwt-content.html b/includes/data.backup/ynmuc-xbvwt-content.html new file mode 100644 index 0000000..f3188ad --- /dev/null +++ b/includes/data.backup/ynmuc-xbvwt-content.html @@ -0,0 +1 @@ +<p>Hello! I'm Sunny Starscout! I'm both an Alicorn and an Earth Pony, It's hard to control when I am an Alicorn but I'm slowly working it out!</p><p>I'm in relationships with both <a href="/cloudburst/izzymoonbow">Izzy Moonbow</a> and <a href="/page/raindrops/scootaloo">Scoots/Mia</a>!</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-xbvwt-metadata.json b/includes/data.backup/ynmuc-xbvwt-metadata.json new file mode 100644 index 0000000..d578181 --- /dev/null +++ b/includes/data.backup/ynmuc-xbvwt-metadata.json @@ -0,0 +1,19 @@ +{ + "shared_memory": 0, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "earth", + "alicorn" + ], + "marefriends": [ + "ynmuc/erefx", + "gdapd/rirgf" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-xcjhj-metadata.json b/includes/data.backup/ynmuc-xcjhj-metadata.json new file mode 100644 index 0000000..628dd56 --- /dev/null +++ b/includes/data.backup/ynmuc-xcjhj-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": false, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "unicorn" + ], + "marefriends": [ + "gdapd/qraku" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-zhtzs-content.html b/includes/data.backup/ynmuc-zhtzs-content.html new file mode 100644 index 0000000..8f5bce7 --- /dev/null +++ b/includes/data.backup/ynmuc-zhtzs-content.html @@ -0,0 +1 @@ +<p>Heya! My name is Pipp Petals. I'm a social media influencer and a princess (a two in one package)!</p><p>I recently got pulled into this... place I guess? I'm still working out how stuff works here. Luckily Sunny, Izzy, and Zipp are here as well!</p><p>I currently have a twitter account set up, if you want to you can follow me at @CB_PippPetals!</p><p>I don't really know what else to write right now, but if I think of anything I'll put it here!</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-zhtzs-metadata.json b/includes/data.backup/ynmuc-zhtzs-metadata.json new file mode 100644 index 0000000..d65ab81 --- /dev/null +++ b/includes/data.backup/ynmuc-zhtzs-metadata.json @@ -0,0 +1,17 @@ +{ + "shared_memory": 0, + "median": false, + "regression": null, + "protector": false, + "fictive": true, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "pegasus" + ], + "marefriends": [], + "sisters": [ + "gdapd/rirgf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-zzise-content.html b/includes/data.backup/ynmuc-zzise-content.html new file mode 100644 index 0000000..c10d824 --- /dev/null +++ b/includes/data.backup/ynmuc-zzise-content.html @@ -0,0 +1 @@ +<p>heya! i'm sky dream. i'm a batpony mare who loves to go on bike rides and hike mountains!</p><p>i guess you could call me the protector of the cloudburst system, i front whenever the pony at front can't handle it anymore, but i also front whenever i personally want to do something!</p>
\ No newline at end of file diff --git a/includes/data.backup/ynmuc-zzise-metadata.json b/includes/data.backup/ynmuc-zzise-metadata.json new file mode 100644 index 0000000..a508528 --- /dev/null +++ b/includes/data.backup/ynmuc-zzise-metadata.json @@ -0,0 +1,18 @@ +{ + "shared_memory": 2, + "median": false, + "regression": null, + "protector": true, + "fictive": false, + "little": 0, + "not_talking": false, + "host": false, + "species": [ + "batpony" + ], + "marefriends": [ + "gdapd/tfbob", + "gdapd/lllfw" + ], + "sisters": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-content.html b/includes/data.backup2/gdapd-content.html new file mode 100644 index 0000000..47ab5c6 --- /dev/null +++ b/includes/data.backup2/gdapd-content.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Raindrops System.</p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-fronters.json b/includes/data.backup2/gdapd-fronters.json new file mode 100644 index 0000000..3284f2e --- /dev/null +++ b/includes/data.backup2/gdapd-fronters.json @@ -0,0 +1 @@ +{"id":"92b68e73-f4f3-4eb9-8569-1baeb1ff9d01","timestamp":"2022-08-17T10:59:47.560683Z","members":[{"id":"zajrk","uuid":"5ddf123d-40ba-49fb-81b9-8d77728dbb3a","name":"mossystorm","display_name":"Mossy Storm","color":"9eff95","birthday":null,"pronouns":"she/they","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/997577513066831933/mossy.png","banner":null,"description":null,"created":"2022-07-15T18:55:35.694303Z","keep_proxy":false,"proxy_tags":[{"prefix":"t.","suffix":null}],"privacy":null}]}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-general.json b/includes/data.backup2/gdapd-general.json new file mode 100644 index 0000000..21f6d7f --- /dev/null +++ b/includes/data.backup2/gdapd-general.json @@ -0,0 +1 @@ +{"id":"gdapd","uuid":"7d9f543e-f742-40f6-9d07-86c3f2983124","name":"Raindrops System","description":"**\"gonna be-gonna be-gonna be my day!\"**\nWe have absolutely no clue what type of system we are (and honestly we don't want to know), we just know it's plurality!\n(description stolen from our friends in the Cloudburst System)","tag":"(Raindrops System)","pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/989632412067696702/system.png","banner":null,"color":null,"created":"2022-04-08T16:43:05.309423Z","privacy":null}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-ghuln-metadata.json b/includes/data.backup2/gdapd-ghuln-metadata.json new file mode 100644 index 0000000..42dfe79 --- /dev/null +++ b/includes/data.backup2/gdapd-ghuln-metadata.json @@ -0,0 +1,12 @@ +{ + "bitset": 7477248, + "median": "rirgf", + "regression": null, + "marefriends": [ + "ynmuc/tmgiu" + ], + "sisters": [], + "caretakers": [ + "ynmuc/kkhbw" + ] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-hpwyq-metadata.json b/includes/data.backup2/gdapd-hpwyq-metadata.json new file mode 100644 index 0000000..f8106da --- /dev/null +++ b/includes/data.backup2/gdapd-hpwyq-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8400896, + "regression": null, + "marefriends": [ + "ynmuc/kkhbw" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-khsbb-metadata.json b/includes/data.backup2/gdapd-khsbb-metadata.json new file mode 100644 index 0000000..4818dec --- /dev/null +++ b/includes/data.backup2/gdapd-khsbb-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 133120, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-lllfw-metadata.json b/includes/data.backup2/gdapd-lllfw-metadata.json new file mode 100644 index 0000000..496547d --- /dev/null +++ b/includes/data.backup2/gdapd-lllfw-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 137216, + "regression": null, + "marefriends": [ + "ynmuc/zzise" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-members.json b/includes/data.backup2/gdapd-members.json new file mode 100644 index 0000000..4c8f076 --- /dev/null +++ b/includes/data.backup2/gdapd-members.json @@ -0,0 +1 @@ +[{"id":"ghuln","uuid":"c70080fb-8753-4a9d-a812-f960666a77ab","name":"smolscoots","display_name":"Filly Scoots","color":"bf5e94","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1005906858076282972/4020373__safe_artist-colon-kqaii_character-colon-scootaloo_species-colon-pegasus_species-colon-pony_g4_cherry_cute_cutealoo_drink_eyeclippingthroughhair_eyeb.jpg","banner":null,"description":null,"created":"2022-08-06T19:21:20.641634Z","keep_proxy":false,"proxy_tags":[{"prefix":"fi.","suffix":null}],"privacy":null},{"id":"ztfjz","uuid":"5ca268af-06ef-42af-9613-3e24c3552d72","name":"stuffie","display_name":"Stuffie","color":"9069d9","birthday":null,"pronouns":"it/its","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1004527634832703548/stuffie.png","banner":null,"description":null,"created":"2022-08-03T23:10:01.420647Z","keep_proxy":false,"proxy_tags":[{"prefix":"f.","suffix":null}],"privacy":null},{"id":"lllfw","uuid":"477c7f1b-547f-476d-91f5-90cf16eeea10","name":"zipp","display_name":"Zipp Storm","color":"feedfe","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1003661213676339281/4020729__safe_artist-colon-ninnydraws_character-colon-zippstorm_species-colon-pegasus_species-colon-pony_g5_abstractbackground_adorazipp_blushing_cloud_colore.png","banner":null,"description":null,"created":"2022-04-11T20:56:10.488905Z","keep_proxy":false,"proxy_tags":[{"prefix":"z.","suffix":null}],"privacy":null},{"id":"qraku","uuid":"6d178626-866d-4cd4-96c9-99120dd3f927","name":"starrynight","display_name":"Starry Night","color":"8fa2ff","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001054399843541035/1002349883153457254/aa.png","banner":null,"description":null,"created":"2022-07-28T22:59:28.759014Z","keep_proxy":false,"proxy_tags":[{"prefix":"st.","suffix":null}],"privacy":null},{"id":"hpwyq","uuid":"494e0197-5120-4945-95db-5a7bbcb943f8","name":"frost","display_name":"Frost Crystals","color":"8dd4f4","birthday":null,"pronouns":"she/it","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1006687046175309904/pony-town-Frost_Crystals-stand-16x_copy.png","banner":null,"description":null,"created":"2022-08-09T22:09:03.803667Z","keep_proxy":false,"proxy_tags":[{"prefix":"c.","suffix":null}],"privacy":null},{"id":"tfbob","uuid":"836fb0f7-35ce-4c74-927d-a578fc4f9cd3","name":"violet","display_name":"Violet Dawn","color":"e7e27e","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/1000755118356054137/PT_Violet_copy.png","banner":null,"description":"Sitll not a mango","created":"2022-07-24T13:18:23.34571Z","keep_proxy":false,"proxy_tags":[{"prefix":"v.","suffix":null}],"privacy":null},{"id":"qbzxm","uuid":"4f9b04df-0789-4729-bca3-c37c79d92f16","name":"minty","display_name":"Minty","color":"a4febe","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/871135099947741227/965236837847273482/1Minty_in_Sundae_Sundae_Sundae_MLPS5_copy.png","banner":null,"description":null,"created":"2022-04-08T16:43:20.621455Z","keep_proxy":false,"proxy_tags":[{"prefix":"m.","suffix":null}],"privacy":null},{"id":"pabmo","uuid":"602683be-8135-4a00-ae2b-239fe46c6bfc","name":"babs","display_name":"Babs Seed","color":"d69d46","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/983706729659387924/987267468181532672/babs.png","banner":null,"description":null,"created":"2022-06-17T08:00:44.14581Z","keep_proxy":false,"proxy_tags":[{"prefix":"b.","suffix":null}],"privacy":null},{"id":"zdtsg","uuid":"f4d41b23-deb4-4501-b193-768fe5e56337","name":"unknown","display_name":"Unknown","color":"cccccc","birthday":null,"pronouns":"best to ask","avatar_url":"https://cdn.discordapp.com/attachments/996402620975562905/1001041785134518433/pony-town-Unknown_pony-stand-16x_copy.png","banner":null,"description":null,"created":"2022-07-21T20:55:06.06549Z","keep_proxy":false,"proxy_tags":[{"prefix":"{","suffix":"}"}],"privacy":null},{"id":"rirgf","uuid":"be0dbae7-11c8-4629-a610-815d71d2131b","name":"scootaloo","display_name":"Scoots/Mia","color":"fea439","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1004449382181122078/final.png","banner":null,"description":null,"created":"2022-04-08T16:43:16.440878Z","keep_proxy":false,"proxy_tags":[{"prefix":"s.","suffix":null}],"privacy":null},{"id":"zajrk","uuid":"5ddf123d-40ba-49fb-81b9-8d77728dbb3a","name":"mossystorm","display_name":"Mossy Storm","color":"9eff95","birthday":null,"pronouns":"she/they","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/997577513066831933/mossy.png","banner":null,"description":null,"created":"2022-07-15T18:55:35.694303Z","keep_proxy":false,"proxy_tags":[{"prefix":"t.","suffix":null}],"privacy":null},{"id":"khsbb","uuid":"0e107292-40a3-40ce-8158-7bc4657d409d","name":"poseybloom","display_name":"Posey Bloom","color":"fff09b","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/1007954700932481065/khsbb.png","banner":null,"description":null,"created":"2022-08-13T10:08:50.330629Z","keep_proxy":false,"proxy_tags":[{"prefix":"po.","suffix":null}],"privacy":null}]
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-mhnqy-metadata.json b/includes/data.backup2/gdapd-mhnqy-metadata.json new file mode 100644 index 0000000..a9f69ae --- /dev/null +++ b/includes/data.backup2/gdapd-mhnqy-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8392704, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-nabky-content.html b/includes/data.backup2/gdapd-nabky-content.html new file mode 100644 index 0000000..8df6b9c --- /dev/null +++ b/includes/data.backup2/gdapd-nabky-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">even though i'm here and chilling, it's very draining for my headmates to communicate with me, so please try to avoid talking with me. thanks! (also i don't like fronting)</span></p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-nabky-metadata.json b/includes/data.backup2/gdapd-nabky-metadata.json new file mode 100644 index 0000000..d10c153 --- /dev/null +++ b/includes/data.backup2/gdapd-nabky-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8458240, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-pabmo-content.html b/includes/data.backup2/gdapd-pabmo-content.html new file mode 100644 index 0000000..6796cec --- /dev/null +++ b/includes/data.backup2/gdapd-pabmo-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">hi!!! i like to call scoots mom because this is what she is, and i love sweetie belle cos she is cute <3</span></p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-pabmo-metadata.json b/includes/data.backup2/gdapd-pabmo-metadata.json new file mode 100644 index 0000000..6c142d2 --- /dev/null +++ b/includes/data.backup2/gdapd-pabmo-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 5376000, + "regression": null, + "marefriends": [ + "ynmuc/gevde" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-planner.json b/includes/data.backup2/gdapd-planner.json new file mode 100644 index 0000000..18e8fd0 --- /dev/null +++ b/includes/data.backup2/gdapd-planner.json @@ -0,0 +1 @@ +{"2022-08-08":["rirgf"],"2022-08-09":["pabmo","qbzxm","ztfjz","lllfw"],"2022-08-10":[],"2022-08-11":[],"2022-08-12":[],"2022-08-13":[],"2022-08-14":["qraku","rirgf"],"2022-08-15":["rirgf","rirgf","hpwyq","rirgf"],"2022-08-16":["khsbb","rirgf","ztfjz"],"2022-08-17":["zajrk","qbzxm","pabmo"],"2022-08-18":["qbzxm","rirgf","rirgf","rirgf"],"2022-08-19":["ztfjz","rirgf","rirgf"],"2022-08-20":["lllfw","rirgf","tfbob"],"2022-08-21":["rirgf"],"2022-08-22":[],"2022-08-23":[]}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-qbzxm-content.html b/includes/data.backup2/gdapd-qbzxm-content.html new file mode 100644 index 0000000..90e39f1 --- /dev/null +++ b/includes/data.backup2/gdapd-qbzxm-content.html @@ -0,0 +1 @@ +<p>Hello there, I'm Minty (not a fictive though)! I'm a member in the Raindrops System.</p><p>I... don't really have much to say here, I guess I can say I'm the... second host? Like I'm the one to front the most often after Scoots.</p><p>See ya!</p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-qbzxm-metadata.json b/includes/data.backup2/gdapd-qbzxm-metadata.json new file mode 100644 index 0000000..9ef7f71 --- /dev/null +++ b/includes/data.backup2/gdapd-qbzxm-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8652800, + "regression": null, + "marefriends": [ + "ynmuc/erknz" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-qraku-metadata.json b/includes/data.backup2/gdapd-qraku-metadata.json new file mode 100644 index 0000000..1dc1e03 --- /dev/null +++ b/includes/data.backup2/gdapd-qraku-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8392704, + "regression": null, + "marefriends": [ + "ynmuc/xcjhj" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-rirgf-content.html b/includes/data.backup2/gdapd-rirgf-content.html new file mode 100644 index 0000000..5d41c45 --- /dev/null +++ b/includes/data.backup2/gdapd-rirgf-content.html @@ -0,0 +1 @@ +<p>Hey there!</p><p>My name is Scootaloo, and I am the host of the Raindrops System. We became plural "by accident" after I had to deal with high stress. <a href="/raindrops/minty">Minty</a> formed first and then others came; and now we're living happily! <a href="/page/raindrops/babs">Babs</a> is our little last one and she is cute.</p><p>Besides that, I don't really have much to say... Oh yeah, I'm also an alicorn; I became one after <a href="/page/cloudburst/sunnystarscout">Sunny</a> turned me into one!</p><p>Scootaloo scoot scoot scoot scootaloo</p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-rirgf-metadata.json b/includes/data.backup2/gdapd-rirgf-metadata.json new file mode 100644 index 0000000..1c40723 --- /dev/null +++ b/includes/data.backup2/gdapd-rirgf-metadata.json @@ -0,0 +1,16 @@ +{ + "bitset": 9085312, + "regression": "ghuln", + "marefriends": [ + "ynmuc/kkhbw", + "ynmuc/xbvwt", + "ynmuc/rpjok" + ], + "sisters": [ + "ynmuc/erefx", + "ynmuc/zhtzs", + "ynmuc/gevde", + "ynmuc/jnbae" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-subsystems.json b/includes/data.backup2/gdapd-subsystems.json new file mode 100644 index 0000000..d640e4a --- /dev/null +++ b/includes/data.backup2/gdapd-subsystems.json @@ -0,0 +1,9 @@ +[ + { + "source": "rirgf", + "source_type": "member", + "members": [ + "ghuln" + ] + } +]
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-switches.json b/includes/data.backup2/gdapd-switches.json new file mode 100644 index 0000000..67824c2 --- /dev/null +++ b/includes/data.backup2/gdapd-switches.json @@ -0,0 +1 @@ +[{"id":"92b68e73-f4f3-4eb9-8569-1baeb1ff9d01","timestamp":"2022-08-17T10:59:47.560683Z","members":["zajrk"]},{"id":"af1619d3-e5b8-45b7-a58e-6a8260f35b94","timestamp":"2022-08-16T12:18:33.833164Z","members":["rirgf"]},{"id":"2b5c3634-10ba-4223-be33-7914c407246f","timestamp":"2022-08-16T11:54:59.722157Z","members":["khsbb"]},{"id":"f22b7984-581e-43d4-aea0-710b6292d9a1","timestamp":"2022-08-15T20:52:27.733122Z","members":["rirgf"]},{"id":"66afcc6e-1f02-454c-a55c-e583a6e6da32","timestamp":"2022-08-15T17:16:54.803355Z","members":["hpwyq"]},{"id":"4172dce2-4eb8-4884-97e4-0dfa0c8927f8","timestamp":"2022-08-14T21:59:52.947861Z","members":["rirgf"]},{"id":"4daa988d-3dcb-4f81-ac0a-ab4dcc434a2d","timestamp":"2022-08-14T16:47:43.413005Z","members":["qraku"]},{"id":"5b1418fd-6878-4958-936b-2bd7140b2a45","timestamp":"2022-08-14T10:20:26.479674Z","members":["rirgf"]},{"id":"3b1f7f95-69fc-4a63-8e74-8beeef782b5b","timestamp":"2022-08-13T20:07:02.86133Z","members":["tfbob"]},{"id":"46bedbdf-565f-4d4a-98c9-0dc09c14b2ee","timestamp":"2022-08-13T12:21:48.59001Z","members":["rirgf"]},{"id":"c73b2c9a-4b75-47bf-825b-f190340e78ca","timestamp":"2022-08-13T12:03:28.694944Z","members":["khsbb"]},{"id":"9f3fa117-f58b-439f-b51d-bbe263217a01","timestamp":"2022-08-13T07:14:34.150005Z","members":["rirgf"]},{"id":"dc82613d-a896-4dbc-82c5-a3cf5118b8c4","timestamp":"2022-08-13T00:10:22.653306Z","members":["qbzxm"]},{"id":"0b2e4c39-bdfa-44b5-9379-018efb140425","timestamp":"2022-08-13T00:07:26.817341Z","members":["khsbb"]},{"id":"8f450a22-3512-4787-bf14-75be9c013a1e","timestamp":"2022-08-12T20:14:36.443304Z","members":["rirgf"]},{"id":"6d1b9b32-8f2f-4963-abf1-e1c77b9471cb","timestamp":"2022-08-12T12:09:17.028864Z","members":["hpwyq"]},{"id":"5e045e22-0e9d-4abb-b8dc-1db8faef1fd0","timestamp":"2022-08-11T17:03:34.650879Z","members":["rirgf"]},{"id":"ffc95a36-8f97-449b-a3e2-9f30c7f601a4","timestamp":"2022-08-11T09:17:49.443269Z","members":["zajrk"]},{"id":"fcea043b-0e13-4e2b-ad3e-6c7c035d9109","timestamp":"2022-08-10T19:57:46.185006Z","members":["rirgf"]},{"id":"f76563d4-871c-422c-a432-20e321ff2024","timestamp":"2022-08-10T19:47:20.16938Z","members":["qraku"]},{"id":"ba0d8b16-5fce-42ca-bfad-ce2f04e68b63","timestamp":"2022-08-10T16:37:53.417376Z","members":["qbzxm"]},{"id":"22219c7c-2ef2-4528-9c44-9171c7caa950","timestamp":"2022-08-09T22:31:26.366993Z","members":["rirgf"]},{"id":"b8419e24-aaa0-4798-83cd-d6c76b090275","timestamp":"2022-08-09T21:34:01.139016Z","members":["hpwyq"]},{"id":"54467b10-6576-411f-a046-03c042c51f52","timestamp":"2022-08-09T21:02:53.982968Z","members":["rirgf"]},{"id":"a813785b-81c8-409c-aae0-d3b1d7062697","timestamp":"2022-08-09T19:26:38.337575Z","members":["qbzxm"]},{"id":"692f9d63-1d62-4bbb-aa1d-4bd8092ecba5","timestamp":"2022-08-09T16:33:44.815122Z","members":["ztfjz"]},{"id":"49c84c5c-0852-4a1a-849d-4cf6c7bb5d6d","timestamp":"2022-08-09T11:13:55.456085Z","members":["qbzxm"]},{"id":"78556bb9-8213-46d9-a26d-fb2d9b10d045","timestamp":"2022-08-09T10:27:49.477647Z","members":["pabmo"]},{"id":"d344e270-3dfa-4bf3-8941-23465ff2448d","timestamp":"2022-08-08T19:50:12.6011Z","members":["tfbob"]},{"id":"89d8f84f-ebd9-490d-854e-a906fd7c01de","timestamp":"2022-08-08T18:46:32.842774Z","members":["qbzxm"]},{"id":"0eb51883-833d-4a0c-8b3f-9baa17738d20","timestamp":"2022-08-07T21:40:14.401648Z","members":["rirgf"]},{"id":"cf244a4f-c224-47a2-b0f2-8c94252f002a","timestamp":"2022-08-07T17:48:24.086037Z","members":["qraku"]},{"id":"3faf8e32-8270-418f-bdf4-5d309df1dc93","timestamp":"2022-08-06T17:29:22.598734Z","members":["rirgf"]},{"id":"65729cea-2351-45ed-a892-fe3719824b9b","timestamp":"2022-08-06T11:50:54.921437Z","members":["zajrk"]},{"id":"ad3b3d51-417c-4d7f-bbb0-3d788ea357ad","timestamp":"2022-08-05T21:07:14.043973Z","members":["tfbob"]},{"id":"f79729b4-1d7c-49fe-b4fa-f0a7dd39b53c","timestamp":"2022-08-05T20:48:10.001822Z","members":["qbzxm"]},{"id":"82321da0-ffa7-4635-b3d2-0b5f1ec9d9ce","timestamp":"2022-08-04T22:37:33.586985Z","members":["rirgf"]},{"id":"67c7eee0-0bfa-40f4-bac8-cfae90fcaaf0","timestamp":"2022-08-04T18:43:23.315562Z","members":["qbzxm"]},{"id":"3b25583f-1b1f-4ad3-ae93-407576994f92","timestamp":"2022-08-04T10:05:14.051056Z","members":["rirgf"]},{"id":"bc8d3507-17d1-4df7-8845-81f9a4843b45","timestamp":"2022-08-03T22:17:42.734142Z","members":["ztfjz"]},{"id":"4964e024-57a3-4b3f-9aef-e83fbdad0607","timestamp":"2022-08-01T20:11:28.55833Z","members":["rirgf"]},{"id":"fed1552f-e599-4ffe-b07b-907004ac4ab1","timestamp":"2022-08-01T20:04:25.509838Z","members":["pabmo"]},{"id":"d5b3828d-56e5-49ad-bd88-5029f5d7b22b","timestamp":"2022-08-01T19:43:48.588965Z","members":["rirgf"]},{"id":"ce44d6af-f0ae-4cb8-96a9-fe098eb46c6e","timestamp":"2022-08-01T19:01:29.115782Z","members":["qbzxm"]},{"id":"a6f6c503-8bb7-425e-a4e7-8866a79aee7b","timestamp":"2022-08-01T14:05:00.315012Z","members":["rirgf"]},{"id":"27845666-2a76-4d13-8a9d-5c17710fa370","timestamp":"2022-08-01T12:26:15.568718Z","members":["lllfw"]},{"id":"52ce7c22-a545-47ed-922f-8963c11a5ea2","timestamp":"2022-07-31T21:19:59.722328Z","members":["rirgf"]},{"id":"4272500e-7642-4d3d-8358-5ac3974f4fff","timestamp":"2022-07-31T17:06:55.285503Z","members":["qbzxm"]},{"id":"c4763a2f-b9a1-4b50-b2a9-071c38d72f02","timestamp":"2022-07-31T08:05:43.313585Z","members":["rirgf"]},{"id":"21ac816a-e8b1-426f-93ad-fc0df3c0530b","timestamp":"2022-07-30T20:22:25.228871Z","members":["qbzxm"]},{"id":"25445dd3-8ac7-404c-a52e-dad17da18ede","timestamp":"2022-07-29T20:14:19.761376Z","members":["qraku"]},{"id":"7040be4e-6f03-4138-99fe-16056fe5e576","timestamp":"2022-07-29T09:09:09.176402Z","members":["rirgf"]},{"id":"ef79772b-349c-4cc3-bbde-368a6ac2550c","timestamp":"2022-07-28T22:59:36.510106Z","members":["qraku"]},{"id":"fc93240f-d6f2-4bab-a069-e0c9981d2785","timestamp":"2022-07-28T21:52:05.87279Z","members":["zdtsg"]},{"id":"3126221d-1144-46ab-9c46-6e291b529556","timestamp":"2022-07-28T19:55:12.081418Z","members":["rirgf"]},{"id":"d4f080c6-4b1f-4089-9b89-88cf22d0f353","timestamp":"2022-07-28T18:06:22.938226Z","members":["tfbob"]},{"id":"43d22b42-7c2b-446e-a3d1-b957b7d9c712","timestamp":"2022-07-28T05:25:56.910286Z","members":["rirgf"]},{"id":"1715e122-4131-4085-bec2-6e2c0f149940","timestamp":"2022-07-27T21:42:13.259365Z","members":["pabmo"]},{"id":"f0b37bca-16c3-4698-b4be-7ec4afff2dc5","timestamp":"2022-07-27T18:46:36.560704Z","members":["rirgf"]},{"id":"c75db3f3-634a-4505-957b-cb423be0ad13","timestamp":"2022-07-27T16:12:22.243247Z","members":["zajrk"]},{"id":"b6c23549-5bc1-4e90-8fa4-48da5fc3b20b","timestamp":"2022-07-27T10:09:31.651745Z","members":["qbzxm"]},{"id":"20cee1ba-0a68-4c48-8485-849e2dc4e157","timestamp":"2022-07-26T21:04:51.450343Z","members":["rirgf"]},{"id":"1757ad08-90a6-4e82-b63d-afdfa3742c6e","timestamp":"2022-07-26T17:30:36.587593Z","members":["qbzxm"]},{"id":"ef14dae6-9818-4311-8dc7-1d0254a231db","timestamp":"2022-07-26T15:57:02.524728Z","members":["rirgf"]},{"id":"b090b4d3-562b-42fe-973d-f8962622ce41","timestamp":"2022-07-26T14:39:29.438447Z","members":["tfbob"]},{"id":"32b9da79-5f26-4649-bc20-19095a179167","timestamp":"2022-07-25T20:59:30.709838Z","members":["rirgf"]},{"id":"d1a3b61b-243c-4584-a5bb-9d8c00975282","timestamp":"2022-07-25T20:32:25.953745Z","members":["qbzxm"]},{"id":"397c4c5b-bee1-4554-958f-d3e2f6134a36","timestamp":"2022-07-24T17:43:00.397207Z","members":["rirgf"]},{"id":"f13f4738-e8fe-46c2-bd5b-bb131eaa7c10","timestamp":"2022-07-24T14:32:38.054365Z","members":["tfbob"]},{"id":"45668f5d-a891-478b-ac2b-7d31ce73421c","timestamp":"2022-07-24T08:58:33.529167Z","members":["rirgf"]},{"id":"0b7f4875-72fa-4243-a17b-604148103fe7","timestamp":"2022-07-23T21:45:15.230386Z","members":["qbzxm"]},{"id":"844bdef9-2b39-4d75-b001-aa4721f2ff1e","timestamp":"2022-07-23T21:34:44.271635Z","members":["pabmo"]},{"id":"985e06b3-3a97-4e7d-8e41-3c7d0ac06ffa","timestamp":"2022-07-23T18:18:21.309123Z","members":["rirgf"]},{"id":"1541719c-0f41-49e8-a609-483cf382b35d","timestamp":"2022-07-23T14:50:21.26306Z","members":["qbzxm"]},{"id":"512fa59d-765a-439f-a6db-8c866ccf0c6a","timestamp":"2022-07-22T15:46:19.2312Z","members":["rirgf"]},{"id":"f6b66e60-c856-41d4-8496-59975da4423d","timestamp":"2022-07-22T15:34:21.162526Z","members":["qbzxm"]},{"id":"84e8dbdf-b918-46e9-b4a3-bcdb7ee33b03","timestamp":"2022-07-21T13:52:07.216638Z","members":["rirgf"]},{"id":"e2b8e446-3e9b-4bb1-be22-ceb3258ceb8a","timestamp":"2022-07-21T12:03:32.175019Z","members":["pabmo"]},{"id":"c6192b28-0294-4e35-81cf-e9639ea3f559","timestamp":"2022-07-20T14:44:15.411925Z","members":["rirgf"]},{"id":"f88592a9-14b7-4889-9d9e-b93a21c62f53","timestamp":"2022-07-20T14:07:50.524272Z","members":["pabmo"]},{"id":"4399ab86-9f74-4ad0-8627-c3be32cf737c","timestamp":"2022-07-17T17:07:18.349492Z","members":["rirgf"]},{"id":"3f7b4427-a02b-4deb-9db9-e9da7d1b8328","timestamp":"2022-07-17T16:18:33.470761Z","members":["qbzxm"]},{"id":"71ce6e4a-929d-4ecd-b91b-c3d39a9543bd","timestamp":"2022-07-16T15:18:26.473768Z","members":["rirgf"]},{"id":"3b6b0887-c419-4f9a-913e-0ac0ecef6373","timestamp":"2022-07-16T13:42:24.106996Z","members":["zajrk"]},{"id":"58a0e1fa-20c0-492b-a8fc-ebbf67c460a9","timestamp":"2022-07-15T19:03:54.617821Z","members":["rirgf"]},{"id":"fc6b0777-ca66-42c6-8c7a-ae4d2036a5ca","timestamp":"2022-07-14T21:00:19.67511Z","members":["qbzxm"]},{"id":"6b871057-5004-4b71-9be2-4d2e700738a6","timestamp":"2022-07-13T09:59:26.547608Z","members":["rirgf"]},{"id":"1a8736fd-b23f-40c9-90d2-8d6a23470baf","timestamp":"2022-07-13T09:32:43.799837Z","members":["lllfw"]},{"id":"dca1c1a2-83e5-4f51-9b89-fc4d11929089","timestamp":"2022-07-07T20:04:12.645966Z","members":["rirgf"]},{"id":"8aa28015-1047-448b-b0b7-16e7fc32c969","timestamp":"2022-07-06T20:14:51.040455Z","members":["qbzxm"]},{"id":"eeb4cfac-14c1-4207-a477-82d3307de2f5","timestamp":"2022-05-01T10:41:26.557008Z","members":["rirgf"]},{"id":"6fef8d73-dccb-40b6-9ace-4463da383a94","timestamp":"2022-04-16T08:42:25.46511Z","members":[]},{"id":"16bbd909-af89-4454-ac7a-3a8209a624e2","timestamp":"2022-04-16T08:41:28.285794Z","members":["qbzxm"]}]
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-tfbob-content.html b/includes/data.backup2/gdapd-tfbob-content.html new file mode 100644 index 0000000..275ba1d --- /dev/null +++ b/includes/data.backup2/gdapd-tfbob-content.html @@ -0,0 +1 @@ +<p>Henlo! I am Violet Dawn, and I am a bat pony!</p><p>I really like all sorts of fruits (they're so tasty) but I hate light and loud/high pitched sounds. Besides that, I don't really have much to say; also I love Sky Dream.</p><p>eeeeeeeeee~!</p>
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-tfbob-metadata.json b/includes/data.backup2/gdapd-tfbob-metadata.json new file mode 100644 index 0000000..604d6bd --- /dev/null +++ b/includes/data.backup2/gdapd-tfbob-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8398848, + "regression": null, + "marefriends": [ + "ynmuc/zzise" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-zajrk-metadata.json b/includes/data.backup2/gdapd-zajrk-metadata.json new file mode 100644 index 0000000..db9a223 --- /dev/null +++ b/includes/data.backup2/gdapd-zajrk-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8394752, + "regression": null, + "marefriends": [ + "ynmuc/mglyq" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/gdapd-ztfjz-metadata.json b/includes/data.backup2/gdapd-ztfjz-metadata.json new file mode 100644 index 0000000..da9434c --- /dev/null +++ b/includes/data.backup2/gdapd-ztfjz-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8392704, + "regression": null, + "marefriends": [], + "sisters": [ + "ynmuc/vvsxf" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/images/pf-gdapd-ghuln.webp b/includes/data.backup2/images/pf-gdapd-ghuln.webp Binary files differnew file mode 100644 index 0000000..f060e72 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-ghuln.webp diff --git a/includes/data.backup2/images/pf-gdapd-hpwyq.webp b/includes/data.backup2/images/pf-gdapd-hpwyq.webp Binary files differnew file mode 100644 index 0000000..690f8a1 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-hpwyq.webp diff --git a/includes/data.backup2/images/pf-gdapd-khsbb.webp b/includes/data.backup2/images/pf-gdapd-khsbb.webp Binary files differnew file mode 100644 index 0000000..24d22b5 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-khsbb.webp diff --git a/includes/data.backup2/images/pf-gdapd-lllfw.webp b/includes/data.backup2/images/pf-gdapd-lllfw.webp Binary files differnew file mode 100644 index 0000000..62fac0d --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-lllfw.webp diff --git a/includes/data.backup2/images/pf-gdapd-pabmo.webp b/includes/data.backup2/images/pf-gdapd-pabmo.webp Binary files differnew file mode 100644 index 0000000..d99674a --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-pabmo.webp diff --git a/includes/data.backup2/images/pf-gdapd-qbzxm.webp b/includes/data.backup2/images/pf-gdapd-qbzxm.webp Binary files differnew file mode 100644 index 0000000..27ad6a7 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-qbzxm.webp diff --git a/includes/data.backup2/images/pf-gdapd-qraku.webp b/includes/data.backup2/images/pf-gdapd-qraku.webp Binary files differnew file mode 100644 index 0000000..6c37005 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-qraku.webp diff --git a/includes/data.backup2/images/pf-gdapd-rirgf.webp b/includes/data.backup2/images/pf-gdapd-rirgf.webp Binary files differnew file mode 100644 index 0000000..5fae701 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-rirgf.webp diff --git a/includes/data.backup2/images/pf-gdapd-tfbob.webp b/includes/data.backup2/images/pf-gdapd-tfbob.webp Binary files differnew file mode 100644 index 0000000..4bcb735 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-tfbob.webp diff --git a/includes/data.backup2/images/pf-gdapd-zajrk.webp b/includes/data.backup2/images/pf-gdapd-zajrk.webp Binary files differnew file mode 100644 index 0000000..0f6afcd --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-zajrk.webp diff --git a/includes/data.backup2/images/pf-gdapd-zdtsg.webp b/includes/data.backup2/images/pf-gdapd-zdtsg.webp Binary files differnew file mode 100644 index 0000000..54296f1 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-zdtsg.webp diff --git a/includes/data.backup2/images/pf-gdapd-ztfjz.webp b/includes/data.backup2/images/pf-gdapd-ztfjz.webp Binary files differnew file mode 100644 index 0000000..98a7703 --- /dev/null +++ b/includes/data.backup2/images/pf-gdapd-ztfjz.webp diff --git a/includes/data.backup2/images/pf-ynmuc-erefx.webp b/includes/data.backup2/images/pf-ynmuc-erefx.webp Binary files differnew file mode 100644 index 0000000..c0ea6a8 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-erefx.webp diff --git a/includes/data.backup2/images/pf-ynmuc-erknz.webp b/includes/data.backup2/images/pf-ynmuc-erknz.webp Binary files differnew file mode 100644 index 0000000..78b6cb2 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-erknz.webp diff --git a/includes/data.backup2/images/pf-ynmuc-gevde.webp b/includes/data.backup2/images/pf-ynmuc-gevde.webp Binary files differnew file mode 100644 index 0000000..eac7023 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-gevde.webp diff --git a/includes/data.backup2/images/pf-ynmuc-gfhsr.webp b/includes/data.backup2/images/pf-ynmuc-gfhsr.webp Binary files differnew file mode 100644 index 0000000..a367f0f --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-gfhsr.webp diff --git a/includes/data.backup2/images/pf-ynmuc-jnbae.webp b/includes/data.backup2/images/pf-ynmuc-jnbae.webp Binary files differnew file mode 100644 index 0000000..0867587 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-jnbae.webp diff --git a/includes/data.backup2/images/pf-ynmuc-kkhbw.webp b/includes/data.backup2/images/pf-ynmuc-kkhbw.webp Binary files differnew file mode 100644 index 0000000..2e710f9 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-kkhbw.webp diff --git a/includes/data.backup2/images/pf-ynmuc-mglyq.webp b/includes/data.backup2/images/pf-ynmuc-mglyq.webp Binary files differnew file mode 100644 index 0000000..4e98d51 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-mglyq.webp diff --git a/includes/data.backup2/images/pf-ynmuc-rdstg.webp b/includes/data.backup2/images/pf-ynmuc-rdstg.webp Binary files differnew file mode 100644 index 0000000..99164f0 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-rdstg.webp diff --git a/includes/data.backup2/images/pf-ynmuc-rpjok.webp b/includes/data.backup2/images/pf-ynmuc-rpjok.webp Binary files differnew file mode 100644 index 0000000..04c0911 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-rpjok.webp diff --git a/includes/data.backup2/images/pf-ynmuc-sehke.webp b/includes/data.backup2/images/pf-ynmuc-sehke.webp Binary files differnew file mode 100644 index 0000000..08bfe26 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-sehke.webp diff --git a/includes/data.backup2/images/pf-ynmuc-tmgiu.webp b/includes/data.backup2/images/pf-ynmuc-tmgiu.webp Binary files differnew file mode 100644 index 0000000..56dd727 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-tmgiu.webp diff --git a/includes/data.backup2/images/pf-ynmuc-vncoa.webp b/includes/data.backup2/images/pf-ynmuc-vncoa.webp Binary files differnew file mode 100644 index 0000000..c07edb2 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-vncoa.webp diff --git a/includes/data.backup2/images/pf-ynmuc-vvsxf.webp b/includes/data.backup2/images/pf-ynmuc-vvsxf.webp Binary files differnew file mode 100644 index 0000000..2dd1d06 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-vvsxf.webp diff --git a/includes/data.backup2/images/pf-ynmuc-xbvwt.webp b/includes/data.backup2/images/pf-ynmuc-xbvwt.webp Binary files differnew file mode 100644 index 0000000..e9cec7c --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-xbvwt.webp diff --git a/includes/data.backup2/images/pf-ynmuc-xcjhj.webp b/includes/data.backup2/images/pf-ynmuc-xcjhj.webp Binary files differnew file mode 100644 index 0000000..4d7a9c5 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-xcjhj.webp diff --git a/includes/data.backup2/images/pf-ynmuc-zhtzs.webp b/includes/data.backup2/images/pf-ynmuc-zhtzs.webp Binary files differnew file mode 100644 index 0000000..da9dcb7 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-zhtzs.webp diff --git a/includes/data.backup2/images/pf-ynmuc-zzise.webp b/includes/data.backup2/images/pf-ynmuc-zzise.webp Binary files differnew file mode 100644 index 0000000..72bb342 --- /dev/null +++ b/includes/data.backup2/images/pf-ynmuc-zzise.webp diff --git a/includes/data.backup2/images/pt-gdapd-ghuln.png b/includes/data.backup2/images/pt-gdapd-ghuln.png Binary files differnew file mode 100644 index 0000000..e0601bd --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-ghuln.png diff --git a/includes/data.backup2/images/pt-gdapd-hpwyq.png b/includes/data.backup2/images/pt-gdapd-hpwyq.png Binary files differnew file mode 100644 index 0000000..348eabd --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-hpwyq.png diff --git a/includes/data.backup2/images/pt-gdapd-khsbb.png b/includes/data.backup2/images/pt-gdapd-khsbb.png Binary files differnew file mode 100644 index 0000000..09032f3 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-khsbb.png diff --git a/includes/data.backup2/images/pt-gdapd-lllfw.png b/includes/data.backup2/images/pt-gdapd-lllfw.png Binary files differnew file mode 100644 index 0000000..2cda43e --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-lllfw.png diff --git a/includes/data.backup2/images/pt-gdapd-pabmo.png b/includes/data.backup2/images/pt-gdapd-pabmo.png Binary files differnew file mode 100644 index 0000000..5a3243e --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-pabmo.png diff --git a/includes/data.backup2/images/pt-gdapd-qbzxm.png b/includes/data.backup2/images/pt-gdapd-qbzxm.png Binary files differnew file mode 100644 index 0000000..8589a82 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-qbzxm.png diff --git a/includes/data.backup2/images/pt-gdapd-qraku.png b/includes/data.backup2/images/pt-gdapd-qraku.png Binary files differnew file mode 100644 index 0000000..b022f28 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-qraku.png diff --git a/includes/data.backup2/images/pt-gdapd-rirgf.png b/includes/data.backup2/images/pt-gdapd-rirgf.png Binary files differnew file mode 100644 index 0000000..26071d3 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-rirgf.png diff --git a/includes/data.backup2/images/pt-gdapd-tfbob.png b/includes/data.backup2/images/pt-gdapd-tfbob.png Binary files differnew file mode 100644 index 0000000..69beeec --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-tfbob.png diff --git a/includes/data.backup2/images/pt-gdapd-zajrk.png b/includes/data.backup2/images/pt-gdapd-zajrk.png Binary files differnew file mode 100644 index 0000000..87fa846 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-zajrk.png diff --git a/includes/data.backup2/images/pt-gdapd-zdtsg.png b/includes/data.backup2/images/pt-gdapd-zdtsg.png Binary files differnew file mode 100644 index 0000000..4523069 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-zdtsg.png diff --git a/includes/data.backup2/images/pt-gdapd-ztfjz.png b/includes/data.backup2/images/pt-gdapd-ztfjz.png Binary files differnew file mode 100644 index 0000000..e547b71 --- /dev/null +++ b/includes/data.backup2/images/pt-gdapd-ztfjz.png diff --git a/includes/data.backup2/images/pt-ynmuc-erefx.png b/includes/data.backup2/images/pt-ynmuc-erefx.png Binary files differnew file mode 100644 index 0000000..b0125a0 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-erefx.png diff --git a/includes/data.backup2/images/pt-ynmuc-erknz.png b/includes/data.backup2/images/pt-ynmuc-erknz.png Binary files differnew file mode 100644 index 0000000..1f358d8 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-erknz.png diff --git a/includes/data.backup2/images/pt-ynmuc-gevde.png b/includes/data.backup2/images/pt-ynmuc-gevde.png Binary files differnew file mode 100644 index 0000000..ca030b2 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-gevde.png diff --git a/includes/data.backup2/images/pt-ynmuc-gfhsr.png b/includes/data.backup2/images/pt-ynmuc-gfhsr.png Binary files differnew file mode 100644 index 0000000..fd483af --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-gfhsr.png diff --git a/includes/data.backup2/images/pt-ynmuc-jnbae.png b/includes/data.backup2/images/pt-ynmuc-jnbae.png Binary files differnew file mode 100644 index 0000000..184837e --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-jnbae.png diff --git a/includes/data.backup2/images/pt-ynmuc-kkhbw.png b/includes/data.backup2/images/pt-ynmuc-kkhbw.png Binary files differnew file mode 100644 index 0000000..e1d5dbd --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-kkhbw.png diff --git a/includes/data.backup2/images/pt-ynmuc-mglyq.png b/includes/data.backup2/images/pt-ynmuc-mglyq.png Binary files differnew file mode 100644 index 0000000..8c234aa --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-mglyq.png diff --git a/includes/data.backup2/images/pt-ynmuc-rdstg.png b/includes/data.backup2/images/pt-ynmuc-rdstg.png Binary files differnew file mode 100644 index 0000000..4523069 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-rdstg.png diff --git a/includes/data.backup2/images/pt-ynmuc-rpjok.png b/includes/data.backup2/images/pt-ynmuc-rpjok.png Binary files differnew file mode 100644 index 0000000..4523069 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-rpjok.png diff --git a/includes/data.backup2/images/pt-ynmuc-sehke.png b/includes/data.backup2/images/pt-ynmuc-sehke.png Binary files differnew file mode 100644 index 0000000..18b4ac8 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-sehke.png diff --git a/includes/data.backup2/images/pt-ynmuc-tmgiu.png b/includes/data.backup2/images/pt-ynmuc-tmgiu.png Binary files differnew file mode 100644 index 0000000..7989e21 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-tmgiu.png diff --git a/includes/data.backup2/images/pt-ynmuc-vncoa.png b/includes/data.backup2/images/pt-ynmuc-vncoa.png Binary files differnew file mode 100644 index 0000000..938a248 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-vncoa.png diff --git a/includes/data.backup2/images/pt-ynmuc-vvsxf.png b/includes/data.backup2/images/pt-ynmuc-vvsxf.png Binary files differnew file mode 100644 index 0000000..0d416f7 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-vvsxf.png diff --git a/includes/data.backup2/images/pt-ynmuc-xbvwt.png b/includes/data.backup2/images/pt-ynmuc-xbvwt.png Binary files differnew file mode 100644 index 0000000..23f4d7b --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-xbvwt.png diff --git a/includes/data.backup2/images/pt-ynmuc-xcjhj.png b/includes/data.backup2/images/pt-ynmuc-xcjhj.png Binary files differnew file mode 100644 index 0000000..07a15fe --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-xcjhj.png diff --git a/includes/data.backup2/images/pt-ynmuc-zhtzs.png b/includes/data.backup2/images/pt-ynmuc-zhtzs.png Binary files differnew file mode 100644 index 0000000..475ae03 --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-zhtzs.png diff --git a/includes/data.backup2/images/pt-ynmuc-zzise.png b/includes/data.backup2/images/pt-ynmuc-zzise.png Binary files differnew file mode 100644 index 0000000..2b0046b --- /dev/null +++ b/includes/data.backup2/images/pt-ynmuc-zzise.png diff --git a/includes/data.backup2/migrate.js b/includes/data.backup2/migrate.js new file mode 100755 index 0000000..716096f --- /dev/null +++ b/includes/data.backup2/migrate.js @@ -0,0 +1,94 @@ +const fs = require('fs'); + +for (let file of fs.readdirSync(".").filter(i => i.endsWith("-metadata.json"))) { + let size = fs.readFileSync(file).toString().length; + let json = JSON.parse(fs.readFileSync(file).toString()); + console.log("-- " + file + " --"); + + if (!json['bitset']) { + console.log("Migrating file..."); + let p1r = "0".repeat(2 - json['shared_memory'].toString(2).length) + json['shared_memory'].toString(2); + let p2r = json['median'] ? "1" : "0"; + let p3r = "0".repeat(2 - json['little'].toString(2).length) + json['little'].toString(2); + let p4r = json['protector'] ? "1" : "0"; + let p5r = json['fictive'] ? "1" : "0"; + let p6r = json['not_talking'] ? "1" : "0"; + let p7r = json['host'] ? "1" : "0"; + let p8a = json['species'][0]; + let p9a = json['species'][1]; + + let p8r = "0000"; + switch (p8a) { + case "earth": + p8r = "0001"; + break; + + case "unicorn": + p8r = "0010"; + break; + + case "pegasus": + p8r = "0011"; + break; + + case "alicorn": + p8r = "0100"; + break; + + case "batpony": + p8r = "0101"; + break; + + case "crystal": + p8r = "0110"; + break; + } + + let p9r = "0000"; + switch (p9a) { + case "earth": + p9r = "0001"; + break; + + case "unicorn": + p9r = "0010"; + break; + + case "pegasus": + p9r = "0011"; + break; + + case "alicorn": + p9r = "0100"; + break; + + case "batpony": + p9r = "0101"; + break; + + case "crystal": + p9r = "0110"; + break; + } + + console.log("Generated bitset: " + p1r + p2r + p3r + p4r + p5r + p6r + p7r + p8r + p9r + "0000000"); + + let ret = { + bitset: parseInt(p1r + p2r + p3r + p4r + p5r + p6r + p7r + p8r + p9r + "0000000", 2), + regression: json['regression'] ?? null, + marefriends: json['marefriends'] ?? [], + sisters: json['sisters'] ?? [], + caretakers: json['caretakers'] ?? [] + } + + console.log("Saving..."); + fs.writeFileSync(file, JSON.stringify(ret, null, 2)); + let now = JSON.stringify(ret, null, 2).length; + + console.log("Saved space: " + (size - now) + " bytes, " + (((size - now) / size) * 100).toFixed(2) + "%"); + } else { + console.log("File has already been migrated, ignoring."); + } + + console.log(""); +}
\ No newline at end of file diff --git a/includes/data.backup2/refresh.json b/includes/data.backup2/refresh.json new file mode 100644 index 0000000..ce87852 --- /dev/null +++ b/includes/data.backup2/refresh.json @@ -0,0 +1 @@ +{"timestamp":1660748426,"duration":20}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-content.html b/includes/data.backup2/ynmuc-content.html new file mode 100644 index 0000000..7c84b7f --- /dev/null +++ b/includes/data.backup2/ynmuc-content.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Cloudburst System system.</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-erefx-content.html b/includes/data.backup2/ynmuc-erefx-content.html new file mode 100644 index 0000000..585463f --- /dev/null +++ b/includes/data.backup2/ynmuc-erefx-content.html @@ -0,0 +1 @@ +<p><a href="/raindrops/scootaloo">Scoots</a><span style="color:rgb(255,255,255);">' sister. Definitely not written by Scoots /s</span></p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-erefx-metadata.json b/includes/data.backup2/ynmuc-erefx-metadata.json new file mode 100644 index 0000000..030a51b --- /dev/null +++ b/includes/data.backup2/ynmuc-erefx-metadata.json @@ -0,0 +1,11 @@ +{ + "bitset": 135168, + "regression": null, + "marefriends": [ + "ynmuc/xbvwt" + ], + "sisters": [ + "gdapd/rirgf" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-erknz-metadata.json b/includes/data.backup2/ynmuc-erknz-metadata.json new file mode 100644 index 0000000..3604147 --- /dev/null +++ b/includes/data.backup2/ynmuc-erknz-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8392704, + "regression": null, + "marefriends": [ + "gdapd/qbzxm" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-fronters.json b/includes/data.backup2/ynmuc-fronters.json new file mode 100644 index 0000000..fd82c19 --- /dev/null +++ b/includes/data.backup2/ynmuc-fronters.json @@ -0,0 +1 @@ +{"id":"6a4d98e7-e23a-447b-ae37-2ab32f167610","timestamp":"2022-08-17T11:00:26.723947Z","members":[{"id":"mglyq","uuid":"d25282c7-e7c1-4052-bc38-1cc6ebd07c10","name":"velvet","display_name":"Velvet Cascade","color":"466cdb","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913778/917772337447858196/20211207_083155.jpg","banner":null,"description":null,"created":"2021-11-04T19:10:48.370778Z","keep_proxy":false,"proxy_tags":[{"prefix":"v.","suffix":null}],"privacy":null}]}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-general.json b/includes/data.backup2/ynmuc-general.json new file mode 100644 index 0000000..a0229be --- /dev/null +++ b/includes/data.backup2/ynmuc-general.json @@ -0,0 +1 @@ +{"id":"ynmuc","uuid":"ade46823-206b-4b0c-ad3c-caae934a5f3b","name":"Cloudburst System","description":"**\"gonna be-gonna be-gonna be my day!\"**\nwe have absolutely no clue what type of system we are, we just know it's plurality!","tag":"| Cloudburst System","pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/923647860396929035/servericon.png","banner":null,"color":null,"created":"2019-12-01T20:21:59.755765Z","privacy":null}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-gevde-metadata.json b/includes/data.backup2/ynmuc-gevde-metadata.json new file mode 100644 index 0000000..8396901 --- /dev/null +++ b/includes/data.backup2/ynmuc-gevde-metadata.json @@ -0,0 +1,11 @@ +{ + "bitset": 5378048, + "regression": null, + "marefriends": [ + "gdapd/pabmo" + ], + "sisters": [ + "gdapd/rirgf" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-gfhsr-content.html b/includes/data.backup2/ynmuc-gfhsr-content.html new file mode 100644 index 0000000..5abc149 --- /dev/null +++ b/includes/data.backup2/ynmuc-gfhsr-content.html @@ -0,0 +1 @@ +<p>hello... i'm fluttershy... as my name suggests i'm quite shy at first but once i get my bearings and we've talked for a bit i open up a bit more...</p><p>thanks for reading my page</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-gfhsr-metadata.json b/includes/data.backup2/ynmuc-gfhsr-metadata.json new file mode 100644 index 0000000..35fe7c9 --- /dev/null +++ b/includes/data.backup2/ynmuc-gfhsr-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8525824, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-jnbae-metadata.json b/includes/data.backup2/ynmuc-jnbae-metadata.json new file mode 100644 index 0000000..76a6e91 --- /dev/null +++ b/includes/data.backup2/ynmuc-jnbae-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8394752, + "regression": null, + "marefriends": [], + "sisters": [ + "gdapd/rirgf" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-kkhbw-content.html b/includes/data.backup2/ynmuc-kkhbw-content.html new file mode 100644 index 0000000..0f6c62a --- /dev/null +++ b/includes/data.backup2/ynmuc-kkhbw-content.html @@ -0,0 +1 @@ +<p>Hello!</p><p>I'm Twi, or Leah. Whichever you prefer honestly!</p><p>I'm the host for the <a href="https://ponies.equestria.horse/Cloudburst:About">Cloudburst System</a>...</p><p>I was not the original host, we don't know who they were but I guess they're gone now...</p><p>Honestly I'm <i>already</i> out of ideas on what to put here .c.</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-kkhbw-metadata.json b/includes/data.backup2/ynmuc-kkhbw-metadata.json new file mode 100644 index 0000000..5d52499 --- /dev/null +++ b/includes/data.backup2/ynmuc-kkhbw-metadata.json @@ -0,0 +1,10 @@ +{ + "bitset": 9082880, + "regression": "tmgiu", + "marefriends": [ + "gdapd/rirgf", + "gdapd/hpwyq" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-members.json b/includes/data.backup2/ynmuc-members.json new file mode 100644 index 0000000..126854e --- /dev/null +++ b/includes/data.backup2/ynmuc-members.json @@ -0,0 +1 @@ +[{"id":"rdstg","uuid":"5236c613-18e9-429f-91f4-dd96cc7c76f4","name":"unknown","display_name":"Twilight (Unknown)","color":"b2b2b2","birthday":null,"pronouns":"best to ask","avatar_url":"https://cdn.discordapp.com/attachments/872535986943426670/896673942872420372/unknown.png","banner":null,"description":"Hello! I'm likely not entirely sure who I am, but I'm using Twilight Sparkle as a temporary identity to stay calm and not panic while I figure out what's going on.\n\nI can either be an existing headmate who can't work out they're fronting, a blend of multiple headmates who can't work out who we are, or a new pony trying to figure themselves out. If you're unsure, feel free to ask!","created":"2021-10-07T10:07:27.811956Z","keep_proxy":false,"proxy_tags":[{"prefix":"{","suffix":"}"}],"privacy":null},{"id":"vncoa","uuid":"98604b5b-568d-46d3-aa9e-17a3a7c70d3a","name":"mintygrape","display_name":"Minty Grape","color":"92429a","birthday":null,"pronouns":"they/them","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913781/902177701836754994/Screenshot_20211025-134914_Chrome.jpg","banner":null,"description":null,"created":"2021-10-25T12:49:48.211953Z","keep_proxy":false,"proxy_tags":[{"prefix":"m.","suffix":null}],"privacy":null},{"id":"sehke","uuid":"123edc54-fe0e-4f31-b678-a04defc79103","name":"windyleaves","display_name":"Windy Leaves","color":"b7ff87","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/1008311892328075334/signal-2022-08-14-104518_002.png","banner":null,"description":null,"created":"2022-08-14T09:49:46.221087Z","keep_proxy":false,"proxy_tags":[{"prefix":"w.","suffix":null}],"privacy":null},{"id":"gfhsr","uuid":"36c0f97d-bb15-45f3-a4d4-d23ad41f0e6f","name":"fluttershy","display_name":"Fluttershy","color":"faf5ab","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913778/909143419652300810/2096296.png","banner":null,"description":null,"created":"2021-09-28T14:53:17.008534Z","keep_proxy":false,"proxy_tags":[{"prefix":"f.","suffix":null}],"privacy":null},{"id":"erefx","uuid":"6deaba57-be2b-4d45-9799-28a72bda38c1","name":"izzymoonbow","display_name":"Izzy Moonbow","color":"2176aa","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/972591390037004328/20220507_211034.jpg","banner":null,"description":null,"created":"2022-04-10T20:36:09.022697Z","keep_proxy":false,"proxy_tags":[{"prefix":"i.","suffix":null}],"privacy":null},{"id":"zhtzs","uuid":"5d092fbc-e3ce-4bb1-9b59-679e38413f4b","name":"pipppetals","display_name":"Pipp Petals","color":"ea95d5","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/1000175246374097026/FYOE0KoWYAc88hx.jpg","banner":null,"description":null,"created":"2022-06-17T20:36:02.751829Z","keep_proxy":false,"proxy_tags":[{"prefix":"pi.","suffix":null},{"prefix":"ฯ.","suffix":null}],"privacy":null},{"id":"vvsxf","uuid":"d37ad25f-cb72-4697-a2d0-b4bf0cef52ee","name":"plushie","display_name":"Plushie","color":"9073ff","birthday":null,"pronouns":"it/its","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/932592506854588436/20220117_110920.jpg","banner":null,"description":null,"created":"2021-09-25T21:50:25.790235Z","keep_proxy":false,"proxy_tags":[{"prefix":"p.","suffix":null}],"privacy":null},{"id":"zzise","uuid":"198d3961-2408-40b2-8f59-30a8665693a5","name":"skydream","display_name":"Sky Dream","color":"a0f0ff","birthday":null,"pronouns":"she/it","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/932945518156464168/20220118_103210.jpg","banner":null,"description":"not mango .c.","created":"2021-10-13T23:07:23.135639Z","keep_proxy":false,"proxy_tags":[{"prefix":"d.","suffix":null}],"privacy":null},{"id":"mglyq","uuid":"d25282c7-e7c1-4052-bc38-1cc6ebd07c10","name":"velvet","display_name":"Velvet Cascade","color":"466cdb","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511971913778/917772337447858196/20211207_083155.jpg","banner":null,"description":null,"created":"2021-11-04T19:10:48.370778Z","keep_proxy":false,"proxy_tags":[{"prefix":"v.","suffix":null}],"privacy":null},{"id":"rpjok","uuid":"d9b47929-e368-410e-b1ed-0cc3cb600b9b","name":"sweetiebot","display_name":"Sweetie Bot","color":"f6b8d2","birthday":null,"pronouns":"she/it","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1008828825595027537/20220815_210331.png","banner":null,"description":null,"created":"2022-08-15T19:41:26.851628Z","keep_proxy":false,"proxy_tags":[{"prefix":"e.","suffix":null}],"privacy":null},{"id":"xcjhj","uuid":"e7e3a371-fa5f-49ce-8deb-86f089579310","name":"blueberrycloud","display_name":"Blueberry Cloud","color":"fffbae","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/998365934303580181/unknown.png","banner":null,"description":null,"created":"2022-07-17T23:06:38.533806Z","keep_proxy":false,"proxy_tags":[{"prefix":"b.","suffix":null}],"privacy":null},{"id":"erknz","uuid":"dd9ba9db-08f2-4518-aa90-a479f6e60b7e","name":"lavender","display_name":"Lavender","color":"e99fe4","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/872535986943426670/896674044701724723/lavender.png","banner":null,"description":null,"created":"2021-10-06T19:29:17.195373Z","keep_proxy":false,"proxy_tags":[{"prefix":"l.","suffix":null}],"privacy":null},{"id":"gevde","uuid":"91f6e79e-36a1-4fd6-8cd9-62e8522661aa","name":"sweetiebelle","display_name":"Sweetie Belle","color":"efeded","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/825369511796539412/923255682227122226/20211222_164348.png","banner":null,"description":null,"created":"2021-12-22T16:42:59.140195Z","keep_proxy":false,"proxy_tags":[{"prefix":"sb.","suffix":null}],"privacy":null},{"id":"jnbae","uuid":"7adba16f-e0fe-4b4b-b5a2-658d1d73581f","name":"mistycloud","display_name":"Misty Cloud","color":"7083de","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/969995660063563807/999794243113603103/misty.png","banner":null,"description":null,"created":"2022-06-22T07:49:16.85348Z","keep_proxy":false,"proxy_tags":[{"prefix":"c.","suffix":null}],"privacy":null},{"id":"kkhbw","uuid":"6fde8569-27e1-4c4d-b305-66aa62915168","name":"twilight","display_name":"Twi/Leah","color":"cc9cdf","birthday":null,"pronouns":"she/pony","avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1002285835565150360/pfp.png","banner":null,"description":null,"created":"2021-09-25T22:25:41.356595Z","keep_proxy":false,"proxy_tags":[{"prefix":"t.","suffix":null}],"privacy":null},{"id":"xbvwt","uuid":"ef94e497-2b6c-4f8a-9533-0b0a125874e1","name":"sunnystarscout","display_name":"Sunny Starscout","color":"f3a493","birthday":null,"pronouns":"she/her","avatar_url":"https://cdn.discordapp.com/attachments/923518648059047957/962383825185419304/20220409_170931.jpg","banner":null,"description":null,"created":"2022-04-09T15:33:50.487224Z","keep_proxy":false,"proxy_tags":[{"prefix":"s.","suffix":null}],"privacy":null},{"id":"tmgiu","uuid":"0b7e9bc7-7555-49ec-b2f5-cb4175f5f6f4","name":"smoltwi","display_name":"Filly Twi","color":"e0c3eb","birthday":null,"pronouns":null,"avatar_url":"https://cdn.discordapp.com/attachments/1001209923213996072/1005754097267388517/20220807_092727.png","banner":null,"description":null,"created":"2022-08-07T08:21:20.865853Z","keep_proxy":false,"proxy_tags":[{"prefix":"st.","suffix":null}],"privacy":null}]
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-mglyq-content.html b/includes/data.backup2/ynmuc-mglyq-content.html new file mode 100644 index 0000000..068c227 --- /dev/null +++ b/includes/data.backup2/ynmuc-mglyq-content.html @@ -0,0 +1 @@ +<p><span style="color:rgb(255,255,255);">heya! i'm velvet cascade. i'm an earth pony in the </span><a href="/cloudburst">Cloudburst System</a><span style="color:rgb(255,255,255);">. i like farming and gardening in general! i especially like setting up intricate displays to showcase flower designs on </span><a href="https://pony.town/">Pony Town</a><span style="color:rgb(255,255,255);"> (and hopefully one day, in real life!)</span></p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-mglyq-metadata.json b/includes/data.backup2/ynmuc-mglyq-metadata.json new file mode 100644 index 0000000..43cb2bf --- /dev/null +++ b/includes/data.backup2/ynmuc-mglyq-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8390656, + "regression": null, + "marefriends": [ + "gdapd/zajrk" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-planner.json b/includes/data.backup2/ynmuc-planner.json new file mode 100644 index 0000000..a57f899 --- /dev/null +++ b/includes/data.backup2/ynmuc-planner.json @@ -0,0 +1 @@ +{"2022-08-08":["jnbae","kkhbw","xbvwt"],"2022-08-09":["vncoa","zhtzs","zzise","gevde"],"2022-08-10":[],"2022-08-11":[],"2022-08-12":[],"2022-08-13":[],"2022-08-14":["zzise","xbvwt"],"2022-08-15":["xbvwt","kkhbw","kkhbw","kkhbw"],"2022-08-16":["zhtzs","kkhbw","vvsxf"],"2022-08-17":["mglyq","erknz","gevde"],"2022-08-18":["kkhbw","xbvwt","jnbae","erefx"],"2022-08-19":["sehke","kkhbw","gfhsr"],"2022-08-20":["zzise","kkhbw","zzise"],"2022-08-21":["rpjok"],"2022-08-22":[],"2022-08-23":[]}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-rpjok-metadata.json b/includes/data.backup2/ynmuc-rpjok-metadata.json new file mode 100644 index 0000000..e6c9fb4 --- /dev/null +++ b/includes/data.backup2/ynmuc-rpjok-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 10096644, + "regression": null, + "marefriends": [ + "gdapd/rirgf" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-sehke-metadata.json b/includes/data.backup2/ynmuc-sehke-metadata.json new file mode 100644 index 0000000..666313a --- /dev/null +++ b/includes/data.backup2/ynmuc-sehke-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8390656, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-subsystem-sparkles.html b/includes/data.backup2/ynmuc-subsystem-sparkles.html new file mode 100644 index 0000000..dbcf6fc --- /dev/null +++ b/includes/data.backup2/ynmuc-subsystem-sparkles.html @@ -0,0 +1 @@ +<p>A description would be inserted here by some member of the Sparkles subsystem.</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-subsystem-sparkles.json b/includes/data.backup2/ynmuc-subsystem-sparkles.json new file mode 100644 index 0000000..0f21fbd --- /dev/null +++ b/includes/data.backup2/ynmuc-subsystem-sparkles.json @@ -0,0 +1,3 @@ +{ + "name": "The Sparkles" +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-subsystems.json b/includes/data.backup2/ynmuc-subsystems.json new file mode 100644 index 0000000..7bfb72e --- /dev/null +++ b/includes/data.backup2/ynmuc-subsystems.json @@ -0,0 +1,18 @@ +[ + { + "source": "kkhbw", + "source_type": "member", + "members": [ + "tmgiu" + ] + }, + { + "source": "sparkles", + "source_type": "trait", + "members": [ + "xbvwt", + "erefx", + "zhtzs" + ] + } +]
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-switches.json b/includes/data.backup2/ynmuc-switches.json new file mode 100644 index 0000000..483f554 --- /dev/null +++ b/includes/data.backup2/ynmuc-switches.json @@ -0,0 +1 @@ +[{"id":"6a4d98e7-e23a-447b-ae37-2ab32f167610","timestamp":"2022-08-17T11:00:26.723947Z","members":["mglyq"]},{"id":"661405ad-32ea-4f9e-9113-beccd90246b4","timestamp":"2022-08-16T21:01:46.551775Z","members":["kkhbw"]},{"id":"e41baefe-a8bf-4251-a41b-feef66ed937e","timestamp":"2022-08-16T17:08:35.958957Z","members":["rpjok"]},{"id":"e34d352d-d87a-45a3-a410-5c7b6df4e187","timestamp":"2022-08-16T12:43:00Z","members":["kkhbw"]},{"id":"51927cf9-b9a6-4bd9-a836-6898bf3add14","timestamp":"2022-08-16T11:55:12.937271Z","members":["zhtzs"]},{"id":"3f7f1d96-e470-4ce3-8db8-9a8fd02da783","timestamp":"2022-08-15T10:11:10.949152Z","members":["kkhbw"]},{"id":"0366ba60-5764-469d-9d35-306a03a46067","timestamp":"2022-08-14T22:02:43.044156Z","members":["xbvwt"]},{"id":"34392421-b3d1-4296-b64a-dedc3f6b6b21","timestamp":"2022-08-14T20:36:30.524993Z","members":["zzise"]},{"id":"dfde5190-4841-4f12-9fb1-ed9169a74036","timestamp":"2022-08-14T16:47:31.267802Z","members":["xcjhj"]},{"id":"25c5d180-bd1e-47e9-bbcd-f97841c67a3d","timestamp":"2022-08-13T23:51:13.760211Z","members":["sehke"]},{"id":"a32ca520-9cb6-4a1a-a7a3-0084b580cf22","timestamp":"2022-08-13T20:07:33.14934Z","members":["zzise"]},{"id":"2121b2cd-7620-4aeb-8f44-fc9cbe1958b7","timestamp":"2022-08-11T20:57:11.576129Z","members":["kkhbw"]},{"id":"c957b69e-aad4-4d1f-a8d9-4df49833aabe","timestamp":"2022-08-11T20:35:36.664374Z","members":["xbvwt"]},{"id":"bdc01a53-e3e3-4237-bf2f-fb8812741e84","timestamp":"2022-08-11T17:03:29.455494Z","members":["kkhbw"]},{"id":"5bb21f3d-19ca-43c5-a7de-503613229e12","timestamp":"2022-08-11T09:14:47.987122Z","members":["mglyq"]},{"id":"762d41e9-d6e8-4dd8-b1b0-a8ef3cc9db43","timestamp":"2022-08-10T19:40:55.968452Z","members":["kkhbw"]},{"id":"ff8a44ec-78b0-4afe-aaf8-b48c736923dc","timestamp":"2022-08-10T16:31:35.011505Z","members":["vncoa"]},{"id":"72e24fe3-1e3e-46df-b58f-b345f0daa363","timestamp":"2022-08-09T21:03:16.236358Z","members":["kkhbw"]},{"id":"dc397b6d-e351-4b67-a0e5-98f816166d98","timestamp":"2022-08-09T16:23:05.40537Z","members":["vvsxf"]},{"id":"21525d03-7eb3-4620-944b-dfd7a54818ab","timestamp":"2022-08-09T11:13:43.021017Z","members":["erknz"]},{"id":"9c8dc3a4-7c38-4a48-af76-ffe9c05d6aa7","timestamp":"2022-08-09T09:59:07.339238Z","members":["gevde"]},{"id":"1d2af7a0-363d-481f-8ffc-bdeb25f55f29","timestamp":"2022-08-08T19:31:18.644919Z","members":["zzise"]},{"id":"a47bd0d7-27d8-484b-ae1d-261542da0aa5","timestamp":"2022-08-08T14:39:42.200228Z","members":["kkhbw"]},{"id":"d9bdd6d6-2794-4f4e-8835-db33290d7903","timestamp":"2022-08-08T08:46:10.402919Z","members":["jnbae"]},{"id":"128a2b8f-fe62-435c-a259-fc6e88be4740","timestamp":"2022-08-07T21:31:57.32411Z","members":["erefx"]},{"id":"d0f6aa63-1551-4a9c-a876-b8b5e4f966d9","timestamp":"2022-08-06T17:20:05.59652Z","members":["kkhbw"]},{"id":"96805b65-1a14-40ba-bb0c-ac1a7a2fe695","timestamp":"2022-08-06T11:28:53.357616Z","members":["mglyq"]},{"id":"6dc862a9-57e4-4e80-9657-ef96d7fa91ff","timestamp":"2022-08-05T17:03:51.0212Z","members":["zzise"]},{"id":"988fb87b-20bd-4f9c-9da5-ed7d1609b5db","timestamp":"2022-08-05T14:04:08.789779Z","members":["kkhbw"]},{"id":"f5d227a8-3ccd-4ff4-bd98-32e4c35671bd","timestamp":"2022-08-05T11:21:53.877057Z","members":["xbvwt"]},{"id":"d5a68fbe-fd0b-431a-ac8d-32933c299ad8","timestamp":"2022-08-03T12:33:47.377523Z","members":["kkhbw"]},{"id":"d91b19dc-b804-4004-89ae-1d18a2c1f1aa","timestamp":"2022-08-03T12:23:29.380125Z","members":["zzise"]},{"id":"75c3191e-59fa-4e25-b71b-c0ec9e1f1d5f","timestamp":"2022-08-02T11:05:20.26185Z","members":["kkhbw"]},{"id":"0f7b8774-bf31-4bf2-91c5-252dcc23973e","timestamp":"2022-08-01T20:52:37.799846Z","members":["xbvwt"]},{"id":"f6d24662-cf4b-4ecd-8264-fb289ca452ba","timestamp":"2022-08-01T15:50:48.57502Z","members":["kkhbw"]},{"id":"ff5cba2e-3ea9-401c-b9a9-b62de179d923","timestamp":"2022-08-01T11:24:16.404169Z","members":["zzise"]},{"id":"9293780d-b502-4f27-a115-36522dbaa3e7","timestamp":"2022-08-01T08:12:30.67668Z","members":["erefx"]},{"id":"5282f87a-ce79-4fca-a770-d5857ff14304","timestamp":"2022-07-31T21:27:03.295077Z","members":["kkhbw"]},{"id":"d100054f-9913-4a9b-86c5-7de60f6dacb0","timestamp":"2022-07-31T16:37:29.451006Z","members":["erknz"]},{"id":"a22e1e7a-93fa-4cd6-9ae7-8a7a3a629347","timestamp":"2022-07-31T07:45:55.285055Z","members":["kkhbw"]},{"id":"762444f5-1c33-4a74-8339-837ab2db6cf5","timestamp":"2022-07-30T18:44:08.38374Z","members":["vvsxf"]},{"id":"3293e085-c941-4064-8638-bee15bf849d0","timestamp":"2022-07-29T19:41:14.095032Z","members":["xcjhj"]},{"id":"f8d87515-1a83-4bcb-9454-5d7fcd1ef462","timestamp":"2022-07-28T14:07:47.151199Z","members":["kkhbw"]},{"id":"cf8da98b-c03a-49e8-a582-e7b6f0c88f25","timestamp":"2022-07-28T12:09:20.713711Z","members":["zzise"]},{"id":"f545f42f-b65f-4a9f-8c1b-34bb8cc1bc74","timestamp":"2022-07-27T18:54:03.359331Z","members":["kkhbw"]},{"id":"a511aa5c-4ed6-43cc-b8cb-9519e22183d1","timestamp":"2022-07-27T16:05:24.568466Z","members":["mglyq"]},{"id":"c67feae6-a4a7-49cb-96d1-cea3adb769f9","timestamp":"2022-07-27T11:06:43.47133Z","members":["jnbae"]},{"id":"dc8c5da0-174b-4cac-80de-5657b2803bc8","timestamp":"2022-07-26T20:57:19.984573Z","members":["kkhbw"]},{"id":"86d2deef-e055-4508-a0ea-313e6c8167e1","timestamp":"2022-07-26T14:58:21.681152Z","members":["zzise"]},{"id":"1e6c442b-014d-4b91-a379-a4163f43920f","timestamp":"2022-07-25T14:36:42.386763Z","members":["kkhbw"]},{"id":"ad3076f7-b51a-44de-b921-0757e7d47bab","timestamp":"2022-07-25T12:10:50.029186Z","members":["vvsxf"]},{"id":"d57d7696-d17a-4a8b-97a7-4612d441fde1","timestamp":"2022-07-24T18:31:35.598319Z","members":["kkhbw"]},{"id":"7af12cfe-2729-4fb9-825c-70cd64edd2c5","timestamp":"2022-07-24T12:38:56.745626Z","members":["zzise"]},{"id":"3000a921-3f20-4714-8573-4dd8125868d5","timestamp":"2022-07-24T11:46:50.66983Z","members":["vncoa"]},{"id":"c3ebc850-c824-4111-af0a-480002fcf065","timestamp":"2022-07-24T08:47:42.514505Z","members":["xbvwt"]},{"id":"c5ba5ee2-8a55-4918-a2dc-fc605fedbfe1","timestamp":"2022-07-23T14:57:11.288643Z","members":["erknz"]},{"id":"8b8cc2e4-68cc-4aec-bebf-7df5362e3e29","timestamp":"2022-07-23T13:36:15.160833Z","members":["zzise"]},{"id":"32a35653-6599-4e80-91d6-b0d3e6e3e170","timestamp":"2022-07-23T10:28:01.152984Z","members":["gfhsr"]},{"id":"cb17c0c9-c838-4ab1-998f-33cae191a52d","timestamp":"2022-07-21T13:53:03.172427Z","members":["kkhbw"]},{"id":"72e2646c-9361-4ae5-801d-51850b3c8143","timestamp":"2022-07-21T11:31:28.867135Z","members":["gevde"]},{"id":"79414944-2583-4e8e-81cf-11f04a46f81e","timestamp":"2022-07-20T20:35:36.162672Z","members":["zhtzs"]},{"id":"6ec067a3-bd21-4518-bc78-e134f77d2d14","timestamp":"2022-07-20T19:20:53.063531Z","members":["kkhbw"]},{"id":"70b06bb2-b01c-4788-b6a8-03314efe31fd","timestamp":"2022-07-20T13:46:42.675824Z","members":["gevde"]},{"id":"43286fcd-a098-47e1-a6e7-b6d5b5636732","timestamp":"2022-07-19T13:09:43.494648Z","members":["kkhbw"]},{"id":"27b6789c-1609-4d7c-8b66-cf0e68039cfa","timestamp":"2022-07-18T21:42:03.331665Z","members":["xbvwt"]},{"id":"a7cc7729-5e2e-44e6-b501-f8546c8a8ff8","timestamp":"2022-07-17T11:49:44.64922Z","members":["kkhbw"]},{"id":"50e76dbd-6855-4fcd-96e7-b213c3f285db","timestamp":"2022-07-16T19:37:20.60917Z","members":["vvsxf"]},{"id":"a981e819-839a-482d-ac3c-74478c867f44","timestamp":"2022-07-16T15:18:58.16575Z","members":["gfhsr"]},{"id":"fa0283b4-31fe-498f-b74f-a1612794a7ca","timestamp":"2022-07-16T09:21:47.01158Z","members":["mglyq"]},{"id":"7ec121a0-fa14-4c57-8ed2-fb56a09fb22b","timestamp":"2022-07-14T15:07:58.989759Z","members":["kkhbw"]},{"id":"cba1d4ff-7e83-4edd-b982-327177b4c655","timestamp":"2022-07-14T12:03:15.028238Z","members":["jnbae"]},{"id":"3fa8f4f0-8602-48e8-b8cd-9599ba27fcee","timestamp":"2022-07-14T09:29:01.28779Z","members":["gevde"]},{"id":"d4d1c284-0782-4251-9f7f-076d34ef5a3c","timestamp":"2022-07-13T13:04:04.902073Z","members":["kkhbw"]},{"id":"7c01a511-4354-4c6b-a104-14cd3989dfb6","timestamp":"2022-07-13T09:12:43.526116Z","members":["zzise"]},{"id":"dd3f423a-b96c-44ff-b0cc-7e4f6245cdd7","timestamp":"2022-07-12T21:55:41.538956Z","members":["kkhbw"]},{"id":"2d97bab7-4763-45b1-a677-7ef08cc5d2cb","timestamp":"2022-07-12T21:21:53.21364Z","members":["gevde"]},{"id":"7cb51d48-c3e3-4263-9f29-3bff23ac10a2","timestamp":"2022-07-12T11:26:52.991209Z","members":["kkhbw"]},{"id":"141b4704-4c7e-4917-946c-c4da8772b1f2","timestamp":"2022-07-12T08:39:41.032698Z","members":["erefx"]},{"id":"006b9de1-f932-43b0-890e-74949f888c03","timestamp":"2022-07-11T10:15:03.359372Z","members":["kkhbw"]},{"id":"17533ce0-7cdd-475c-bde3-5a9a4dfa207d","timestamp":"2022-07-10T21:25:04.944671Z","members":["xbvwt"]},{"id":"a94dbc79-4b88-4260-802f-025cbee5b87f","timestamp":"2022-07-09T16:29:14.271285Z","members":["kkhbw"]},{"id":"f4dc5275-675e-494f-90dd-b841687ff6ce","timestamp":"2022-07-09T11:33:00.936258Z","members":["zzise"]},{"id":"50f7800d-6cb2-49c1-a2e5-4e1324f21257","timestamp":"2022-07-07T15:22:20.21751Z","members":["kkhbw"]},{"id":"c5832aee-2fee-4541-a472-4a0c70c92c95","timestamp":"2022-07-07T08:21:26.060082Z","members":["erknz"]},{"id":"6f3994c5-55dd-408b-bb8f-ca33a2a7591c","timestamp":"2022-07-06T15:33:21.676895Z","members":["kkhbw"]},{"id":"c7712e6d-ff01-4aa4-9f0b-d512da395728","timestamp":"2022-07-06T09:02:21.109125Z","members":["vncoa"]},{"id":"7c706268-a8fd-45f5-a874-65745f016530","timestamp":"2022-07-05T15:00:00Z","members":["kkhbw"]},{"id":"ac130bb7-6797-47b8-9cea-37e0c3139d85","timestamp":"2022-07-05T07:31:28.323064Z","members":["vvsxf"]},{"id":"7a821888-f308-4b96-b77f-f19b9d34dbc2","timestamp":"2022-07-04T14:13:56.805013Z","members":["xbvwt"]},{"id":"05b8b6f3-7e8c-4d8c-b0d9-6decbd039e6d","timestamp":"2022-07-04T10:20:25.079436Z","members":["gfhsr"]},{"id":"83b06fac-98a2-4176-ab82-301300c8c89c","timestamp":"2022-07-03T10:14:49.183852Z","members":["kkhbw"]},{"id":"0fbcb1fa-e655-4d6c-b62b-7a50f37e9f7f","timestamp":"2022-07-02T20:39:29.011589Z","members":["erefx"]},{"id":"5a94547f-3088-49c7-ae16-ca3807109ecc","timestamp":"2022-07-02T13:20:05.497265Z","members":["kkhbw"]},{"id":"626ba9c5-6b39-406d-8637-6c342b4e263d","timestamp":"2022-07-02T10:52:21.830141Z","members":["gfhsr"]},{"id":"c6751376-d751-44ed-ac84-e761928b3bf2","timestamp":"2022-07-01T14:04:06.755324Z","members":["kkhbw"]},{"id":"22778489-4c56-4234-9f99-265aa46cd321","timestamp":"2022-07-01T10:08:14.509735Z","members":["zzise"]},{"id":"f67cc64a-3d28-4a36-9732-7d9359b2af42","timestamp":"2022-06-30T15:15:47.979457Z","members":["kkhbw"]},{"id":"90fa20b7-3d2b-4a02-b5e9-8a8a8e662469","timestamp":"2022-06-30T13:46:21.38271Z","members":["xbvwt"]},{"id":"20cfadd5-6b49-4754-9435-38883c5eed97","timestamp":"2022-06-30T09:42:01.969439Z","members":["vncoa"]},{"id":"36e1ad94-0887-47f0-adc6-32e8b4e7bb4d","timestamp":"2022-06-29T17:10:16.665544Z","members":["kkhbw"]}]
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-tmgiu-metadata.json b/includes/data.backup2/ynmuc-tmgiu-metadata.json new file mode 100644 index 0000000..5b9fd19 --- /dev/null +++ b/includes/data.backup2/ynmuc-tmgiu-metadata.json @@ -0,0 +1,12 @@ +{ + "bitset": 7477248, + "median": "kkhbw", + "regression": null, + "marefriends": [ + "gdapd/ghuln" + ], + "sisters": [], + "caretakers": [ + "gdapd/rirgf" + ] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-vncoa-metadata.json b/includes/data.backup2/ynmuc-vncoa-metadata.json new file mode 100644 index 0000000..666313a --- /dev/null +++ b/includes/data.backup2/ynmuc-vncoa-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8390656, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-vvsxf-content.html b/includes/data.backup2/ynmuc-vvsxf-content.html new file mode 100644 index 0000000..a8ee483 --- /dev/null +++ b/includes/data.backup2/ynmuc-vvsxf-content.html @@ -0,0 +1 @@ +<p>hello! i'm plushie, as my name suggests i am a literal plushie</p><p>yeah that's really it honestly</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-vvsxf-metadata.json b/includes/data.backup2/ynmuc-vvsxf-metadata.json new file mode 100644 index 0000000..866ec06 --- /dev/null +++ b/includes/data.backup2/ynmuc-vvsxf-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8394752, + "regression": null, + "marefriends": [], + "sisters": [ + "gdapd/ztfjz" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-xbvwt-content.html b/includes/data.backup2/ynmuc-xbvwt-content.html new file mode 100644 index 0000000..f3188ad --- /dev/null +++ b/includes/data.backup2/ynmuc-xbvwt-content.html @@ -0,0 +1 @@ +<p>Hello! I'm Sunny Starscout! I'm both an Alicorn and an Earth Pony, It's hard to control when I am an Alicorn but I'm slowly working it out!</p><p>I'm in relationships with both <a href="/cloudburst/izzymoonbow">Izzy Moonbow</a> and <a href="/page/raindrops/scootaloo">Scoots/Mia</a>!</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-xbvwt-metadata.json b/includes/data.backup2/ynmuc-xbvwt-metadata.json new file mode 100644 index 0000000..0255291 --- /dev/null +++ b/includes/data.backup2/ynmuc-xbvwt-metadata.json @@ -0,0 +1,10 @@ +{ + "bitset": 133632, + "regression": null, + "marefriends": [ + "ynmuc/erefx", + "gdapd/rirgf" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-xcjhj-metadata.json b/includes/data.backup2/ynmuc-xcjhj-metadata.json new file mode 100644 index 0000000..5ace650 --- /dev/null +++ b/includes/data.backup2/ynmuc-xcjhj-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 8392704, + "regression": null, + "marefriends": [ + "gdapd/qraku" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-xxxxx-metadata.json b/includes/data.backup2/ynmuc-xxxxx-metadata.json new file mode 100644 index 0000000..cc33585 --- /dev/null +++ b/includes/data.backup2/ynmuc-xxxxx-metadata.json @@ -0,0 +1,7 @@ +{ + "bitset": 8523780, + "regression": null, + "marefriends": [], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-zhtzs-content.html b/includes/data.backup2/ynmuc-zhtzs-content.html new file mode 100644 index 0000000..8f5bce7 --- /dev/null +++ b/includes/data.backup2/ynmuc-zhtzs-content.html @@ -0,0 +1 @@ +<p>Heya! My name is Pipp Petals. I'm a social media influencer and a princess (a two in one package)!</p><p>I recently got pulled into this... place I guess? I'm still working out how stuff works here. Luckily Sunny, Izzy, and Zipp are here as well!</p><p>I currently have a twitter account set up, if you want to you can follow me at @CB_PippPetals!</p><p>I don't really know what else to write right now, but if I think of anything I'll put it here!</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-zhtzs-metadata.json b/includes/data.backup2/ynmuc-zhtzs-metadata.json new file mode 100644 index 0000000..1cbac39 --- /dev/null +++ b/includes/data.backup2/ynmuc-zhtzs-metadata.json @@ -0,0 +1,9 @@ +{ + "bitset": 137216, + "regression": null, + "marefriends": [], + "sisters": [ + "gdapd/rirgf" + ], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-zzise-content.html b/includes/data.backup2/ynmuc-zzise-content.html new file mode 100644 index 0000000..c10d824 --- /dev/null +++ b/includes/data.backup2/ynmuc-zzise-content.html @@ -0,0 +1 @@ +<p>heya! i'm sky dream. i'm a batpony mare who loves to go on bike rides and hike mountains!</p><p>i guess you could call me the protector of the cloudburst system, i front whenever the pony at front can't handle it anymore, but i also front whenever i personally want to do something!</p>
\ No newline at end of file diff --git a/includes/data.backup2/ynmuc-zzise-metadata.json b/includes/data.backup2/ynmuc-zzise-metadata.json new file mode 100644 index 0000000..ef183a2 --- /dev/null +++ b/includes/data.backup2/ynmuc-zzise-metadata.json @@ -0,0 +1,10 @@ +{ + "bitset": 8660992, + "regression": null, + "marefriends": [ + "gdapd/tfbob", + "gdapd/lllfw" + ], + "sisters": [], + "caretakers": [] +}
\ No newline at end of file diff --git a/includes/edit.php b/includes/edit.php index 839c130..85382a0 100644 --- a/includes/edit.php +++ b/includes/edit.php @@ -26,16 +26,20 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } -$metadata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true); +$metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true)); ?> <br> <div class="container"> - <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/banner.php"; ?> + <script> + window.currentMemberData = JSON.parse(atob(`<?= base64_encode(json_encode(getMemberBannerData($memberID, $systemID))) ?>`)); + </script> + <div id="member-banner"></div> + <script src="/app/banner.js"></script><script>refreshBanner()</script> <br> <p class="text-muted"> @@ -44,7 +48,7 @@ $metadata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes <!--suppress HtmlFormInputWithoutLabel --> <textarea id="page-editor"> - <?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-disclaimers.html") ? file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-disclaimers.html") : "" ?> + <?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") ? file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") : "" ?> </textarea> <script src="/assets/editor/editor.js"></script> diff --git a/includes/emergency.php b/includes/emergency.php new file mode 100644 index 0000000..454890d --- /dev/null +++ b/includes/emergency.php @@ -0,0 +1,197 @@ +<h2>Emergency Alert + <details style="display: inline-block;font-size:12px;"> + <summary class="text-muted" style="opacity:.5;"></summary> + <label><input id="test-mode" type="checkbox"> Test Mode</label> ยท <label><input id="fake-requests" type="checkbox"> Fake Requests</label> + </details> +</h2> + +<span data-bs-toggle="modal" data-bs-target="#turn-on" id="btn-on" style="background: #7f0000;font-size: 48px;padding: 10px 50px;border-radius: 10px;width: max-content;display: block;margin-left: auto;margin-right: auto;cursor: pointer;">Turn <b>ON</b></span> +<span data-bs-toggle="modal" data-bs-target="#turn-off" id="btn-off" style="display:none;background: #007f0b;font-size: 48px;padding: 10px 50px;border-radius: 10px;width: max-content;margin-left: auto;margin-right: auto;cursor: pointer;">Turn <b>OFF</b></span> +<p style="text-align:center;margin-top:10px;">Sending next notification <b><span id="next-notification">never</span></b></p> + +<style> + .modal-header { + border-bottom: 1px solid #353738; + } + + .modal-content { + border: 1px solid rgba(255, 255, 255, .2); + background-color: #111; + } + + .btn-close { + filter: invert(1); + } +</style> + +<div class="modal fade" id="turn-on"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <h4 class="modal-title">This is to be treated seriously.</h4> + <button type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <div class="alert alert-danger"> + <b>WARNING:</b> This alert should be used IF AND ONLY IF you are in a situation that requires immediate help from a loved one. If your life is at immediate risk, please do not use this emergency system and call your local emergency services. + </div> + <div class="alert alert-danger"> + Keep this page open until you receive help. If you close the page, alert notifications will not be sent. + </div> + + <button onclick="enableAlert();" data-bs-dismiss="modal" class="btn btn-danger" style="font-size:20px;font-weight:bold;display:block;width:100%;">I understand the risk, enable the alert now.</button> + + <hr> + + <div class="alert alert-danger"> + Once enabled, disable the alert system ONLY once you are safe. <b>Your mental health is more important than sleep.</b> + </div> + + <div class="alert alert-warning"> + This emergency alert system is designed to make sure a loved one can get in touch with you as soon as possible. Therefore, it will emit sudden alerts, and may surprise somecreature if e.g. they are sleeping. Keep that in mind. + </div> + + <p> + <b>Disclaimer:</b> This emergency alert system MUST NOT be used in life-threatening situations. Although it has been extensively tested in multiple conditions, it may stop working correctly or stop working at all at any time and without warning. If your life is at immediate risk, call your local emergency services. + </p> + <p> + This service makes use of the ntfy platform, provided by a third party. Do note that their privacy policy applies when delivering the notifications; although they should not contain personal information in any way. + </p> + <p> + ยฉ <?= date('Y') ?> Equestria.dev + </p> + </div> + </div> + </div> +</div> + +<div class="modal fade" id="turn-off"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <h4 class="modal-title">Make sure you are safe.</h4> + <button type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <div class="alert alert-danger"> + Make sure you are safe, and you got in touch with a loved one before disabling this alert system. It can be re-enabled later at any time. Remember, <b>your mental health is more important than sleep.</b> + </div> + + <p class="text-muted"> + Scroll until the bottom of the page to disable the alert. + </p> + + <p> + <b>Read this if you want to disable the alert before receiving help:</b> Remember you are loved, cared for. Ponies rely on you, need you, love you. We never want to lose any of you, so please, keep the alert enabled until you are safe. If you are unsure, always keep the alert enabled. + </p> + <p> + <b>Disclaimer:</b> This emergency alert system MUST NOT be used in life-threatening situations. Although it has been extensively tested in multiple conditions, it may stop working correctly or stop working at all at any time and without warning. If your life is at immediate risk, call your local emergency services. + </p> + <p> + This service makes use of the ntfy platform, provided by a third party. Do note that their privacy policy applies when delivering the notifications; although they should not contain personal information in any way. + </p> + <p> + ยฉ <?= date('Y') ?> Equestria.dev + </p> + + <button id="disable-button" onclick="disableAlert();" data-bs-dismiss="modal" class="btn btn-success disabled" style="display:block;width:100%;">I am safe, disable the alert now. <span id="disable-timer">(X)</span></button> + </div> + </div> + </div> +</div> + +<script> + window.alertInterval = null; + window.alertIntervalCounter = 15; + window.alertDisablerCounter = 9; + window.alertDisablerEnabled = false; + window.alertDisablerCounterInterval = null; + + setInterval(() => { + if (document.getElementById("turn-off").offsetWidth > 0 || document.getElementById("turn-off").offsetHeight > 0) { + if (!window.alertDisablerEnabled) { + window.alertDisablerEnabled = true; + window.alertDisablerCounter = 9; + + document.getElementById("disable-timer").innerText = "(" + window.alertDisablerCounter + ")"; + document.getElementById("disable-button").classList.add("disabled"); + + window.alertDisablerCounterInterval = setInterval(() => { + window.alertDisablerCounter--; + + if (window.alertDisablerCounter > 0) { + document.getElementById("disable-timer").innerText = "(" + window.alertDisablerCounter + ")"; + document.getElementById("disable-button").classList.add("disabled"); + } else { + document.getElementById("disable-timer").innerText = ""; + document.getElementById("disable-button").classList.remove("disabled"); + } + }, 1000); + } + } else { + window.alertDisablerEnabled = false; + try { clearInterval(window.alertDisablerCounterInterval) } catch (e) {} + window.alertDisablerCounter = 9; + } + }); + + function sendNotification() { + window.alertIntervalCounter = -1; + + if (document.getElementById("test-mode").checked) { + document.getElementById("next-notification").innerText = "now"; + if (document.getElementById("fake-requests").checked) { + window.alertIntervalCounter = 15; + document.getElementById("next-notification").innerText = "15 seconds"; + } else { + window.fetch("/api/emergency").then(() => { + window.alertIntervalCounter = 15; + document.getElementById("next-notification").innerText = "15 seconds"; + }) + } + } else { + document.getElementById("next-notification").innerText = "now"; + if (document.getElementById("fake-requests").checked) { + window.alertIntervalCounter = 15; + document.getElementById("next-notification").innerText = "15 seconds"; + } else { + window.fetch("/api/emergency-real").then(() => { + window.alertIntervalCounter = 15; + document.getElementById("next-notification").innerText = "15 seconds"; + }) + } + } + } + + function enableAlert() { + sendNotification(); + document.getElementById("btn-on").style.display = "none"; + document.getElementById("btn-off").style.display = "block"; + document.getElementById("test-mode").disabled = true; + document.getElementById("fake-requests").disabled = true; + + window.alertInterval = setInterval(() => { + window.alertIntervalCounter--; + + if (window.alertIntervalCounter === 0) { + sendNotification(); + } else if (window.alertIntervalCounter > -1) { + document.getElementById("next-notification").innerText = window.alertIntervalCounter + " second" + (window.alertIntervalCounter > 1 ? "s" : ""); + } + }, 1000); + } + + function disableAlert() { + clearInterval(window.alertInterval); + window.alertIntervalCounter = 15; + document.getElementById("next-notification").innerText = "never"; + document.getElementById("btn-on").style.display = "block"; + document.getElementById("btn-off").style.display = "none"; + document.getElementById("test-mode").disabled = false; + document.getElementById("fake-requests").disabled = false; + } +</script>
\ No newline at end of file diff --git a/includes/footer.php b/includes/footer.php index c120941..4bf7877 100644 --- a/includes/footer.php +++ b/includes/footer.php @@ -27,7 +27,7 @@ if (!function_exists("timeAgo")) { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } } @@ -35,7 +35,7 @@ if (!function_exists("timeAgo")) { <hr> <div class="container text-muted"> - ยฉ <?= date("Y") ?> <a href="https://equestria.horse" target="_blank" class="text-muted">Equestria.dev Developers</a><br> + ยฉ <?= date("Y") ?> <a href="https://equestria.horse" target="_blank" class="text-muted">Equestria.dev Developers</a> ยท <a href="https://git.equestria.dev/equestria.dev/ponies.equestria.horse" target="_blank" class="text-muted">Source Code</a><br> PluralKit data updated <?= trim(timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/refresh.json"), true)["timestamp"])) ?>, next update in <?php $t = 5 - round((time() - json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/refresh.json"), true)["timestamp"]) / 60); ?><?= $t > 1 ? $t . " minutes" : ($t > 0 ? "a minute" : "a few seconds") ?> <br><br><br> </div> diff --git a/includes/header.php b/includes/header.php index af12bcb..59c64b7 100644 --- a/includes/header.php +++ b/includes/header.php @@ -1,7 +1,23 @@ <?php global $title; +function error($errno, $errstr, $file, $line) { ?> + <!-- -->"> + <div class="alert alert-danger" style="text-align: left;"> + <b>Error <?= $errno ?>:</b> <?= $errstr ?> [<?= $file ?>:<?= $line ?>] + </div> +<?php } + +if (isset($_GET['errors'])) { + set_error_handler("error"); +} + +require_once $_SERVER["DOCUMENT_ROOT"] . "/includes/travelling.php"; global $travelling; require_once $_SERVER["DOCUMENT_ROOT"] . "/includes/score.php"; +require_once $_SERVER["DOCUMENT_ROOT"] . "/includes/pronouns.php"; +require_once $_SERVER["DOCUMENT_ROOT"] . "/includes/bitset.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/banner.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/rainbow.php"; function getMiniName(string $name) { $parts = explode(" ", $name); @@ -46,10 +62,10 @@ function getBrightness(string $hexCode) { function showMembersFromList(array $list, string $id) { foreach ($list as $member) { if ($member['name'] !== "unknown") { echo('<!-- ' . ($member['display_name'] ?? $member['name']) . ' --> -<a href="/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '/' . $member['name'] . '" style="text-decoration:none !important;filter:none !important;"><div class="hpd-item-card" style="background-color:rgba(255, 255, 255, .1);border-radius:10px;text-align:center;display:flex;align-items:center;justify-content:center;padding:5px;"><div> -<img alt="" src="/assets/uploads/pt' . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "") . '.png" style="height:48px;display:block;margin-left:auto;margin-right:auto;"> +<a href="/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '/' . $member['name'] . '" style="text-decoration:none !important;filter:none !important;"><div class="hpd-item-card" style="background-color:rgba(255, 255, 255, .1);border:1px solid ' . (isset($member['color']) ? "#" . $member['color'] . "55" : "transparent") . ';outline-color:' . (isset($member['color']) ? "#" . $member['color'] . "55" : "transparent") . ';border-radius:10px;text-align:center;display:flex;align-items:center;justify-content:center;padding:5px;"><div> +<img alt="" src="' . $member['avatar_url'] . '" style="border-radius:999px;background-color:rgba(0, 0, 0, .25);height:48px;display:block;margin-left:auto;margin-right:auto;"> <div style="text-decoration:none;color:white;margin-top:5px;">' . ($member['display_name'] ?? $member['name']) . '</div> -<div style="text-decoration:none !important;color:black !important;"><code style="text-decoration:none !important;color:white !important;">' . $member['proxy_tags'][0]['prefix'] . '</code></div> +<div style="text-decoration:none !important;color:black !important;"><code style="text-decoration:none !important;color:white !important;">' . ($member['travelling'] ? "+" . ($member['proxy_tags'][0]['prefix'] ?? " ") : ($member['proxy_tags'][0]['prefix'] ?? " ")) . '</code></div> </div></div></a>'); }} } @@ -71,6 +87,8 @@ function showSubsystem(array $data, string $parentSystem) { } function showSystem(string $id, string $name, string $color, bool $hideTitle) { + global $travelling; + if ($hideTitle) { echo('<!-- ' . $name . ' --> <div id="hpd-' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '" style="background:rgba(255, 255, 255, .1);border-radius:10px;padding:10px;display:grid;grid-template-columns: 1fr;margin-bottom:10px;">'); @@ -78,10 +96,9 @@ function showSystem(string $id, string $name, string $color, bool $hideTitle) { echo('<!-- ' . $name . ' --> <div id="hpd-' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '" style="background:rgba(255, 255, 255, .1);border-radius:10px;padding:10px 10px 10px 20px;display:grid;grid-template-columns: 128px 1fr;margin-bottom:10px;">'); } - if (!$hideTitle) echo('<!-- System Name --> <a style="display:flex;margin: -10px -20px;align-items:center;justify-content:center;text-align:center;padding: 10px 20px;border-radius: 10px;background: ' . $color . ';width: 148px;text-decoration:none;color:white;filter:none !important;" href="/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '" class="hpd-system"> -' . $name . ' +<div style="text-align:center;"><img src="/assets/uploads/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '.png" style="width:64px;"><br>' . $name . '</div> </a>'); if ($hideTitle) { @@ -90,7 +107,19 @@ function showSystem(string $id, string $name, string $color, bool $hideTitle) { echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);padding-left:10px;grid-gap:10px;">'); } - showMembersFromList(scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$id-members.json"), true), $id), $id); + showMembersFromList(scoreOrder([...array_map(function ($i) use ($id) { + $i["travelling"] = false; + $i["system"] = $id; + return $i; + }, array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$id-members.json"), true), function ($i) use ($travelling) { + return !$travelling[$i['id']]['travelling']; + })), ...array_map(function ($i) use ($id) { + $i["travelling"] = true; + $i["system"] = ($id === "gdapd" ? "ynmuc" : "gdapd"); + return $i; + }, array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($id === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true), function ($i) use ($travelling) { + return $travelling[$i['id']]['travelling']; + }))], $id), $id); echo('</div> @@ -114,7 +143,7 @@ function raindrops(bool $hideTitle): void { <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <title><?= $title ? $title . " ยท " : "" ?>Cuties and Plurality</title> - <link rel="shortcut icon" href="/assets/uploads/logo.jpg" type="image/jpg"> + <link rel="shortcut icon" href="/assets/logo/logo.png" type="image/png"> <style> nav.navbar { background-color: black !important; @@ -134,6 +163,26 @@ function raindrops(bool $hideTitle): void { background-color: rgba(255, 255, 255, .2) !important; } + .hpd-system { + transition: opacity 200ms; + } + + .hpd-item-card { + outline-style: solid; + outline-width: 0; + transition: background-color 200ms, outline-width 200ms; + } + + .hpd-item-card:hover { + outline-style: solid; + outline-width: 4px; + } + + .hpd-item-card:active { + outline-style: solid; + outline-width: 6px; + } + .hpd-system:hover { opacity: .9 !important; } @@ -302,10 +351,11 @@ function raindrops(bool $hideTitle): void { color: white !important; text-decoration: none !important; cursor: pointer; + transition: background 200ms; } .system-action:hover { - background:rgba(255, 255, 255, .1); + background: rgba(255, 255, 255, .1); } .table-dark { @@ -598,12 +648,27 @@ function raindrops(bool $hideTitle): void { .tree-inner { display: inline-block; } + + .navbar-collapse.collapse.show, .navbar-collapse.collapsing { + background: black; + margin: 7px -12px; + padding: 0 12px; + border-bottom: 1px solid rgba(255, 255, 255, .25); + } + + .rainbow-item:hover { + opacity: .75; + } + + .rainbow-item:active { + opacity: .5; + } </style> </head> <body> - <nav class="navbar navbar-expand-md bg-dark navbar-dark"> + <nav class="navbar navbar-expand-<?= $isLoggedIn ? 'lg' : 'md' ?> bg-dark navbar-dark" style="height:60px;"> <div class="container-fluid"> - <a class="navbar-brand" href="/"><img src="/assets/uploads/logo.jpg" alt="" style="width:32px;vertical-align: middle;margin-right:5px;"> <span style="vertical-align: middle;">Cuties and Plurality</span><a> + <a class="navbar-brand" href="/"><img src="/assets/logo/logo.png" alt="" style="width:32px;vertical-align: middle;margin-right:5px;"> <span style="vertical-align: middle;">Cuties and Plurality</span><a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> @@ -611,66 +676,99 @@ function raindrops(bool $hideTitle): void { <ul class="navbar-nav"> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"> - <img src="<?= $isLoggedIn ? "/assets/icons/loggedin.svg" : "/assets/icons/global.svg" ?>" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <img src="/assets/icons/global.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Global</span> </a> <ul class="dropdown-menu"> - <?php if ($isLoggedIn): ?> - <li><a class="dropdown-item" href="/emergency"> - <img src="/assets/icons/emergency.svg" alt="" style="width:24px;vertical-align: middle;"> - <span class="text-danger" style="vertical-align: middle;">Emergency Alert</span> - </a></li> - <li><hr class="dropdown-divider"></li> - <?php endif; ?> <li><a class="dropdown-item" href="/"> <img src="/assets/icons/home.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Home</span> </a></li> - <li><a class="dropdown-item" href="/disclaimers"> + <li><a class="dropdown-item" href="/-/disclaimers"> <img src="/assets/icons/disclaimers.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Disclaimers</span> </a></li> - <li><a class="dropdown-item" href="/relations"> + <li><a class="dropdown-item" href="/-/relations"> <img src="/assets/icons/relations.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Relations</span> </a></li> - <li><a class="dropdown-item" href="/terminology"> + <li><a class="dropdown-item" href="/-/terminology"> <img src="/assets/icons/terminology.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Terminology</span> </a></li> <li><hr class="dropdown-divider"></li> <li><h5 class="dropdown-header">Tools</h5></li> - <li><a class="dropdown-item" href="/parser"> + <li><a class="dropdown-item" href="/-/parser"> <img src="/assets/icons/parser.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Message Parser</span> </a></li> - <li><a class="dropdown-item" href="/prefix"> + <li><a class="dropdown-item" href="/-/prefix"> <img src="/assets/icons/prefix.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Prefix Generator</span> </a></li> + <?php if (!$isLoggedIn): ?> + <li><hr class="dropdown-divider"></li> + <li><h5 class="dropdown-header">Administrator</h5></li> + <li><a class="dropdown-item" href="/-/login"> + <img src="/assets/icons/login.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Login</span> + </a></li> + <?php else: ?> <li><hr class="dropdown-divider"></li> <li><h5 class="dropdown-header">Administrator</h5></li> - <?php if ($isLoggedIn): ?> - <li><a class="dropdown-item" href="/fronting"> + <li><a class="dropdown-item disabled" href="#" style="opacity:.5;"> + <img src="/assets/icons/right.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">See menu</span> + </a></li> + <?php endif; ?> + </ul> + </li> + <?php if ($isLoggedIn): ?> + <li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"> + <img src="/assets/icons/admin.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Administrator</span> + </a> + <ul class="dropdown-menu"> + <li><a class="dropdown-item" href="/-/emergency"> + <img src="/assets/icons/emergency.svg" alt="" style="width:24px;vertical-align: middle;"> + <span class="text-danger" style="vertical-align: middle;">Emergency Alert</span> + </a></li> + <li><hr class="dropdown-divider"></li> + + <li><h5 class="dropdown-header">Applications</h5></li> + <li><a class="dropdown-item" href="/-/fronting"> <img src="/assets/icons/fronting.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Front Planner</span> </a></li> - <li><a class="dropdown-item" href="/score"> + <li><a class="dropdown-item" href="/-/together"> + <img src="/assets/icons/together.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Watch Together</span> + </a></li> + <li><a class="dropdown-item" href="/-/travelling"> + <img src="/assets/icons/travel.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">System Travelling</span> + </a></li> + <li><hr class="dropdown-divider"></li> + + <li><h5 class="dropdown-header">Utilities</h5></li> + <li><a class="dropdown-item" href="/-/bitset"> + <img src="/assets/icons/bitset.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Bitset Calculator</span> + </a></li> + <li><a class="dropdown-item" href="/-/score"> <img src="/assets/icons/score.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Score System Testing</span> </a></li> - <li><a class="dropdown-item" href="/logout"> + <li><hr class="dropdown-divider"></li> + + <li><a class="dropdown-item" href="/-/logout"> <img src="/assets/icons/logout.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">Logout</span> </a></li> - <?php else: ?> - <li><a class="dropdown-item" href="/login"> - <img src="/assets/icons/login.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> - <span style="vertical-align: middle;">Login</span> - </a></li> - <?php endif; ?> </ul> </li> + <?php endif; ?> <?php if (!isset($emergencyHeader) || !$emergencyHeader): ?> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="/cloudburst" role="button" data-bs-toggle="dropdown"> @@ -682,9 +780,26 @@ function raindrops(bool $hideTitle): void { <img src="/assets/icons/about.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;">About us</span> </a></li> + <?php + + $subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-subsystems.json"), true); + $subsystemsNotMember = array_values(array_filter($subsystems, function ($i) { + return $i["source_type"] !== "member"; + })); + + if (count($subsystemsNotMember) > 0): ?> + <li><hr class="dropdown-divider"></li> + <li><h5 class="dropdown-header">Subsystems (<?= count($subsystemsNotMember) ?>)</h5></li> + <?php foreach ($subsystemsNotMember as $subsystem): $ssData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-subsystem-" . $subsystem['source'] . ".json"), true); ?> + <li><a class="dropdown-item" href="/cloudburst/-/subsystem/<?= $subsystem['source'] ?>"> + <img src="/assets/uploads/ss-<?= $subsystem['source'] ?>.png" alt="" style="border-radius:5px;width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;"><?= $ssData['name'] ?? $subsystem['source'] ?></span> + </a></li> + <?php endforeach; ?> + <?php endif; ?> <li><hr class="dropdown-divider"></li> - <li><h5 class="dropdown-header">Members (<?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)) - 1 ?>)</h5></li> - <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true), "ynmuc") as $member): if ($member['name'] !== "unknown"): ?> + <li><h5 class="dropdown-header">Members (<?= count(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true), "ynmuc")) - 1 ?>)</h5></li> + <?php foreach (scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true), "ynmuc"), "ynmuc") as $member): if ($member['name'] !== "unknown"): ?> <li><a class="dropdown-item" href="/cloudburst/<?= $member['name'] ?>"> <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;"><?= $member['display_name'] ?? $member['name'] ?></span> @@ -703,8 +818,8 @@ function raindrops(bool $hideTitle): void { <span style="vertical-align: middle;">About us</span> </a></li> <li><hr class="dropdown-divider"></li> - <li><h5 class="dropdown-header">Members (<?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true)) - 1 ?>)</h5></li> - <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd") as $member): if ($member['name'] !== "unknown"): ?> + <li><h5 class="dropdown-header">Members (<?= count(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd")) - 1 ?>)</h5></li> + <?php foreach (scoreOrder(withTravelers(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd"), "gdapd") as $member): if ($member['name'] !== "unknown"): ?> <li><a class="dropdown-item" href="/raindrops/<?= $member['name'] ?>"> <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;"><?= $member['display_name'] ?? $member['name'] ?></span> diff --git a/includes/member.php b/includes/member.php index ad7995f..a2573d1 100644 --- a/includes/member.php +++ b/includes/member.php @@ -1,5 +1,7 @@ <?php global $system; global $systemCommonName; global $systemID; global $member; global $memberData; global $memberCommonName; global $memberID; $title = $memberCommonName . " ยท " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); + function timeAgo($time): string { if (!is_numeric($time)) { $time = strtotime($time); @@ -26,28 +28,49 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } -$metadata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true); +$metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true)); ?> <br> <div class="container"> - <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/banner.php"; ?> + <script> + window.currentMemberData = JSON.parse(atob(`<?= base64_encode(json_encode(getMemberBannerData($memberID, $systemID))) ?>`)); + </script> + <div id="member-banner"></div> + <script src="/app/banner.js"></script><script>refreshBanner()</script> <br> <?php global $isLoggedIn; if ($isLoggedIn): ?> + <?php if (!isset($metadata["bitset"])): ?> + <div class="alert alert-warning"> + <b>This member's metadata needs an update.</b> It still uses the old JSON metadata system instead of the new 24bit integer-based system. Contact a developer to request an update. (only administrators can see this; file: <code><?= $_SERVER['DOCUMENT_ROOT'] ?>/includes/data/<?= $systemID ?>-<?= $memberID ?>-metadata.json</code>) + </div> + <?php endif; ?> <div class="alert alert-dark"> <details> <summary>Private administrator information</summary> <ul style="margin-bottom:0;"> <li><b>ID:</b> <code><?= $memberID ?></code> (<code><?= $systemID . "/" . $memberID ?></code>, <?= $memberData["name"] ?>)</li> + <li><b>Pronouns:</b> <?= implode(", ", getPronounsFromMark($memberData['pronouns'])) ?></li> + <li><b>Pronouns usage:</b> <ul><?php + + foreach (getMemberPronouns($memberData['pronouns']) as $type => $usage) { + if (is_string($usage) && $type !== "color") { + echo("<li><b>" . $type . ":</b> " . $usage . "</li>"); + } + } + + ?></ul></li> + <li><b>Color:</b> <span style="background-color:#<?= $memberData["color"] ?? "ffffff" ?>;display:inline-block;width:16px;height:16px;border-radius:5px;vertical-align: middle;filter: invert(1) hue-rotate(180deg);"></span> <span style="vertical-align: middle;"><code>#<?= $memberData["color"] ?? "ffffff" ?></code></span> + <li><b>Bitset:</b><?php if (isset($metadata["bitset"])): ?> <span style="background-color:#<?= dechex($metadata["bitset"]) ?>;display:inline-block;width:16px;height:16px;border-radius:5px;vertical-align: middle;filter: invert(1) hue-rotate(180deg);"></span> <span style="vertical-align: middle;"><code><?= str_repeat("0", 24 - strlen(decbin($metadata["bitset"]))) . decbin($metadata["bitset"]) ?></code> (0x<?= str_repeat("0", 6 - strlen(dechex($metadata["bitset"]))) . dechex($metadata["bitset"]) ?>, <?= $metadata["bitset"] ?>)</li></span><?php else: ?> <span class="text-warning" style="filter:invert(1) hue-rotate(180deg);">Not using bitset; please update.</span><?php endif; ?> <li><b>Reduced name:</b> <?= getMiniName($memberData["display_name"] ?? $member["name"]) ?></li> <li><b>Shared memory access:</b> <code><?= $metadata["shared_memory"] ?></code> (<?= $metadata["shared_memory"] === 2 ? "Full direct access" : ($metadata["shared_memory"] === 0 ? "No direct access" : "Partial direct access") ?>)</li> <li><b>Protector:</b> <code><?= $metadata["protector"] ? "1" : "0" ?></code> (<?= $metadata["protector"] ? "Yes" : "No" ?>)</li> - <li><b>Little:</b> <code><?= $metadata["little"] ?></code> (<?= $metadata["little"] === 2 ? "Is a little" : ($metadata["little"] === 1 ? "Is an age regressor" : "No") ?>)</li> + <li><b>Little:</b> <code><?= $metadata["little"] ?></code> (<?= $metadata["little"] === 2 ? "Is a little" : ($metadata["little"] === 1 ? "Is an age regressor" : ($metadata["little"] === 3 ? "Not a little, but younger" : "No")) ?>)</li> <li><b>Relations count:</b> <code><?= count($metadata["marefriends"]) + count($metadata["sisters"]) ?></code></li> <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $score = calculateScore($metadata, $memberData["display_name"] ?? $memberData["name"]); ?> <li> @@ -72,10 +95,15 @@ $metadata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes </details> </div> <?php endif; ?> + <?php if ($travelling[$memberID]['travelling']): ?> + <div class="alert alert-primary"> + This pony is visiting the <?= $systemID === "ynmuc" ? "Raindrops System" : "Cloudburst System" ?> since <?= timeAgo($travelling[$memberID]["history"][count($travelling[$memberID]["history"]) - 1]["start"]) ?>, therefore currently not in the <?= $systemCommonName ?>. + </div> + <?php endif; ?> <div id="page-content"> <?php global $isLoggedIn; if ($isLoggedIn): ?> - <small style="opacity:.5;display:block;">(<a href="/edit/<?= $system ?>/<?= $memberData['name'] ?>">edit</a>)</small> + <small style="opacity:.5;display:block;">(<a href="/-/edit/<?= $system ?>/<?= $memberData['name'] ?>">edit</a>)</small> <?php endif; ?> <?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") ? file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") : "<i>This page is empty.</i>" ?> </div> diff --git a/includes/planner.php b/includes/planner.php new file mode 100644 index 0000000..0b7604a --- /dev/null +++ b/includes/planner.php @@ -0,0 +1,872 @@ +<?php + +$cloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-planner.json"), true); +$raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-planner.json"), true); + +?> + +<h2>Front Planner</h2> +<table id="planner"> + <tbody> + <tr class="planner-day"> + <td colspan="4" id="planner-header-0">Today</td> + <?php + + if (!$cloudburst[date('Y-m-d')]) $cloudburst[date('Y-m-d')] = []; + $dayCloudburst = $cloudburst[date('Y-m-d')]; + if (!$raindrops[date('Y-m-d')]) $raindrops[date('Y-m-d')] = []; + $dayRaindrops = $raindrops[date('Y-m-d')]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d') ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 0);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d') ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 0);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day" id="planner-header-1"> + <td colspan="4">Tomorrow</td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + 86400)]) $cloudburst[date('Y-m-d', time() + 86400)] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + 86400)]; + if (!$raindrops[date('Y-m-d', time() + 86400)]) $raindrops[date('Y-m-d', time() + 86400)] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + 86400)]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + 86400) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 1);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + 86400) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 1);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day" id="planner-header-2"> + <td colspan="4"><?= date('l', time() + (86400 * 2)) ?></td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + (86400 * 2))]) $cloudburst[date('Y-m-d', time() + (86400 * 2))] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + (86400 * 2))]; + if (!$raindrops[date('Y-m-d', time() + (86400 * 2))]) $raindrops[date('Y-m-d', time() + (86400 * 2))] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + (86400 * 2))]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 2)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 2);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 2)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 2);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day"> + <td colspan="4" id="planner-header-3"><?= date('l', time() + (86400 * 3)) ?></td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + (86400 * 3))]) $cloudburst[date('Y-m-d', time() + (86400 * 3))] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + (86400 * 3))]; + if (!$raindrops[date('Y-m-d', time() + (86400 * 3))]) $raindrops[date('Y-m-d', time() + (86400 * 3))] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + (86400 * 3))]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 3)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 3);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 3)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 3);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day"> + <td colspan="4" id="planner-header-4"><?= date('l', time() + (86400 * 4)) ?></td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + (86400 * 4))]) $cloudburst[date('Y-m-d', time() + (86400 * 4))] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + (86400 * 4))]; + if (!$raindrops[date('Y-m-d', time() + (86400 * 4))]) $raindrops[date('Y-m-d', time() + (86400 * 4))] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + (86400 * 4))]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 4)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 4);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 4)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 4);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day"> + <td colspan="4" id="planner-header-5"><?= date('l', time() + (86400 * 5)) ?></td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + (86400 * 5))]) $cloudburst[date('Y-m-d', time() + (86400 * 5))] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + (86400 * 5))]; + if (!$raindrops[date('Y-m-d', time() + (86400 * 5))]) $raindrops[date('Y-m-d', time() + (86400 * 5))] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + (86400 * 5))]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 5)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 5);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 5)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 5);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + + <tr class="planner-day"> + <td colspan="4" id="planner-header-6"><?= date('l', time() + (86400 * 6)) ?></td> + <?php + + if (!$cloudburst[date('Y-m-d', time() + (86400 * 6))]) $cloudburst[date('Y-m-d', time() + (86400 * 6))] = []; + $dayCloudburst = $cloudburst[date('Y-m-d', time() + (86400 * 6))]; + if (!$raindrops[date('Y-m-d', time() + (86400 * 6))]) $raindrops[date('Y-m-d', time() + (86400 * 6))] = []; + $dayRaindrops = $raindrops[date('Y-m-d', time() + (86400 * 6))]; + + $index = 0; + $lengthCloudburst = count($dayCloudburst); + $lengthRaindrops = count($dayRaindrops); + $biggest = max($lengthCloudburst, $lengthRaindrops); + + ?> + </tr> + <tr class="planner-header"> + <td colspan="2">Cloudburst System</td> + <td colspan="2">Raindrops System</td> + </tr> + <?php for ($i = 0; $i <= $biggest; $i++): ?> + <tr class="planner-member"> + <?php if (isset($dayCloudburst[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <td class="planner-link"> + <?php $member = getSystemMember("ynmuc", $dayCloudburst[$index]); ?> + <a class="member-link" onclick="openEditFronter('cloudburst', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 6)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayCloudburst)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('cloudburst', 6);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + <?php if (isset($dayRaindrops[$index])): ?> + <td class="planner-member-id"> + <?= $index + 1 ?> + </td> + <?php $member = getSystemMember("gdapd", $dayRaindrops[$index]); ?> + <td class="planner-link"> + <a class="member-link" onclick="openEditFronter('raindrops', <?= $index ?>, '<?= date('Y-m-d', time() + (86400 * 6)) ?>')"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + </td> + <?php elseif ($index === count($dayRaindrops)): ?> + <td class="planner-add-inner planner-link" colspan="2"> + <a href="#" onclick="addFronter('raindrops', 6);" class="planner-add-link"> + <img src="/assets/icons/add.svg" alt="" class="planner-add-icon"> + <span class="planner-add-text">Add new fronter</span> + </a> + </td> + <?php else: ?> + <td colspan="2" class="planner-empty"></td> + <?php endif; ?> + </tr> + <?php $index++; endfor; ?> + <tr class="planner-day planner-end-of-day"> + <td colspan="4"> + <?php if (count($dayCloudburst) > 0 && count($dayRaindrops) > 0): ?> + <?= getMiniName(getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["display_name"] ?? getSystemMember("ynmuc", $dayCloudburst[count($dayCloudburst) - 1])["name"]) ?> will sleep with <?= getMiniName(getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["display_name"] ?? getSystemMember("gdapd", $dayRaindrops[count($dayRaindrops) - 1])["name"]) ?> + <?php else: ?> + Unable to calculate who will sleep with who + <?php endif; ?> + </td> + </tr> + <tr class="planner-separator"></tr> + </tbody> +</table> + +<style> + #planner { + margin-top: 10px; + border-collapse: collapse; + width: 100%; + } + + .planner-header { + font-weight: bold; + text-align: center; + } + + .planner-header td { + width: 50%; + } + + td { + border: 1px solid rgba(255, 255, 255, .25); + padding: 5px 10px; + } + + .planner-day { + text-align: center; + color: rgba(255, 255, 255, .5); + font-weight: bold; + } + + .planner-end-of-day { + font-weight: normal; + } + + .planner-end-of-day td { + border-bottom-left-radius: 10px; + } + + .planner-separator { + height: 20px; + } + + .planner-member-id { + width: 10%; + text-align: right; + } + + .planner-link { + padding: 0; + } + + .planner-link a { + padding: 5px 10px; + display: block; + } + + .planner-add-link { + color: rgba(255, 255, 255, .75); + text-decoration: none; + } + + .planner-add-link:hover { + color: rgba(255, 255, 255, .75); + } + + .planner-link:hover { + background-color: rgba(255, 255, 255, .125); + } + + .planner-link:active { + background-color: rgba(255, 255, 255, .25); + } + + .planner-add-icon { + filter: invert(1); + width: 24px; + vertical-align: middle; + opacity: .75; + } + + .planner-add-text { + vertical-align: middle; + } + + .modal-header { + border-bottom: 1px solid #353738; + } + + .modal-content { + border: 1px solid rgba(255, 255, 255, .2); + background-color: #111; + } + + .btn-close { + filter: invert(1); + } + + .list-group-item { + color: #fff; + background-color: #222; + border: 1px solid rgba(255, 255, 255, .125); + } + + .list-group-item.disabled { + color: #fff; + background-color: #222; + border-color: rgba(255, 255, 255, .125); + opacity: .75; + } + + .list-group-item:hover { + background-color: #252525; + color: #ddd; + } + + .list-group-item:active, .list-group-item:focus { + background-color: #272727; + color: #bbb; + } + + .member-link, .list-group-item-action { + cursor: pointer !important; + } + +</style> + +<!--suppress JSUnresolvedVariable, JSUnresolvedFunction --> +<script> + window.currentWorkingDate; + window.fronting = JSON.parse(window.atob(`<?= base64_encode(json_encode([ + "raindrops" => $raindrops, + "cloudburst" => $cloudburst + ])) ?>`)); + window.names = JSON.parse(window.atob(`<?php + + $names = []; + foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { + $names[$member['id']] = $member['display_name'] ?? $member['name']; + } + foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { + $names[$member['id']] = $member['display_name'] ?? $member['name']; + } + + echo(base64_encode(json_encode($names))) ?>`)); + + function ordinal(n) { + let s = ["th", "st", "nd", "rd"]; + let v = n % 100; + return n + (s[(v - 20) % 10] || s[v] || s[0]); + } + + function openEditFronter(system, id, date) { + let display; + + switch (date) { + case "<?= date('Y-m-d') ?>": + display = "today"; + break; + + case "<?= date('Y-m-d', time() + 86400) ?>": + display = "tomorrow"; + break; + + case "<?= date('Y-m-d', time() + (86400 * 2)) ?>": + display = "on <?= date('l', time() + (86400 * 2)) ?>"; + break; + + case "<?= date('Y-m-d', time() + (86400 * 3)) ?>": + display = "on <?= date('l', time() + (86400 * 3)) ?>"; + break; + + case "<?= date('Y-m-d', time() + (86400 * 4)) ?>": + display = "on <?= date('l', time() + (86400 * 4)) ?>"; + break; + + case "<?= date('Y-m-d', time() + (86400 * 5)) ?>": + display = "on <?= date('l', time() + (86400 * 5)) ?>"; + break; + + case "<?= date('Y-m-d', time() + (86400 * 6)) ?>": + display = "on <?= date('l', time() + (86400 * 6)) ?>"; + break; + } + + window.selectedFronting = { + system: system === "cloudburst" ? "ynmuc" : "gdapd", + date: date, + index: id + } + + document.getElementById("edit-fronter-name").innerText = names[fronting[system][date][id]] ?? fronting[system][date][id]; + document.getElementById("edit-fronter-date").innerText = display; + document.getElementById("edit-fronter-pos").innerText = ordinal(id + 1); + document.getElementById("edit-fronter-system").innerText = system === "cloudburst" ? "Cloudburst System" : "Raindrops System"; + + let modal = new bootstrap.Modal(document.getElementById('edit-fronter')); + modal.show(); + } + + function addFronter(system, offset) { + let date; + let display; + + switch (offset) { + case 0: + date = "<?= date('Y-m-d') ?>"; + display = "today"; + break; + + case 1: + date = "<?= date('Y-m-d', time() + 86400) ?>"; + display = "tomorrow"; + break; + + case 2: + date = "<?= date('Y-m-d', time() + (86400 * 2)) ?>"; + display = "on <?= date('l', time() + (86400 * 2)) ?>"; + break; + + case 3: + date = "<?= date('Y-m-d', time() + (86400 * 3)) ?>"; + display = "on <?= date('l', time() + (86400 * 3)) ?>"; + break; + + case 4: + date = "<?= date('Y-m-d', time() + (86400 * 4)) ?>"; + display = "on <?= date('l', time() + (86400 * 4)) ?>"; + break; + + case 5: + date = "<?= date('Y-m-d', time() + (86400 * 5)) ?>"; + display = "on <?= date('l', time() + (86400 * 5)) ?>"; + break; + + case 6: + date = "<?= date('Y-m-d', time() + (86400 * 6)) ?>"; + display = "on <?= date('l', time() + (86400 * 6)) ?>"; + break; + } + + window.currentWorkingDate = date; + document.getElementById("new-fronter-date").innerText = display; + document.getElementById("new-fronter-system").innerText = system === "cloudburst" ? "Cloudburst System" : "Raindrops System"; + document.getElementById("list-" + system).style.display = ""; + document.getElementById("list-" + (system === "cloudburst" ? "raindrops" : "cloudburst")).style.display = "none"; + + let modal = new bootstrap.Modal(document.getElementById('new-fronter')); + modal.show(); + } + + function confirmFronterAdd(system, id) { + Array.from(document.getElementsByClassName("new-fronter-link")).forEach((i) => { + i.classList.add("disabled"); + }); + + document.getElementById("new-fronter-close").classList.add("disabled"); + + window.fetch("/api/fronter?t=add&d=" + window.currentWorkingDate + "&m=" + id + "&s=" + system).then(() => { + location.reload(); + }); + } + + function deleteFronter() { + Array.from(document.getElementsByClassName("edit-fronter-link")).forEach((i) => { + i.classList.add("disabled"); + }); + + document.getElementById("edit-fronter-close").classList.add("disabled"); + + window.fetch("/api/fronter?t=delete&d=" + window.selectedFronting["date"] + "&i=" + window.selectedFronting["index"] + "&s=" + window.selectedFronting["system"]).then(() => { + location.reload(); + }); + } + + function moveFronterDown() { + Array.from(document.getElementsByClassName("edit-fronter-link")).forEach((i) => { + i.classList.add("disabled"); + }); + + document.getElementById("edit-fronter-close").classList.add("disabled"); + + window.fetch("/api/fronter?t=down&d=" + window.selectedFronting["date"] + "&i=" + window.selectedFronting["index"] + "&s=" + window.selectedFronting["system"]).then(() => { + location.reload(); + }); + } + + function moveFronterUp() { + Array.from(document.getElementsByClassName("edit-fronter-link")).forEach((i) => { + i.classList.add("disabled"); + }); + + document.getElementById("edit-fronter-close").classList.add("disabled"); + + window.fetch("/api/fronter?t=up&d=" + window.selectedFronting["date"] + "&i=" + window.selectedFronting["index"] + "&s=" + window.selectedFronting["system"]).then(() => { + location.reload(); + }); + } +</script> + +<div class="modal fade" id="new-fronter" data-bs-backdrop="static" data-bs-keyboard="false"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <h4 class="modal-title">Add new fronter <span id="new-fronter-date">n/a</span></h4> + <button id="new-fronter-close" type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <p class="text-muted">Adding for the <span id="new-fronter-system">n/a</span></p> + + <div class="list-group" id="list-raindrops"> + <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd") as $member): ?> + <a onclick="confirmFronterAdd('gdapd', '<?= $member['id'] ?>');" class="new-fronter-link member-link list-group-item list-group-item-action" href="#"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + <?php endforeach; ?> + </div> + + <div class="list-group" id="list-cloudburst"> + <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true), "ynmuc") as $member): ?> + <a onclick="confirmFronterAdd('ynmuc', '<?= $member['id'] ?>');" class="new-fronter-link member-link list-group-item list-group-item-action" href="#"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + <?php endforeach; ?> + </div> + </div> + + </div> + </div> +</div> + +<div class="modal fade" id="edit-fronter" data-bs-backdrop="static" data-bs-keyboard="false"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <h4 class="modal-title">Edit <span id="edit-fronter-name">n/a</span> fronting in <span id="edit-fronter-pos">n/a</span> <span id="edit-fronter-date">n/a</span></h4> + <button id="edit-fronter-close" type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <p class="text-muted">Editing for the <span id="edit-fronter-system">n/a</span></p> + + <div class="list-group" id="list-cloudburst"> + <a class="list-group-item list-group-item-action edit-fronter-link" onclick="deleteFronter();"> + <img src="/assets/icons/delete.svg" style="width:24px;filter:invert(1);vertical-align: middle;"> + <span style="vertical-align: middle;">Delete</span> + </a> + <a class="list-group-item list-group-item-action edit-fronter-link" onclick="moveFronterUp();"> + <img src="/assets/icons/up.svg" style="width:24px;filter:invert(1);vertical-align: middle;"> + <span style="vertical-align: middle;">Move up</span> + </a> + <a class="list-group-item list-group-item-action edit-fronter-link" onclick="moveFronterDown();"> + <img src="/assets/icons/down.svg" style="width:24px;filter:invert(1);vertical-align: middle;"> + <span style="vertical-align: middle;">Move down</span> + </a> + </div> + </div> + + </div> + </div> +</div> + +<?php + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-planner.json", json_encode($cloudburst)); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-planner.json", json_encode($raindrops)); + +?>
\ No newline at end of file diff --git a/includes/pronouns.php b/includes/pronouns.php new file mode 100644 index 0000000..5f79dd3 --- /dev/null +++ b/includes/pronouns.php @@ -0,0 +1,115 @@ +<?php + +$pronounsSets = [ + "pony" => [ + "gender" => "ponygender", + "object" => "pony", + "person" => "pony", + "possessive_det" => "pony's", + "possessive_pro" => "pony's", + "reflexive" => "ponyself", + "subjective" => "pony", + "third" => true, + "color" => "warning" + ], + "she" => [ + "gender" => "female", + "object" => "her", + "person" => "girl", + "possessive_det" => "her", + "possessive_pro" => "hers", + "reflexive" => "herself", + "subjective" => "she", + "third" => true, + "color" => "success" + ], + "he" => [ + "gender" => "male", + "object" => "him", + "person" => "boy", + "possessive_det" => "his", + "possessive_pro" => "his", + "reflexive" => "himself", + "subjective" => "he", + "third" => true, + "color" => "info" + ], + "it" => [ + "gender" => "agender", + "object" => "it", + "person" => "person", + "possessive_det" => "its", + "possessive_pro" => "its", + "reflexive" => "itself", + "subjective" => "it", + "third" => true, + "color" => "light" + ], + "they" => [ + "gender" => "non binary", + "object" => "them", + "person" => "person", + "possessive_det" => "their", + "possessive_pro" => "theirs", + "reflexive" => "themself", + "subjective" => "they", + "third" => false, + "color" => "primary" + ] +]; + +$possibilitiesPerSet = []; +foreach ($pronounsSets as $name => $set) { + if (!isset($possibilitiesPerSet[$name])) $possibilitiesPerSet[$name] = []; + $possibilitiesPerSet[$name][] = $name; + + foreach ($set as $category => $value) { + if (is_string($value)) $possibilitiesPerSet[$name][] = $value; + } +} + +function getSetFromValue(string $value) { + global $possibilitiesPerSet; + + foreach ($possibilitiesPerSet as $name => $set) { + if (in_array($value, $set)) { + return $name; + } + } + + return null; +} + +function getPronounsFromMark(string $mark = null): array { + if (!isset($mark)) { + return []; + } else { + $parts = array_unique(array_map(function ($i) { + return getSetFromValue($i); + }, explode("/", $mark))); + return $parts; + } +} + +function getMemberPronouns(?string $pronouns): ?array { + global $pronounsSets; + $list = getPronounsFromMark($pronouns); + return $pronounsSets[$list[count($list) - 1]] ?? $pronounsSets["she"]; +} + +function getGenderFromPronoun(string $pronoun) { + global $pronounsSets; + $set = getPronounsFromMark($pronoun)[0]; + return $pronounsSets[$set]["gender"]; +} + +function getTooltipsFromMark(string $mark = null): ?string { + if (!isset($mark)) { + return null; + } else { + return implode("/", array_map(function ($i) { + global $pronounsSets; + return "<span title='" . ucfirst(getGenderFromPronoun($i)) . "' data-bs-toggle='tooltip'>" . $i . "</span>"; + }, explode("/", $mark))); + } +}
\ No newline at end of file diff --git a/includes/rainbow.php b/includes/rainbow.php new file mode 100644 index 0000000..c710be0 --- /dev/null +++ b/includes/rainbow.php @@ -0,0 +1,97 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/bitset.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; + +function rgbToHsl($r, $g, $b) { + $oldR = $r; + $oldG = $g; + $oldB = $b; + + $r /= 255; + $g /= 255; + $b /= 255; + + $max = max($r, $g, $b); + $min = min($r, $g, $b); + + $l = ($max + $min) / 2; + $d = $max - $min; + + if ($d == 0) { + $h = $s = 0; + } else { + $s = $d / (1 - abs(2 * $l - 1)); + + switch ($max) { + case $r: + $h = 60 * fmod((($g - $b) / $d), 6); + if ($b > $g) { + $h += 360; + } + break; + + case $g: + $h = 60 * (($b - $r) / $d + 2); + break; + + case $b: + $h = 60 * (($r - $g) / $d + 4); + break; + } + } + + return array(round($h, 2), round($s, 2), round($l, 2)); +} + +function rainbow(): array { + $members = scoreOrderGlobal(); + $data = []; + + foreach ($members as $member) { + $data[$member["name"]] = [ + "_data" => $member + ]; + + if (isset($member["color"])) { + $data[$member["name"]]["rgb"] = [ + hexdec(substr($member["color"], 0, 2)), + hexdec(substr($member["color"], 2, 2)), + hexdec(substr($member["color"], 4, 2)) + ]; + $data[$member["name"]]["hsl"] = rgbToHsl( + $data[$member["name"]]["rgb"][0], + $data[$member["name"]]["rgb"][1], + $data[$member["name"]]["rgb"][2] + ); + } else { + $data[$member["name"]]["rgb"] = [255, 255, 255]; + $data[$member["name"]]["hsl"] = rgbToHsl(255, 255, 255); + } + } + + return $data; +} + +function getMembersByColor(): array { + $members = rainbow(); + uasort($members, function ($a, $b) { + return $a['hsl'][0] - $b['hsl'][0]; + }); + $members = [ + ...array_filter($members, function ($i) { + return $i['hsl'][2] < 0.9 || $i['hsl'][1] > 0.2; + }), + ...array_filter($members, function ($i) { + return $i['hsl'][2] >= 0.9 || $i['hsl'][1] <= 0.2; + }) + ]; + + $sorted = []; + foreach ($members as $data) { + $data["_data"]["hue"] = $data["hsl"][0]; + $sorted[] = $data["_data"]; + } + + return $sorted; +}
\ No newline at end of file diff --git a/includes/refresh.php b/includes/refresh.php index c29136f..83745fb 100644 --- a/includes/refresh.php +++ b/includes/refresh.php @@ -1,35 +1,119 @@ <?php -$start = time(); +$start = microtime(true); @mkdir("./data"); +$files = []; +$restored = []; +$times = []; + +$currentOpStart = microtime(true); +foreach (array_filter(scandir("./data"), function ($i) { + return !str_starts_with($i, ".") && $i !== "backup" && is_file("./data/" . $i); +}) as $file) { + $files[] = $file; +} + +@mkdir("./data/backup"); +foreach ($files as $file) { + copy("./data/" . $file, "./data/backup/" . $file); +} + function getSystem(string $id) { + global $times; echo("System: $id\n"); echo(" Base system info\n"); + $currentOpStart = microtime(true); file_put_contents("./data/$id-general.json", file_get_contents("https://api.pluralkit.me/v2/systems/$id")); sleep(1); + $times["system-general-$id"] = microtime(true) - $currentOpStart; echo(" System members\n"); + $currentOpStart = microtime(true); file_put_contents("./data/$id-members.json", file_get_contents("https://api.pluralkit.me/v2/systems/$id/members")); sleep(1); + $times["system-members-$id"] = microtime(true) - $currentOpStart; echo(" Fronters\n"); + $currentOpStart = microtime(true); file_put_contents("./data/$id-fronters.json", file_get_contents("https://api.pluralkit.me/v2/systems/$id/fronters")); sleep(1); + $times["system-fronters-$id"] = microtime(true) - $currentOpStart; echo(" Switches\n"); + $currentOpStart = microtime(true); file_put_contents("./data/$id-switches.json", file_get_contents("https://api.pluralkit.me/v2/systems/$id/switches")); sleep(1); + $times["system-switches-$id"] = microtime(true) - $currentOpStart; } getSystem("gdapd"); // Raindrops getSystem("ynmuc"); // Cloudburst -$time = (time() - $start); +echo("Downloading images.\n"); +if (!file_exists("./data/images")) mkdir("./data/images"); + +$currentOpStart = microtime(true); +foreach (json_decode(file_get_contents("./data/gdapd-members.json"), true) as $member) { + $currentOpStart2 = microtime(true); + echo(" " . $member['id'] . "\n"); + + if (isset($member['avatar_url'])) { + echo(" Profile picture\n"); + exec("convert -resize 128x128 -quality 50 \"" . $member['avatar_url'] . "\" \"./data/images/pf-gdapd-" . $member['id'] . ".webp\""); + } + + echo(" Pony Town character\n"); + if (file_exists("../assets/uploads/pt-" . $member['name'] . ".png")) { + exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt-" . $member['name'] . ".png\" \"./data/images/pt-gdapd-" . $member['id'] . ".png\""); + } else { + exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt.png\" \"./data/images/pt-gdapd-" . $member['id'] . ".png\""); + } + $times["images-gdapd-" . $member['id']] = microtime(true) - $currentOpStart2; +} +$times["images-gdapd"] = microtime(true) - $currentOpStart; + +$currentOpStart = microtime(true); +foreach (json_decode(file_get_contents("./data/ynmuc-members.json"), true) as $member) { + $currentOpStart2 = microtime(true); + echo(" " . $member['id'] . "\n"); + + if (isset($member['avatar_url'])) { + echo(" Profile picture\n"); + exec("convert -resize 128x128 -quality 50 \"" . $member['avatar_url'] . "\" \"./data/images/pf-ynmuc-" . $member['id'] . ".webp\""); + } + + echo(" Pony Town character\n"); + if (file_exists("../assets/uploads/pt-" . $member['name'] . ".png")) { + exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt-" . $member['name'] . ".png\" \"./data/images/pt-ynmuc-" . $member['id'] . ".png\""); + } else { + exec("convert -resize 64x64 -quality 50 \"../assets/uploads/pt.png\" \"./data/images/pt-ynmuc-" . $member['id'] . ".png\""); + } + $times["images-ynmuc-" . $member['id']] = microtime(true) - $currentOpStart2; +} +$times["images-ynmuc"] = microtime(true) - $currentOpStart; + +$currentOpStart = microtime(true); +function isJson($string): bool { + json_decode($string); + return (json_last_error() === JSON_ERROR_NONE); +} + +foreach ($files as $file) { + if (trim(file_get_contents("./data/" . $file)) === "" || (isJson(trim(file_get_contents("./data/" . $file))) && isset(json_decode(trim(file_get_contents("./data/" . $file)), true)["message"]))) { + $restored[] = $file; + copy("./data/backup/" . $file, "./data/" . $file); + } +} +$times["restore"] = microtime(true) - $currentOpStart; + +$time = (microtime(true) - $start); echo("Completed in " . $time . " seconds.\n"); file_put_contents("./data/refresh.json", json_encode([ "timestamp" => time(), - "duration" => $time + "duration" => $time, + "restored" => $restored, + "times" => $times ]));
\ No newline at end of file diff --git a/includes/score.php b/includes/score.php index 5367cd6..89b3d3c 100644 --- a/includes/score.php +++ b/includes/score.php @@ -3,7 +3,7 @@ function calculateScore($metadata, $name) { $scoreHost = $metadata["host"] ? 10000 : 0; $scoreFictive = $metadata["fictive"] ? 200 : 0; - $scoreLittle = $metadata["little"] === 2 ? 100 : ($metadata["little"] === 1 ? 50 : 0); + $scoreLittle = $metadata["little"] === 2 ? 100 : ($metadata["little"] === 1 ? 50 : ($metadata["little"] === 3 ? 75 : 0)); $scoreNotTalking = $metadata["not_talking"] ? -200 : 0; $scoreMedian = $metadata["median"] !== false ? -50 : 0; $scoreProtector = $metadata["protector"] ? 1000 : 0; @@ -34,8 +34,10 @@ function scoreOrder($members, $system) { $ordered = []; foreach ($members as $member) { if ($member["name"] !== "unknown") { - $member["_metadata"] = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$member[id]-metadata.json"), true); - $member["_score"] = calculateScore(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$member[id]-metadata.json"), true), $member["display_name"] ?? $member["name"]); + $systemID = $member["system"] ?? $system; + + $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$member[id]-metadata.json"), true)); + $member["_score"] = calculateScore(parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$member[id]-metadata.json"), true)), $member["display_name"] ?? $member["name"]); $ordered[] = $member; } } @@ -52,16 +54,16 @@ function scoreOrderGlobal() { foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { if ($member["name"] !== "unknown") { $member["_system"] = "gdapd"; - $member["_metadata"] = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true); - $member["_score"] = calculateScore(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true), $member["display_name"] ?? $member["name"]); + $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)); + $member["_score"] = calculateScore(parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)), $member["display_name"] ?? $member["name"]); $ordered[] = $member; } } foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { if ($member["name"] !== "unknown") { $member["_system"] = "ynmuc"; - $member["_metadata"] = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true); - $member["_score"] = calculateScore(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true), $member["display_name"] ?? $member["name"]); + $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)); + $member["_score"] = calculateScore(parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)), $member["display_name"] ?? $member["name"]); $ordered[] = $member; } } diff --git a/includes/subsysbanner.php b/includes/subsysbanner.php index be06b06..95c6942 100644 --- a/includes/subsysbanner.php +++ b/includes/subsysbanner.php @@ -23,7 +23,7 @@ $fronters = array_map(function ($item) { <h3 style="height:max-content;"><?= $subsystemData["name"] ?></h3> <div style="height:max-content;display:grid;grid-template-columns: repeat(4, 1fr);" id="member-card"> <span> - <b>Current Fronter:</b> + <b>Fronter:</b> <?php if (in_array($fronters[0], getSubsystemByID($subsystemID)["members"])): $member = getMember($fronters[0]); ?> <a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> <?php else: ?> @@ -48,7 +48,7 @@ $fronters = array_map(function ($item) { } ?> - <b>Previous Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + <b>Last Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> </span> <span> <b>Members:</b> <?= count(getSubsystemByID($subsystemID)["members"]) ?> diff --git a/includes/subsysedit.php b/includes/subsysedit.php index a19683d..274814e 100644 --- a/includes/subsysedit.php +++ b/includes/subsysedit.php @@ -26,7 +26,7 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } ?> diff --git a/includes/sysbanner.php b/includes/sysbanner.php index d76e601..7b6bbf1 100644 --- a/includes/sysbanner.php +++ b/includes/sysbanner.php @@ -7,6 +7,8 @@ global $systemCommonName; global $systemID; global $system; +$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); + ?> <div id="system-info" style="background:rgba(255, 255, 255, .1);border-radius:10px;display:grid;grid-template-columns: 128px 1fr;"> @@ -18,20 +20,30 @@ global $system; <span> <b>Host: </b><?php - $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); + $foundHost = false; + $hostGoneTravelling = false; + + $members = array_filter(scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true), $systemID), function ($i) use ($travelling) { + global $hostGoneTravelling; + if ($travelling[$i['id']]['travelling']) $hostGoneTravelling = true; + return true; + }); foreach ($members as $member) { - $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$member[id]-metadata.json"), true); - if ($data["host"]): ?> + $data = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$member[id]-metadata.json"), true)); + if ($data["host"]): $foundHost = true; ?> <a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> <?php endif; } + if (!$foundHost) echo("-"); + if ($hostGoneTravelling) echo("<br>(travelling)"); + ?> </span> <span> <?php $member = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["members"][0]; ?> - <b>Current Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + <b>Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> </span> <span> <?php @@ -47,10 +59,20 @@ global $system; } ?> - <b>Previous Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> + <b>Last Fronter: </b><a class="member-link" href="/<?= $system ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> </span> <span> - <b>Members: </b><?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true)) - 1 ?> + <b>Members: </b><?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true)) - 1 ?><?php + + $travellers = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true), function ($i) use ($travelling) { + return $travelling[$i['id']]['travelling']; + }); + + if (count($travellers) > 0) { + echo("<br>+ " . count($travellers) . " traveller" . (count($travellers) > 1 ? "s" : "")); + } + + ?> </span> <span> <b>Last Switch: </b><span data-bs-toggle="tooltip" title="<?= date("D j M Y, G:i:s (e)", strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) ?>"><?= timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"]) ?></span> diff --git a/includes/sysedit.php b/includes/sysedit.php index 0e3c9a7..91ebbe1 100644 --- a/includes/sysedit.php +++ b/includes/sysedit.php @@ -26,7 +26,7 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } ?> diff --git a/includes/system.php b/includes/system.php index 606d63d..059eed7 100644 --- a/includes/system.php +++ b/includes/system.php @@ -39,7 +39,7 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } ?> @@ -51,9 +51,9 @@ function timeAgo($time): string { <div id="page-content"> <?php global $isLoggedIn; if ($isLoggedIn): ?> - <small style="opacity:.5;display:block;">(<a href="/edit/<?= $system ?>">edit</a>)</small> + <small style="opacity:.5;display:block;">(<a href="/-/edit/<?= $system ?>">edit</a>)</small> <?php endif; ?> - <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-disclaimers.html") ?> + <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-content.html") ?> </div> <?php if ($system === "cloudburst") cloudburst(true); else raindrops(true); ?> </div> diff --git a/includes/system/compare.php b/includes/system/compare.php index 96eb5d9..6d69cd0 100644 --- a/includes/system/compare.php +++ b/includes/system/compare.php @@ -105,29 +105,33 @@ function getMember(string $id) { <?php foreach ($metadata["species"] ?? [] as $species): ?> <img data-bs-toggle="tooltip" title="<?php switch ($species) { case "earth": - echo "Earth pony"; + if ($metadata["robot"]) echo "Robot earth pony"; else echo "Earth pony"; break; case "alicorn": - echo "Alicorn"; + if ($metadata["robot"]) echo "Robot alicorn"; else echo "Alicorn"; + break; + + case "crystal": + if ($metadata["robot"]) echo "Robot crystal pony"; else echo "Crystal pony"; break; case "pegasus": - echo "Pegasus"; + if ($metadata["robot"]) echo "Robot pegasus"; else echo "Pegasus"; break; case "batpony": - echo "Bat pony"; + if ($metadata["robot"]) echo "Robot bat pony"; else echo "Bat pony"; break; case "unicorn": - echo "Unicorn"; + if ($metadata["robot"]) echo "Robot unicorn"; else echo "Unicorn"; break; default: - echo $species; + echo $species . "_" . $metadata["robot"]; break; - } ?>" style="width:24px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?>.png" alt="<?= $species ?>"> + } ?>" style="width:24px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?><?= $metadata["robot"] ? "-robot" : "" ?>.png" alt="<?= $species ?>"> <?php endforeach; ?> </span> <span class="comparison-item"> diff --git a/includes/system/history.php b/includes/system/history.php index ad4e30e..8483e3a 100644 --- a/includes/system/history.php +++ b/includes/system/history.php @@ -21,7 +21,11 @@ function getMember(string $id) { $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-switches.json"), true); uksort($switches, function ($a, $b) { - return strtotime($b["timestamp"]) - strtotime($a["timestamp"]); + if (isset($b["timestamp"]) && isset($a["timestamp"])) { + return strtotime($b["timestamp"]) - strtotime($a["timestamp"]); + } else { + return null; + } }); function getSwitchesForDay(int $day) { @@ -33,7 +37,11 @@ function getMember(string $id) { })); uksort($filtered, function ($a, $b) { - return strtotime($b["timestamp"]) - strtotime($a["timestamp"]); + if (isset($b["timestamp"]) && isset($a["timestamp"])) { + return strtotime($b["timestamp"]) - strtotime($a["timestamp"]); + } else { + return null; + } }); return $filtered; @@ -80,6 +88,13 @@ function getMember(string $id) { ?> <h2>Front history in the <?= $systemCommonName ?></h2> + <div class="alert alert-warning" id="timezone" style="display: none;"> + Times on this page are now shown using your local timezone (<span id="timezone-name">-</span>). Days start at <span id="day-start">-</span> (00:00 on UTC). + <script> + document.getElementById("day-start").innerText = new Date(<?= strtotime(date('Y-m-d')) ?> * 1000).toTimeString().substring(0, 5); + document.getElementById("timezone-name").innerText = new Date().toTimeString().split("(")[1].split(")")[0]; + </script> + </div> <h4>Today</h4> <?php @@ -100,7 +115,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 0) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 0) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -130,7 +145,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 1) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 1) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -160,7 +175,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 2) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 2) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -190,7 +205,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 3) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 3) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -220,7 +235,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 4) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 4) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -250,7 +265,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 5) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 5) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -280,7 +295,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 6) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 6) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -310,7 +325,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 7) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 7) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -340,7 +355,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 8) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 8) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -365,7 +380,7 @@ function getMember(string $id) { foreach ($fronters as $fronter): $member = getMember($fronter["member"]); ?> <div class="fronter"> - <span class="fronter-date" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> + <span class="fronter-date" data-date-time="<?= isNotToday($fronter["date"], 9) ? strtotime(date('Y-m-d', $fronter["date"])) : $fronter["date"] ?>" style="opacity:.5;font-family: monospace;font-size:14px;vertical-align: middle;"> <?= isNotToday($fronter["date"], 9) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> @@ -376,5 +391,9 @@ function getMember(string $id) { </div> <?php endforeach; ?> </div> + <script> + Array.from(document.getElementsByClassName("fronter-date")).forEach((i) => { i.innerText = new Date(parseInt(i.getAttribute("data-date-time").trim()) * 1000).toTimeString().split(" ")[0].substring(0, 5) + " " }); + document.getElementById("timezone").style.display = ""; + </script> <?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?>
\ No newline at end of file diff --git a/includes/system/subsystem.php b/includes/system/subsystem.php index 5d28cba..14d1b2a 100644 --- a/includes/system/subsystem.php +++ b/includes/system/subsystem.php @@ -1,5 +1,7 @@ <?php global $system; global $systemCommonName; global $parts; global $systemID; +if (str_ends_with($_GET['_'], "/subsystem")) header("Location: /?error=Invalid subsystem ID") and die(); + $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); $subsystemID = $parts[3]; @@ -97,7 +99,7 @@ function timeAgo($time): string { $difference = round($difference); $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense} "; + return "{$difference} {$period} {$tense}"; } if (getSubsystemByID($subsystemID) === null) header("Location: /?error=Invalid subsystem ID") and die(); @@ -114,7 +116,7 @@ $title = $subsystemData["name"] . " ยท " . $systemCommonName; require_once $_SER <div id="page-content"> <?php global $isLoggedIn; if ($isLoggedIn): ?> - <small style="opacity:.5;display:block;">(<a href="/edit/<?= $system ?>/<?= $subsystemID ?>">edit</a>)</small> + <small style="opacity:.5;display:block;">(<a href="/-/edit/<?= $system ?>/<?= $subsystemID ?>">edit</a>)</small> <?php endif; ?> <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystemID.html") ?> </div> diff --git a/includes/travelling.php b/includes/travelling.php new file mode 100644 index 0000000..bb24172 --- /dev/null +++ b/includes/travelling.php @@ -0,0 +1,40 @@ +<?php + +$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); +$members = [...array_map(function ($i) { + $i["_system"] = "ynmuc"; + return $i; +}, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)), ...array_map(function ($i) { + $i["_system"] = "gdapd"; + return $i; +}, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true))]; + +foreach ($members as $member) { + if (!isset($travelling[$member["id"]])) { + $travelling[$member["id"]] = [ + "travelling" => false, + "history" => [] + ]; + } +} + +function withTravelers(array $members, string $system): array { + global $travelling; + + return [ + ...array_map(function ($i) use ($system) { + $i['system'] = $system; + return $i; + }, array_filter($members, function ($i) use ($travelling) { + return !$travelling[$i['id']]['travelling']; + })), + ...array_filter(array_map(function ($i) use ($system) { + $i['system'] = $system === "gdapd" ? "ynmuc" : "gdapd"; + return $i; + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($system === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true)), function ($i) use ($travelling) { + return $travelling[$i['id']]['travelling']; + }) + ]; +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json", json_encode($travelling, JSON_PRETTY_PRINT));
\ No newline at end of file |