diff options
332 files changed, 2519 insertions, 1713 deletions
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 5ff7764..9433d17 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -4,7 +4,7 @@ <inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true"> <option name="myValues"> <value> - <list size="7"> + <list size="8"> <item index="0" class="java.lang.String" itemvalue="nobr" /> <item index="1" class="java.lang.String" itemvalue="noembed" /> <item index="2" class="java.lang.String" itemvalue="comment" /> @@ -12,6 +12,7 @@ <item index="4" class="java.lang.String" itemvalue="embed" /> <item index="5" class="java.lang.String" itemvalue="script" /> <item index="6" class="java.lang.String" itemvalue="style" /> + <item index="7" class="java.lang.String" itemvalue="peh-muted" /> </list> </value> </option> diff --git a/Authentication/Callback/index.php b/Authentication/Callback/index.php index 6a6d8f1..b68000b 100644 --- a/Authentication/Callback/index.php +++ b/Authentication/Callback/index.php @@ -1,5 +1,8 @@ <?php +$channel = "private"; +$server = "privateauth.equestria.dev"; + header("Content-Type: text/plain"); // TODO: handle errors @@ -7,9 +10,9 @@ if (!isset($_GET['code'])) { die(); } -$appdata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true); +$appdata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)[$channel]; -$crl = curl_init('https://privateauth.equestria.dev/hub/api/rest/oauth2/token'); +$crl = curl_init('https://' . $server . '/hub/api/rest/oauth2/token'); curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); curl_setopt($crl, CURLINFO_HEADER_OUT, true); curl_setopt($crl, CURLOPT_POST, true); @@ -26,7 +29,7 @@ $result = json_decode($result, true); curl_close($crl); if (isset($result["access_token"])) { - $crl = curl_init('https://privateauth.equestria.dev/hub/api/rest/users/me'); + $crl = curl_init('https://' . $server . '/hub/api/rest/users/me'); curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); curl_setopt($crl, CURLINFO_HEADER_OUT, true); curl_setopt($crl, CURLOPT_HTTPHEADER, [ diff --git a/Authentication/PublicCallback/index.php b/Authentication/PublicCallback/index.php new file mode 100644 index 0000000..54980b1 --- /dev/null +++ b/Authentication/PublicCallback/index.php @@ -0,0 +1,51 @@ +<?php + +$channel = "public"; +$server = "auth.equestria.horse"; + +header("Content-Type: text/plain"); +// TODO: handle errors + +if (!isset($_GET['code'])) { + die(); +} + +$appdata = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)[$channel]; + +$crl = curl_init('https://' . $server . '/hub/api/rest/oauth2/token'); +curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); +curl_setopt($crl, CURLINFO_HEADER_OUT, true); +curl_setopt($crl, CURLOPT_POST, true); +curl_setopt($crl, CURLOPT_HTTPHEADER, [ + "Authorization: Basic " . base64_encode($appdata["id"] . ":" . $appdata["secret"]), + "Content-Type: application/x-www-form-urlencoded", + "Accept: application/json" +]); +curl_setopt($crl, CURLOPT_POSTFIELDS, "grant_type=authorization_code&redirect_uri=" . urlencode("http" . ($_SERVER['HTTPS'] ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . "/Authentication/PublicCallback") . "&code=" . $_GET['code']); + +$result = curl_exec($crl); +$result = json_decode($result, true); + +curl_close($crl); + +if (isset($result["access_token"])) { + $crl = curl_init('https://' . $server . '/hub/api/rest/users/me'); + curl_setopt($crl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($crl, CURLINFO_HEADER_OUT, true); + curl_setopt($crl, CURLOPT_HTTPHEADER, [ + "Authorization: Bearer " . $result["access_token"], + "Accept: application/json" + ]); + + $result = curl_exec($crl); + $result = json_decode($result, true); + + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public"); + + $token = bin2hex(random_bytes(32)); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public/" . $token, json_encode($result)); + header("Set-Cookie: PEH2_USER_TOKEN=" . $token . "; SameSite=None; Path=/; Secure; HttpOnly; Expires=" . date("r", time() + (86400 * 730))); + + header("Location: /Authentication/Success"); + die(); +}
\ No newline at end of file diff --git a/Authentication/PublicStart/index.php b/Authentication/PublicStart/index.php new file mode 100644 index 0000000..c0ed9c6 --- /dev/null +++ b/Authentication/PublicStart/index.php @@ -0,0 +1,7 @@ +<?php + +$channel = "public"; +$server = "auth.equestria.horse"; + +header("Location: https://$server/hub/api/rest/oauth2/auth?client_id=" . json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)[$channel]["id"] . "&response_type=code&redirect_uri=http" . ($_SERVER['HTTPS'] ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . "/Authentication/PublicCallback&scope=Hub&request_credentials=default&access_type=offline"); +die(); diff --git a/Authentication/Start/index.php b/Authentication/Start/index.php index 10f8b45..18bde88 100644 --- a/Authentication/Start/index.php +++ b/Authentication/Start/index.php @@ -1,4 +1,7 @@ <?php -header("Location: https://privateauth.equestria.dev/hub/api/rest/oauth2/auth?client_id=" . json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["id"] . "&response_type=code&redirect_uri=http" . ($_SERVER['HTTPS'] ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . "/Authentication/Callback&scope=Hub&request_credentials=default&access_type=offline"); +$channel = "private"; +$server = "privateauth.equestria.dev"; + +header("Location: https://$server/hub/api/rest/oauth2/auth?client_id=" . json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)[$channel]["id"] . "&response_type=code&redirect_uri=http" . ($_SERVER['HTTPS'] ? "s" : "") . "://" . $_SERVER['HTTP_HOST'] . "/Authentication/Callback&scope=Hub&request_credentials=default&access_type=offline"); die(); @@ -1,96 +1,244 @@ # ponies.equestria.horse ## Metadata Bits -24bit bitsets are now used to define metadata that doesn't require a string input. A lot of reserved values remain for future use. +48bit bitsets are now used to define metadata that doesn't require a string input, they were 24bit in the past but were changed to 48bit after adding additional metadata. A lot of reserved values remain for future use. ``` -00...................... = No direct access to shared memory. -01...................... = Partial direct access to shared memory. -10...................... = Full direct access to shared memory. -..0..................... = Not part of a median system. -..1..................... = Part of a median system. -...00................... = Not a little. -...01................... = Age regressor. -...10................... = Little. -...11................... = Not a little, but younger. -.....0.................. = Not a protector. -.....1.................. = Protector. -......0................. = Not a fictive. -......1................. = Fictive. -.......0................ = No "Not talking" attribute. -.......1................ = "Not talking" attribute. -........0............... = Not an host. -........1............... = Host. -.....................0.. = Not a robot -.....................1.. = Robot -.........0001........... = 1st species: Earth pony. -.........0010........... = 1st species: Unicorn. -.........0011........... = 1st species: Pegasus. -.........0100........... = 1st species: Alicorn. -.........0101........... = 1st species: Bat pony. -.........0110........... = 1st species: Crystal pony. -.............0001....... = 2nd species: Earth pony. -.............0010....... = 2nd species: Unicorn. -.............0011....... = 2nd species: Pegasus. -.............0100....... = 2nd species: Alicorn. -.............0101....... = 2nd species: Bat pony. -.............0110....... = 2nd species: Crystal pony. +................00.............................. + => Doesn't need to eat food. + +................01.............................. + => Can't eat fish or meat. + +................10.............................. + => Can't eat meat. + +................11.............................. + => Can eat everything. + +..................000........................... + => Can't use magic at all. + +..................001........................... + => Magic in some cases. + +..................010........................... + => Magic using a horn. + +..................011........................... + => Magic using wings. + +..................100........................... + => Magic using wings + horn. + +..................101........................... + => Magic using another part. + +.....................000........................ + => Does not have sensitive spots at all. + +.....................001........................ + => May have one or more sensitive spot·s. + +.....................010........................ + => Has affectionately sensitive spots. + +.....................011........................ + => Has sexually sensitive spots. + +.....................100........................ + => Has both types of sensitive spots + +........................00...................... + => No direct shared memory. + +........................01...................... + => Partial direct shared memory. + +........................10...................... + => Full direct shared memory. + +..........................0..................... + => Not part of a median system. + +..........................1..................... + => Part of a median system. + +...........................00................... + => Not a little. + +...........................01................... + => Age regressor. + +...........................10................... + => Little. + +...........................11................... + => Not a little, but younger. + +.............................0.................. + => Not a protector. + +.............................1.................. + => Protector. + +..............................0................. + => Not a fictive. + +..............................1................. + => Fictive. + +...............................0................ + => No "Not talking" attribute. + +...............................1................ + => "Not talking" attribute. + +................................0............... + => Not an host. + +................................1............... + => Host. + +.............................................0.. + => Not a robot + +.............................................1.. + => Robot + +..............................................0. + => Not a plush + +..............................................1. + => Plush + +...............................................0 + => Not affected by age spells + +...............................................1 + => Affected by age spells + +.................................0001........... + => 1st species: Earth pony. + +.................................0010........... + => 1st species: Unicorn. + +.................................0011........... + => 1st species: Pegasus. + +.................................0100........... + => 1st species: Alicorn. + +.................................0101........... + => 1st species: Bat pony. + +.................................0110........... + => 1st species: Crystal pony. + +.....................................0000....... + => 2nd species: <none> + +.....................................0001....... + => 2nd species: Earth pony. + +.....................................0010....... + => 2nd species: Unicorn. + +.....................................0011....... + => 2nd species: Pegasus. + +.....................................0100....... + => 2nd species: Alicorn. + +.....................................0101....... + => 2nd species: Bat pony. + +.....................................0110....... + => 2nd species: Crystal pony. + +.........................................0000... + => 3rd species: <none> + +.........................................0001... + => 3rd species: Earth pony. + +.........................................0010... + => 3rd species: Unicorn. + +.........................................0011... + => 3rd species: Pegasus. + +.........................................0100... + => 3rd species: Alicorn. + +.........................................0101... + => 3rd species: Bat pony. + +.........................................0110... + => 3rd species: Crystal pony. + ``` +<details> +<summary>List of reserved bits</summary> The following bits are reserved for future use or for technical reasons: ``` -11...................... = <Reserved value(1)> -...11................... = <Reserved value(1)> -.........0000........... = <Reserved value(2)> -.........0111........... = <Reserved value(2)> -.........1000........... = <Reserved value(2)> -.........1001........... = <Reserved value(2)> -.........1010........... = <Reserved value(2)> -.........1011........... = <Reserved value(2)> -.........1100........... = <Reserved value(2)> -.........1101........... = <Reserved value(2)> -.........1110........... = <Reserved value(2)> -.........1111........... = <Reserved value(2)> -.............0000....... = <Reserved value(2)> -.............0111....... = <Reserved value(2)> -.............1000....... = <Reserved value(2)> -.............1001....... = <Reserved value(2)> -.............1010....... = <Reserved value(2)> -.............1011....... = <Reserved value(2)> -.............1100....... = <Reserved value(2)> -.............1101....... = <Reserved value(2)> -.............1110....... = <Reserved value(2)> -.............1111....... = <Reserved value(2)> -.................0000... = <Reserved value(3)> -.................0001... = <Reserved value(3)> -.................0010... = <Reserved value(3)> -.................0011... = <Reserved value(3)> -.................0100... = <Reserved value(3)> -.................0101... = <Reserved value(3)> -.................0110... = <Reserved value(3)> -.................0111... = <Reserved value(3)> -.................1000... = <Reserved value(3)> -.................1001... = <Reserved value(3)> -.................1010... = <Reserved value(3)> -.................1011... = <Reserved value(3)> -.................1100... = <Reserved value(3)> -.................1101... = <Reserved value(3)> -.................1110... = <Reserved value(3)> -.................1111... = <Reserved value(3)> -......................00 = <Reserved value(4)> -......................01 = <Reserved value(4)> -......................10 = <Reserved value(4)> -......................11 = <Reserved value(4)> -......................00 = <Reserved value(4)> -......................01 = <Reserved value(4)> -......................10 = <Reserved value(4)> -......................11 = <Reserved value(4)> +.....................110........................ <(1)> +.....................111........................ <(1)> +.....................000........................ <(1)> +.....................001........................ <(1)> +.....................010........................ <(1)> +.....................010........................ <(1)> +.....................011........................ <(1)> +.....................100........................ <(1)> +.....................101........................ <(1)> +.....................111........................ <(1)> +..................110........................... <(2)> +..................111........................... <(2)> +.....................101........................ <(2)> +.....................110........................ <(2)> +.....................111........................ <(2)> +........................11...................... <(2)> +...........................11................... <(2)> +.................................0000........... <(3)> +.................................0111........... <(3)> +.................................1000........... <(3)> +.................................1001........... <(3)> +.................................1010........... <(3)> +.................................1011........... <(3)> +.................................1100........... <(3)> +.................................1101........... <(3)> +.................................1110........... <(3)> +.................................1111........... <(3)> +.....................................0111....... <(3)> +.....................................1000....... <(3)> +.....................................1001....... <(3)> +.....................................1010....... <(3)> +.....................................1011....... <(3)> +.....................................1100....... <(3)> +.....................................1101....... <(3)> +.....................................1110....... <(3)> +.....................................1111....... <(3)> +.........................................0111... <(3)> +.........................................1000... <(3)> +.........................................1001... <(3)> +.........................................1010... <(3)> +.........................................1011... <(3)> +.........................................1100... <(3)> +.........................................1101... <(3)> +.........................................1110... <(3)> +.........................................1111... <(3)> +...............................................0 <(4)> +...............................................1 <(4)> ``` -`(1)` Reserved for additional value state<br> -`(2)` Reserved for additional supported species<br> -`(3)` Reserved for an additional species entry<br> +`(1)` Reserved for extended metadata<br> +`(2)` Reserved for additional value state<br> +`(3)` Reserved for additional supported species<br> `(4)` Reserved for additional metadata -The minimum value of the bitset is 0 and the maximum value 16777215. -For example, for Scoots, the value would be `100010101010000110000000` (9085312)
\ No newline at end of file +</details> + +The minimum value of the bitset is 0 and the maximum value 281474976710655. +For example, for Scoots, the value would be `000000000000000000000000100010101010000110000000` (9085312)
\ No newline at end of file diff --git a/api/cloudburst-banners.php b/api/cloudburst-banners.php index 6e1d654..5cf06f8 100644 --- a/api/cloudburst-banners.php +++ b/api/cloudburst-banners.php @@ -9,6 +9,7 @@ $data = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { if ($member['name'] === "unknown") continue; + if ($member['name'] === "fusion") continue; $data[$member['name']] = getMemberBannerData($member['id'], "ynmuc"); } diff --git a/api/emergency-real.php b/api/emergency-real.php index 20a918f..6a569e8 100644 --- a/api/emergency-real.php +++ b/api/emergency-real.php @@ -4,14 +4,17 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLogg if (!$isLoggedIn) header("Location: /login") and die(); global $_PROFILE; -file_get_contents('https://ntfy.sh/' . json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"], false, stream_context_create([ +$ntfy = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"]; + +file_get_contents('https://' . $ntfy["server"] . '/' . $ntfy["topic"], false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: text/plain\r\n" . "Title: ⚠️🆘 EMERGENCY ⚠️🆘\r\n" . "Priority: urgent\r\n" . - "Tags: emergency", + "Tags: emergency\r\n" . + "Authorization: Basic " . base64_encode($ntfy["user"] . ":" . $ntfy["password"]), 'content' => "This is an emergency, " . $_PROFILE['name'] . " is in need of IMMEDIATE help. Please act now!" ] ])); diff --git a/api/emergency.php b/api/emergency.php index eb2a054..9a0ed7f 100644 --- a/api/emergency.php +++ b/api/emergency.php @@ -4,14 +4,17 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLogg if (!$isLoggedIn) header("Location: /login") and die(); global $_PROFILE; -file_get_contents('https://ntfy.sh/' . json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"], false, stream_context_create([ +$ntfy = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"]; + +file_get_contents('https://' . $ntfy["server"] . '/' . $ntfy["topic"], false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: text/plain\r\n" . "Title: [Test] ⚠️🆘 EMERGENCY ⚠️🆘\r\n" . "Priority: urgent\r\n" . - "Tags: emergency", + "Tags: emergency\r\n" . + "Authorization: Basic " . base64_encode($ntfy["user"] . ":" . $ntfy["password"]), 'content' => "[This notification is test] This is an emergency, " . $_PROFILE['name'] . " is in need of IMMEDIATE help. Please act now! [This notification is test]" ] ])); @@ -6,8 +6,8 @@ global $_PROFILE; header("Content-Type: application/json"); -if ($_PROFILE['name'] === "Cloudburst System") { - die('{"name": "Cloudburst System", "id": "cloudburst", "pluralkit": "ynmuc"}'); -} else { +if ($_PROFILE['login'] === "raindrops") { die('{"name": "Raindrops System", "id": "raindrops", "pluralkit": "gdapd"}'); +} else { + die('{"name": "Cloudburst System", "id": "cloudburst", "pluralkit": "ynmuc"}'); } diff --git a/api/pleasure-real.php b/api/pleasure-real.php new file mode 100644 index 0000000..992f659 --- /dev/null +++ b/api/pleasure-real.php @@ -0,0 +1,23 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; +if (!$isLoggedIn) header("Location: /login") and die(); +global $_PROFILE; + +if ($_PROFILE['login'] === "raindrops") $pony = "Cloudy"; else $pony = "Lavender"; +$ntfy = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"]; + +file_get_contents('https://' . $ntfy["server"] . '/' . $ntfy["topic"], false, stream_context_create([ + 'http' => [ + 'method' => 'POST', + 'header' => + "Content-Type: text/plain\r\n" . + "Title: 🏩 $pony wants to play for a bit\r\n" . + "Priority: high\r\n" . + "Tags: pleasure\r\n" . + "Authorization: Basic " . base64_encode($ntfy["user"] . ":" . $ntfy["password"]), + 'content' => "Hey, $pony wants to play and have fun for a bit, get up!" + ] +])); + +die();
\ No newline at end of file diff --git a/api/pleasure.php b/api/pleasure.php new file mode 100644 index 0000000..702fe2f --- /dev/null +++ b/api/pleasure.php @@ -0,0 +1,23 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; +if (!$isLoggedIn) header("Location: /login") and die(); +global $_PROFILE; + +if ($_PROFILE['login'] === "raindrops") $pony = "Cloudy"; else $pony = "Lavender"; +$ntfy = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true)["ntfy"]; + +file_get_contents('https://' . $ntfy["server"] . '/' . $ntfy["topic"], false, stream_context_create([ + 'http' => [ + 'method' => 'POST', + 'header' => + "Content-Type: text/plain\r\n" . + "Title: [Test] 🏩 $pony wants to play for a bit\r\n" . + "Priority: high\r\n" . + "Tags: pleasure\r\n" . + "Authorization: Basic " . base64_encode($ntfy["user"] . ":" . $ntfy["password"]), + 'content' => "[This notification is test] Hey, $pony wants to play and have fun for a bit, get up! [This notification is test]" + ] +])); + +die();
\ No newline at end of file diff --git a/api/pluralkit-integration.php b/api/pluralkit-integration.php index d3f7e45..b2247ce 100644 --- a/api/pluralkit-integration.php +++ b/api/pluralkit-integration.php @@ -27,9 +27,9 @@ if ($input['system_id'] === "7d9f543e-f742-40f6-9d07-86c3f2983124") { if ($input["type"] === "CREATE_SWITCH" || $input["type"] === "UPDATE_SWITCH" || $input["type"] === "DELETE_SWITCH") { usleep(550000); - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json", file_get_contents("https://api.pluralkit.me/v2/systems/$input[system_id]/fronters")); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$input[system_id]/fronters")); usleep(550000); - file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-switches.json", file_get_contents("https://api.pluralkit.me/v2/systems/$input[system_id]/switches")); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-switches.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$input[system_id]/switches")); file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data.json-res", "affected: " . $input["type"] . " (" . gettype($input["type"]) . ")") and die(); } else { file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data.json-res", "invalid method: " . $input["type"] . " (" . gettype($input["type"]) . ")") and die(); diff --git a/api/raindrops-banners.php b/api/raindrops-banners.php index 700786b..715d7c4 100644 --- a/api/raindrops-banners.php +++ b/api/raindrops-banners.php @@ -9,6 +9,7 @@ $data = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { if ($member['name'] === "unknown") continue; + if ($member['name'] === "fusion") continue; $data[$member['name']] = getMemberBannerData($member['id'], "gdapd"); } @@ -24,30 +24,47 @@ if (in_array($toplevel, ["editor", "icons", "species", "uploads"])) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $toplevel . ".php")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/pages/" . $toplevel . ".php"; + } else { + header("Location: /?error=Page not found: " . strip_tags($pagename)) and die(); } } else if ($toplevel === "api") { if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $toplevel . ".php")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/pages/" . $toplevel . ".php"; } } else if ($toplevel === "cloudburst" || $toplevel === "raindrops") { + $parts = explode("/", $_GET['_']); + + if (isset($parts[1]) && $parts[1] !== "-") { + if ($parts[1] === "unknown") { + if ($parts[0] === "cloudburst") { + header("Location: /unknown-cb"); + } else { + header("Location: /unknown-rd"); + } + } else { + header("Location: /" . $parts[1]); + } + + die(); + } + require_once $_SERVER['DOCUMENT_ROOT'] . "/pages/page.php"; } else { if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/pages/" . $toplevel . ".php")) { header("Location: /-/" . $toplevel); } else { - $namesCloudburst = array_map(function ($i) { + $namesCloudburst = [...array_map(function ($i) { return $i['name']; - }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)); - $namesRaindrops = array_map(function ($i) { + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)), "unknown-cb"]; + $namesRaindrops = [...array_map(function ($i) { return $i['name']; - }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true)); + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true)), "unknown-rd"]; - if (in_array($pagename, $namesCloudburst)) { - header("Location: /cloudburst/" . $pagename) and die(); - } else if (in_array($pagename, $namesRaindrops)) { - header("Location: /raindrops/" . $pagename) and die(); + if ((in_array($toplevel, $namesCloudburst) || in_array($toplevel, $namesRaindrops)) && $toplevel !== "unknown") { + require_once $_SERVER['DOCUMENT_ROOT'] . "/pages/page.php"; } else { - header("Location: /?error=Page not found: " . strip_tags($pagename)) and die(); + global $toplevel; + require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/short.php"; } } } diff --git a/app/banner.js b/app/banner.js index 6daa2b7..8dd42a4 100644 --- a/app/banner.js +++ b/app/banner.js @@ -1,4 +1,5 @@ // noinspection JSUnresolvedVariable +window.bannerFrench = false; function timeAgo(time) { if (!isNaN(parseInt(time))) { @@ -6,6 +7,11 @@ function timeAgo(time) { } let periods = ["second", "minute", "hour", "day", "week", "month", "year", "age"]; + + if (bannerFrench) { + periods = ["seconde", "minute", "heure", "jour", "semaine", "mois", "an", "des année"]; + } + let lengths = ["60", "60", "24", "7", "4.35", "12", "100"]; let now = new Date().getTime(); @@ -14,12 +20,22 @@ function timeAgo(time) { let tense; let period; - if (difference <= 10 && difference >= 0) { - return tense = "now"; - } else if (difference > 0) { - tense = "ago"; + if (bannerFrench) { + if (difference <= 10 && difference >= 0) { + return "à l'instant"; + } else if (difference > 0) { + tense = "il y a"; + } else { + tense = "dans"; + } } else { - tense = "later"; + if (difference <= 10 && difference >= 0) { + return "now"; + } else if (difference > 0) { + tense = "ago"; + } else { + tense = "later"; + } } let j; @@ -31,11 +47,19 @@ function timeAgo(time) { difference = Math.round(difference); period = periods[j] + (difference > 1 ? "s" : ''); - return `${difference} ${period} ${tense}`; + + if (bannerFrench) { + return `${tense} ${difference} ${period}`; + } else { + return `${difference} ${period} ${tense}`; + } } -async function refreshBanner(offline) { +async function refreshBanner(offline, french) { if (!offline) offline = false; + if (!french) french = false; + + window.bannerFrench = french; let data = window.currentMemberData; let index; @@ -84,12 +108,16 @@ async function refreshBanner(offline) { <div id="system-info" style="border:1px solid #${data['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="${offline ? JSON.parse(await localforage.getItem("images")).profile[data['icon']['offline'].split(".")[0].split("-")[1]][data['icon']['offline'].split(".")[0].split("-")[2]] : data['icon']['online']}" alt="" style="background-color:rgba(255, 255, 255, .125);width:128px;height:128px;border-radius:5px;"> + <img id="member-icon" src="${offline ? JSON.parse(await localforage.getItem("images")).profile[data['icon']['offline'].split(".")[0].split("-")[1]][data['icon']['offline'].split(".")[0].split("-")[2]] : (data['icon']['online'] ?? (data['id'] === "fusion" ? '/assets/logo/logo.png' : data['system']['icon']))}" alt="" style="background-color:rgba(255, 255, 255, .125);width:128px;height:128px;border-radius:5px;"> </div> <div style="padding:10px 10px 10px 20px;text-align:center;"> <h3 style="margin-bottom:0;"> - ${data['name']} + ${data['id'] === "unknown" ? ` + <span class="text-muted">Unknown member (${data['system']['name']} System)</span> + ` : data['id'] === "fusion" ? (data['name'] === "fusion" ? ` + <span class="text-muted">Multiple merged members</span> + ` : data['name']) : data['name']} </h3> <div style="margin-bottom:0.5rem;"> @@ -97,65 +125,80 @@ async function refreshBanner(offline) { ${data['badges'].length === 0 ? " " : ""} </div> - <div style="display:grid;grid-template-columns: repeat(${data['median'] ? 4 : 5}, 1fr);" id="member-card"> + <div style="display:grid;grid-template-columns: repeat(${data['median'] || data['id'] === "unknown" ? 4 : data['id'] === "fusion" ? 3 : 5}, 1fr);" id="member-card"> <span> - <b>Prefix${data['prefixes'].length > 1 ? 'es' : ''}: </b> + <b>${french ? `Préfixe${data['prefixes'].length > 1 ? 's' : ''} ` : `Prefix${data['prefixes'].length > 1 ? 'es' : ''}`}: </b> <code style="color: white;">${data['prefixes'].join('</code>, <code style="color: white;">')}</code> </span> <span> - <b>Pronouns: </b> - ${data['pronouns']} + <b>${french ? "Pronoms :" : "Pronouns:"} </b> + ${data['id'] === "fusion" ? "she/her" : data['pronouns']} </span> - ${!data['median'] ? ` + ${!data['median'] && data['id'] !== "unknown" ? ` <span> - <b>Last fronted: </b> + ${data["id"] === "fusion" ? ` + <b>Fronting since : </b> ${data['last_fronted'] ? ` ${data['last_fronted']['now'] ? ` - Right now<br> - (started <span class="relative-time" data-relative-timestamp="${data['last_fronted']['timestamp']}">${data['last_fronted']['relative']}</span>) + <span class="relative-time" data-relative-timestamp="${data['last_fronted']['timestamp']}">${data['last_fronted']['relative']}</span><br> + ` : ` + <span class="text-muted">Not fronting</span><br> + `} + ` : `<span class="text-muted">Not fronting</span><br> `}` : ` + <b>${french ? "Front :" : "Last fronted:"} </b> + ${data['last_fronted'] ? ` + ${data['last_fronted']['now'] ? ` + ${french ? "En ce moment" : "Right now"}<br> + (${french ? "commencé" : "started"} <span class="relative-time" data-relative-timestamp="${data['last_fronted']['timestamp']}">${data['last_fronted']['relative']}</span>) ` : ` <span class="relative-time" data-relative-timestamp="${data['last_fronted']['timestamp']}">${data['last_fronted']['relative']}</span><br> - (for ${data['last_fronted']['duration']['pretty']}) + (${french ? "pendant" : "for"} ${data['last_fronted']['duration']['pretty']}) `} - ` : "A long time ago<br> "} + ` : `${french ? "Il y a très longtemps" : "A long time ago"}<br> `}`} </span> ` : ''} + ${data['id'] !== "fusion" ? ` <span> - <span style="vertical-align: middle;position:relative;top:-5px;"><b>Species: </b></span> + ${data['id'] === "unknown" ? "<b>Species: </b> best to ask" : ` + <span style="vertical-align: middle;position:relative;top:-5px;"><b>${french ? (data['species'].length > 1 ? "Espèces : " : "Espèce : ") : "Species: "}</b></span> ${data['species'].map(species => ` <img data-bs-toggle="tooltip" title="${species['name']}" style="width:32px;vertical-align: middle;position:relative;top:-5px;" src="${offline ? species['icon_offline'] : `/assets/species/${species['icon']}`}" alt="${species['name']}"> - `).join("")} - </span> + `).join("")}`} + </span>` : ''} + ${data['id'] !== "fusion" ? ` <span> - <b>System: </b> + <b>${french ? "Système : " : "System: "}</b> <a class="member-link" href="${data['system']['page']}"><img style="width:24px;border-radius:5px;" src="${offline ? data['system']['icon_offline'] : `/assets/uploads/${data['system']['icon']}`}"> ${data['system']['name']}</a> ${data['system']['subsystem'] ? ` - <br><b>Subsystem: </b><a class="member-link" href="${data['system']['subsystem']['page']}"><img style="width:24px;border-radius:5px;" src="/assets/uploads/${data['system']['subsystem']['icon']}"> ${data['system']['subsystem']['name']}</a> + <br><b>${french ? "Sous-système : " : "Subsystem: "} </b><a class="member-link" href="${data['system']['subsystem']['page']}"><img style="width:24px;border-radius:5px;" src="/assets/uploads/${data['system']['subsystem']['icon']}"> ${data['system']['subsystem']['name']}</a> ` : data['system']['temporary'] ? '<br>(temporary)' : ''} </span> + ` : ''} </div> + ${data['id'] !== "unknown" && data['id'] !== "fusion" ? ` <div style="display:grid;grid-template-columns: repeat(${data["little"] ? "3" : "2"}, 1fr);margin-top:5px;"> <span> - <b>Marefriend${data['relations']['sisters'].length > 1 ? 's' : ''}: </b>${data['relations']['marefriends'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} + <b>${french ? (data['relations']['marefriends'].length > 1 ? 'Partenaires ' : 'Partenaire ') : `Marefriend${data['relations']['marefriends'].length > 1 ? 's' : ''}`}: </b>${data['relations']['marefriends'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} ${data['relations']['marefriends'].map(relation => ` <a class="member-link" href="${relation['link']}"><img src="${offline ? relation['icon_offline'] : `/assets/uploads/${relation['icon']}`}" style="width:24px;"> ${relation['name']}</a>`).join(`<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>`)} ${data['relations']['marefriends'].length === 0 ? '-' : ''} </span> <span> - <b>Sister${data['relations']['sisters'].length > 1 ? 's' : ''}: </b>${data['relations']['sisters'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} + <b>${french ? (data['relations']['sisters'].length > 1 ? 'Sœurs ' : 'Sœur ') : `Sister${data['relations']['sisters'].length > 1 ? 's' : ''}`}: </b>${data['relations']['sisters'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} ${data['relations']['sisters'].map(relation => ` <a class="member-link" href="${relation['link']}"><img src="${offline ? relation['icon_offline'] : `/assets/uploads/${relation['icon']}`}" style="width:24px;"> ${relation['name']}</a>`).join(`<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>`)} ${data['relations']['sisters'].length === 0 ? '-' : ''} </span> ${data['little'] ? ` <span> - <b>Caretaker${data['relations']['sisters'].length > 1 ? 's' : ''}: </b>${data['relations']['caretakers'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} + <b>${french ? (data['relations']['sisters'].length > 1 ? 'Caretakers ' : 'Caretaker ') : `Caretakers${data['relations']['caretakers'].length > 1 ? 's' : ''}`}: </b>${data['relations']['caretakers'].length > 1 ? '<span class="list-separator-mobile"><br></span>' : ''} ${data['relations']['caretakers'].map(relation => ` <a class="member-link" href="${relation['link']}"><img src="${offline ? relation['icon_offline'] : `/assets/uploads/${relation['icon']}`}" style="width:24px;"> ${relation['name']}</a>`).join(`<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>`)} ${data['relations']['caretakers'].length === 0 ? '-' : ''} </span> ` : ''} </div> + ` : '<div style="margin-top:5px;"> </div>'} </div> </div> diff --git a/app/build.js b/app/build.js index f31e572..9d9b8fc 100644 --- a/app/build.js +++ b/app/build.js @@ -2,7 +2,12 @@ const fs = require('fs'); let original = fs.readFileSync("./sw.src.js").toString(); let fileList = [ - "/app/" + "/app/", + "/-/demo", + "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css", + "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js", + "/assets/logo/logo.png", + "/assets/icons/right.svg" ]; function files(dir, sdir) { for (let file of fs.readdirSync(dir)) { @@ -20,7 +25,13 @@ function files(dir, sdir) { files(".", "/app"); console.log(JSON.stringify(fileList, null, 2)); +let fileList1 = fileList; -original = original.replace('[["%CacheData%"]]', JSON.stringify(fileList, null, 4)); +fileList = []; +files("../assets/uploads", "/assets/uploads"); +console.log(JSON.stringify(fileList, null, 2)); +let fileList2 = fileList; + +original = original.replace('[["%CacheData%"]]', JSON.stringify([...fileList1, ...fileList2], null, 4)); fs.writeFileSync("./sw.js", fs.readFileSync("./localforage.js") + "\n\n" + original);
\ No newline at end of file diff --git a/app/demo/index.php b/app/demo/index.php new file mode 100644 index 0000000..154f099 --- /dev/null +++ b/app/demo/index.php @@ -0,0 +1,3 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/pages/demo.php";
\ No newline at end of file diff --git a/app/fronters/dl.js b/app/fronters/dl.js index 61f7e31..7e04a0b 100755 --- a/app/fronters/dl.js +++ b/app/fronters/dl.js @@ -6,7 +6,7 @@ for (let system of ["gdapd", "ynmuc"]) { let data = JSON.parse(fs.readFileSync("data.json").toString()); for (let member of data) { - cp.execSync("convert " + member['avatar_url'] + " ./profiles/" + member['id'] + ".png"); + if (member['avatar_url']) cp.execSync("convert " + member['avatar_url'] + " ./profiles/" + member['id'] + ".png"); } fs.unlinkSync("data.json"); diff --git a/app/fronters/index.html b/app/fronters/index.html index ede5911..7a032c1 100644 --- a/app/fronters/index.html +++ b/app/fronters/index.html @@ -10,7 +10,7 @@ system: "gdapd", name: "raindrops", samples: { - qbzxm: "m. hi i'm here again", + qbzxm: "l. hi i'm here again", zajrk: "t. I kinda want to switch out now hehe, I'm really really tired", rirgf: "Good morning sweetie!", lllfw: "z. Okay she is done, sorry for the wait. We can talk now!", @@ -202,7 +202,7 @@ </ul> <div class="btn-group"> - <a type="button" href="#" id="final-precise-link1" target="_blank" class="btn btn-primary">Open Cuties and Plurality page</a> + <a type="button" href="#" id="final-precise-link1" target="_blank" class="btn btn-primary">Open Cold Haze page</a> <a type="button" href="#" id="final-precise-link2" target="_blank" class="btn btn-primary">View on PluralKit</a> </div> </div> @@ -219,7 +219,7 @@ <div class="btn-group"> <div class="btn-group"> - <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown">Open Cuties and Plurality page</button> + <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown">Open Cold Haze page</button> <div class="dropdown-menu"> <a class="dropdown-item" href="" id="final-blur-m1-link1">Member 1</a> <a class="dropdown-item" href="" id="final-blur-m2-link1">Member 2</a> diff --git a/app/fronters/ponies/qbzxm.png b/app/fronters/ponies/qbzxm.png Binary files differindex 65626ad..36ba1ad 100644 --- a/app/fronters/ponies/qbzxm.png +++ b/app/fronters/ponies/qbzxm.png diff --git a/app/fronters/profiles/erefx.png b/app/fronters/profiles/erefx.png Binary files differindex cdabb97..a65c876 100644 --- a/app/fronters/profiles/erefx.png +++ b/app/fronters/profiles/erefx.png diff --git a/app/fronters/profiles/erknz.png b/app/fronters/profiles/erknz.png Binary files differindex 146538a..856533e 100644 --- a/app/fronters/profiles/erknz.png +++ b/app/fronters/profiles/erknz.png diff --git a/app/fronters/profiles/gevde.png b/app/fronters/profiles/gevde.png Binary files differindex 70dadf4..414a13d 100644 --- a/app/fronters/profiles/gevde.png +++ b/app/fronters/profiles/gevde.png diff --git a/app/fronters/profiles/gfhsr.png b/app/fronters/profiles/gfhsr.png Binary files differindex 3ecc7a2..6ea3317 100644 --- a/app/fronters/profiles/gfhsr.png +++ b/app/fronters/profiles/gfhsr.png diff --git a/app/fronters/profiles/ghuln.png b/app/fronters/profiles/ghuln.png Binary files differindex 1bad991..cfec882 100644 --- a/app/fronters/profiles/ghuln.png +++ b/app/fronters/profiles/ghuln.png diff --git a/app/fronters/profiles/hpwyq.png b/app/fronters/profiles/hpwyq.png Binary files differindex 2e65f91..47be11f 100644 --- a/app/fronters/profiles/hpwyq.png +++ b/app/fronters/profiles/hpwyq.png diff --git a/app/fronters/profiles/jnbae.png b/app/fronters/profiles/jnbae.png Binary files differindex 30e35f5..c2a0f15 100644 --- a/app/fronters/profiles/jnbae.png +++ b/app/fronters/profiles/jnbae.png diff --git a/app/fronters/profiles/khsbb.png b/app/fronters/profiles/khsbb.png Binary files differindex f7eba93..baefbe4 100644 --- a/app/fronters/profiles/khsbb.png +++ b/app/fronters/profiles/khsbb.png diff --git a/app/fronters/profiles/kkhbw.png b/app/fronters/profiles/kkhbw.png Binary files differindex 9206f02..140f080 100644 --- a/app/fronters/profiles/kkhbw.png +++ b/app/fronters/profiles/kkhbw.png diff --git a/app/fronters/profiles/kzfjn.png b/app/fronters/profiles/kzfjn.png Binary files differnew file mode 100644 index 0000000..cc5efbd --- /dev/null +++ b/app/fronters/profiles/kzfjn.png diff --git a/app/fronters/profiles/lllfw.png b/app/fronters/profiles/lllfw.png Binary files differindex 785bdf5..aabc5c1 100644 --- a/app/fronters/profiles/lllfw.png +++ b/app/fronters/profiles/lllfw.png diff --git a/app/fronters/profiles/lzlaq.png b/app/fronters/profiles/lzlaq.png Binary files differnew file mode 100644 index 0000000..c3c02d6 --- /dev/null +++ b/app/fronters/profiles/lzlaq.png diff --git a/app/fronters/profiles/mglyq.png b/app/fronters/profiles/mglyq.png Binary files differindex 1210099..91bce03 100644 --- a/app/fronters/profiles/mglyq.png +++ b/app/fronters/profiles/mglyq.png diff --git a/app/fronters/profiles/mhnqy.png b/app/fronters/profiles/mhnqy.png Binary files differindex 5eb0186..9d69ef8 100644 --- a/app/fronters/profiles/mhnqy.png +++ b/app/fronters/profiles/mhnqy.png diff --git a/app/fronters/profiles/pabmo.png b/app/fronters/profiles/pabmo.png Binary files differindex 5480a79..9ffe1b6 100644 --- a/app/fronters/profiles/pabmo.png +++ b/app/fronters/profiles/pabmo.png diff --git a/app/fronters/profiles/qbzxm.png b/app/fronters/profiles/qbzxm.png Binary files differindex b7957e2..c48dcfa 100644 --- a/app/fronters/profiles/qbzxm.png +++ b/app/fronters/profiles/qbzxm.png diff --git a/app/fronters/profiles/qraku.png b/app/fronters/profiles/qraku.png Binary files differindex cc0970b..37873ca 100644 --- a/app/fronters/profiles/qraku.png +++ b/app/fronters/profiles/qraku.png diff --git a/app/fronters/profiles/rdstg.png b/app/fronters/profiles/rdstg.png Binary files differindex 6809b58..6525f2f 100644 --- a/app/fronters/profiles/rdstg.png +++ b/app/fronters/profiles/rdstg.png diff --git a/app/fronters/profiles/rirgf.png b/app/fronters/profiles/rirgf.png Binary files differindex 628d2b7..2f31b54 100644 --- a/app/fronters/profiles/rirgf.png +++ b/app/fronters/profiles/rirgf.png diff --git a/app/fronters/profiles/rpjok.png b/app/fronters/profiles/rpjok.png Binary files differindex dec775c..87c9092 100644 --- a/app/fronters/profiles/rpjok.png +++ b/app/fronters/profiles/rpjok.png diff --git a/app/fronters/profiles/sehke.png b/app/fronters/profiles/sehke.png Binary files differindex eb08b61..ef80383 100644 --- a/app/fronters/profiles/sehke.png +++ b/app/fronters/profiles/sehke.png diff --git a/app/fronters/profiles/tfbob.png b/app/fronters/profiles/tfbob.png Binary files differindex 830c5d0..eb27d16 100644 --- a/app/fronters/profiles/tfbob.png +++ b/app/fronters/profiles/tfbob.png diff --git a/app/fronters/profiles/tmgiu.png b/app/fronters/profiles/tmgiu.png Binary files differindex 9e97e4d..f81b22d 100644 --- a/app/fronters/profiles/tmgiu.png +++ b/app/fronters/profiles/tmgiu.png diff --git a/app/fronters/profiles/vncoa.png b/app/fronters/profiles/vncoa.png Binary files differindex 540f667..3dd8fc3 100644 --- a/app/fronters/profiles/vncoa.png +++ b/app/fronters/profiles/vncoa.png diff --git a/app/fronters/profiles/vvsxf.png b/app/fronters/profiles/vvsxf.png Binary files differindex 21803e3..f762204 100644 --- a/app/fronters/profiles/vvsxf.png +++ b/app/fronters/profiles/vvsxf.png diff --git a/app/fronters/profiles/xbvwt.png b/app/fronters/profiles/xbvwt.png Binary files differindex 301e82b..763bb2c 100644 --- a/app/fronters/profiles/xbvwt.png +++ b/app/fronters/profiles/xbvwt.png diff --git a/app/fronters/profiles/xcjhj.png b/app/fronters/profiles/xcjhj.png Binary files differindex 91e810e..56eaee9 100644 --- a/app/fronters/profiles/xcjhj.png +++ b/app/fronters/profiles/xcjhj.png diff --git a/app/fronters/profiles/zajrk.png b/app/fronters/profiles/zajrk.png Binary files differindex 0fdf503..aa1c3a9 100644 --- a/app/fronters/profiles/zajrk.png +++ b/app/fronters/profiles/zajrk.png diff --git a/app/fronters/profiles/zdtsg.png b/app/fronters/profiles/zdtsg.png Binary files differindex 026cdaf..7872104 100644 --- a/app/fronters/profiles/zdtsg.png +++ b/app/fronters/profiles/zdtsg.png diff --git a/app/fronters/profiles/zhtzs.png b/app/fronters/profiles/zhtzs.png Binary files differindex 31c52ad..ec6aa1e 100644 --- a/app/fronters/profiles/zhtzs.png +++ b/app/fronters/profiles/zhtzs.png diff --git a/app/fronters/profiles/ztfjz.png b/app/fronters/profiles/ztfjz.png Binary files differindex d650fd0..eb39fdc 100644 --- a/app/fronters/profiles/ztfjz.png +++ b/app/fronters/profiles/ztfjz.png diff --git a/app/fronters/profiles/zzise.png b/app/fronters/profiles/zzise.png Binary files differindex 516a795..8334450 100644 --- a/app/fronters/profiles/zzise.png +++ b/app/fronters/profiles/zzise.png diff --git a/app/fronters/script.js b/app/fronters/script.js index d76b702..b85dbd8 100755 --- a/app/fronters/script.js +++ b/app/fronters/script.js @@ -86,14 +86,14 @@ function loadApp() { document.getElementById("selector-profiles").innerHTML += "<li><a href='#" + slot + "' onclick='localStorage.setItem(`default-slot`, slot);location.reload();'>" + slotData["name"] + "</a></li>"; } - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); document.getElementById("loader").innerHTML = "Starting application..."; let dc; let dcName; // Step 1 - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); dc = document.getElementById("s1-default-card"); dcName = document.getElementById("s1-default-card-name"); @@ -120,7 +120,7 @@ function loadApp() { } // Step 2 - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); dc = document.getElementById("s2-default-card"); dcName = document.getElementById("s2-default-card-name"); @@ -147,7 +147,7 @@ function loadApp() { } // Step 3 - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); dc = document.getElementById("s3-default-card"); dcName = document.getElementById("s3-default-card-img"); @@ -174,7 +174,7 @@ function loadApp() { } // Step 4 - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); dc = document.getElementById("s4-default-card"); dcName = document.getElementById("s4-default-card-img"); @@ -201,7 +201,7 @@ function loadApp() { } // Step 5 - window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); + window.members = JSON.parse(localStorage.getItem("pluralkit-" + configSlot)).filter(i => i.name !== "unknown" && i.name !== "fusion" && i.name !== "smolscoots" && i.name !== "smoltwi").sort(() => Math.random() - 0.5); dc = document.getElementById("s5-default-card"); dcName = document.getElementById("s5-default-card-name"); diff --git a/app/index.html b/app/index.html index 03006d6..decc6b7 100644 --- a/app/index.html +++ b/app/index.html @@ -234,8 +234,11 @@ </head> <body style="background:black;"> <div id="loader" style="position:fixed;z-index:999;background:#111;inset:0;display:flex;align-items:center;justify-content: center;"> - <div id="progress"> - <div id="progress-inner" style="width:0;"></div> + <div> + <div id="progress"> + <div id="progress-inner" style="width:0;"></div> + </div> + <p id="loader-message" style="text-align: center;margin-top:5px;">Loading...</p> </div> </div> @@ -268,9 +271,14 @@ <br><br> </div> + <p style="text-align: center;"> + <br> + <a href="#" onclick='document.body.innerHTML = `<iframe src="/app/demo/index.php" style="position: fixed;inset: 0;height: 100%;width: 100%;">`;'>Demo mode (for Raindrops' therapist)</a> + </p> + <div class="container"> <br> - <div id="member-banner"></div> + </div> </div> @@ -316,7 +324,7 @@ } } - if ('serviceWorker' in navigator) { + if ('serviceWorker' in navigator && location.search !== "?nocache") { console.log("Creating service worker..."); navigator.serviceWorker.register('/app/sw.js').then(function() { return navigator.serviceWorker.ready diff --git a/app/load.js b/app/load.js index 9efff3c..9e4d3b9 100644 --- a/app/load.js +++ b/app/load.js @@ -18,73 +18,119 @@ window.connected = false; let valuesToGet = { "pluralkit-cloudburst-members": { url: "/api/data?f=ynmuc-members.json", - limited: false + limited: false, + name: "Members at Cloudburst...", }, "pluralkit-cloudburst-fronters": { url: "/api/data?f=ynmuc-fronters.json", - limited: false + limited: false, + name: "Fronters at Cloudburst...", }, "pluralkit-cloudburst-switches": { url: "/api/data?f=ynmuc-switches.json", - limited: false + limited: false, + name: "Switches at Cloudburst...", }, "pluralkit-raindrops-members": { url: "/api/data?f=gdapd-members.json", - limited: false + limited: false, + name: "Members at Raindrops...", }, "pluralkit-raindrops-fronters": { url: "/api/data?f=gdapd-fronters.json", - limited: false + limited: false, + name: "Fronters at Raindrops...", }, "pluralkit-raindrops-switches": { url: "/api/data?f=gdapd-switches.json", - limited: false + limited: false, + name: "Switches at Raindrops...", }, "peh-cloudburst-data": { url: "/api/cloudburst-data", - limited: false + limited: false, + name: "Cloudburst data...", }, "peh-raindrops-data": { url: "/api/raindrops-data", - limited: false + limited: false, + name: "Raindrops data...", }, "peh-cloudburst-banners": { url: "/api/cloudburst-banners", - limited: false + limited: false, + name: "Cloudburst banner data...", }, "peh-raindrops-banners": { url: "/api/raindrops-banners", - limited: false + limited: false, + name: "Raindrops banner data...", }, "identity": { url: "/api/me", - limited: false + limited: false, + name: "Identity...", }, "images": { url: "/api/app-images", - limited: false + limited: false, + name: "Images...", + condition: async () => { + let known = await localforage.getItem("images-refresh"); + let currentKnown; + + try { + currentKnown = btoa(Object.keys(JSON.parse(await localforage.getItem("peh-cloudburst-data")).members).join("") + Object.keys(JSON.parse(await localforage.getItem("peh-raindrops-data")).members).join("") + new Date().toDateString()); + } catch (e) { + return true; + } + + localforage.setItem("images-refresh", currentKnown); + + if (known) { + return known !== currentKnown; + } else { + return true; + } + } }, "image-me": { url: "/api/me-picture", - limited: false + limited: false, + name: "Identity avatar...", }, "bits-transactions": { url: "/bits/Application/TransactionsList/index.php", - limited: false + limited: false, + name: "Bits transactions...", }, "bits-goal": { url: "/bits/Application/GetGoal/index.php", - limited: false + limited: false, + name: "Bits goal...", }, "bits-username": { url: "/bits/Authentication/Username/index.php", - limited: false + limited: false, + name: "Bits user info...", } } let keys = Object.keys(valuesToGet); let index = 2; +window.onerror = (event, source, lineno, colno, error) => { + console.log(event, source, lineno, colno, error); + document.getElementById("loader-message").classList.add("text-danger"); + document.getElementById("loader-message").innerText = "An error occurred."; +} + +window.onunhandledrejection = (handler, event) => { + console.log(handler, event); + document.getElementById("loader-message").classList.add("text-danger"); + document.getElementById("loader-message").innerText = "An error occurred."; +} + async function getNewValue() { if (!keys[0]) { await postLoad(); @@ -92,6 +138,9 @@ async function getNewValue() { } try { + if (valuesToGet[keys[0]].condition && !(await valuesToGet[keys[0]].condition())) throw new Error(); + + document.getElementById("loader-message").innerText = valuesToGet[keys[0]].name; await localforage.setItem(keys[0], (await (await fetchPlus(valuesToGet[keys[0]]["url"], { timeout: 3000 })).text())); keys.shift(); @@ -198,21 +247,23 @@ async function postLoad() { document.getElementById("home-app-emergency").classList.add("disabled"); } - if (window.serviceWorkerRegistration.sync) { - window.serviceWorkerRegistration.sync.register('data-sync') - .catch(function(err) { - return err; - }) - .then(() => { - console.log("Scheduled background sync for the next time connection is available"); - }) - } else { - console.log("Background sync not possible on this platform"); + if (window.serviceWorkerRegistration) { + if (window.serviceWorkerRegistration.sync) { + window.serviceWorkerRegistration.sync.register('data-sync') + .catch(function(err) { + return err; + }) + .then(() => { + console.log("Scheduled background sync for the next time connection is available"); + }) + } else { + console.log("Background sync not possible on this platform"); + } } window.currentMemberData = JSON.parse(localStorage.getItem("peh-" + JSON.parse(localStorage.getItem("identity")).id + "-banners"))[JSON.parse(localStorage.getItem("pluralkit-" + JSON.parse(localStorage.getItem("identity")).id + "-fronters")).members[0].name]; - await refreshBanner(true); refreshTooltips(); + //await refreshBanner(true); refreshTooltips(); setInterval(async () => { Array.from(document.getElementsByClassName("relative-time")).forEach((el) => { @@ -11,7 +11,13 @@ let cacheName = 'peh-pluralponies-pwa'; let filesToCache = [ "/app/", + "/-/demo", + "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css", + "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js", + "/assets/logo/logo.png", + "/assets/icons/right.svg", "/app/apps.js", + "/app/banner.js", "/app/bits/assets/black.css", "/app/bits/assets/chart.js", "/app/bits/assets/create.js", @@ -87,7 +93,9 @@ let filesToCache = [ "/app/fronters/profiles/jnbae.png", "/app/fronters/profiles/khsbb.png", "/app/fronters/profiles/kkhbw.png", + "/app/fronters/profiles/kzfjn.png", "/app/fronters/profiles/lllfw.png", + "/app/fronters/profiles/lzlaq.png", "/app/fronters/profiles/mglyq.png", "/app/fronters/profiles/mhnqy.png", "/app/fronters/profiles/nabky.png", @@ -130,7 +138,44 @@ let filesToCache = [ "/app/logo/logo.svg", "/app/logo/maskable.png", "/app/manifest.json", - "/app/sw.js" + "/app/sw.js", + "/app/tooltip.js", + "/app/update.sh", + "/assets/uploads/cloudburst.png", + "/assets/uploads/logo.jpg", + "/assets/uploads/pt-babs.png", + "/assets/uploads/pt-blueberrycloud.png", + "/assets/uploads/pt-cloudy.png", + "/assets/uploads/pt-duskrainbow.png", + "/assets/uploads/pt-fluttershy.png", + "/assets/uploads/pt-frost.png", + "/assets/uploads/pt-fusion.png", + "/assets/uploads/pt-izzymoonbow.png", + "/assets/uploads/pt-lavender.png", + "/assets/uploads/pt-lyra.png", + "/assets/uploads/pt-mintygrape.png", + "/assets/uploads/pt-mistycloud.png", + "/assets/uploads/pt-mossystorm.png", + "/assets/uploads/pt-pipppetals.png", + "/assets/uploads/pt-plushie.png", + "/assets/uploads/pt-poseybloom.png", + "/assets/uploads/pt-scootaloo.png", + "/assets/uploads/pt-skydream.png", + "/assets/uploads/pt-smolscoots.png", + "/assets/uploads/pt-smoltwi.png", + "/assets/uploads/pt-starrynight.png", + "/assets/uploads/pt-stuffie.png", + "/assets/uploads/pt-sunnystarscout.png", + "/assets/uploads/pt-sweetiebelle.png", + "/assets/uploads/pt-sweetiebot.png", + "/assets/uploads/pt-twilight.png", + "/assets/uploads/pt-velvet.png", + "/assets/uploads/pt-violet.png", + "/assets/uploads/pt-windyleaves.png", + "/assets/uploads/pt-zipp.png", + "/assets/uploads/pt.png", + "/assets/uploads/raindrops.png", + "/assets/uploads/ss-sparkles.png" ]; self.addEventListener('install', function(e) { diff --git a/app/update.sh b/app/update.sh new file mode 100755 index 0000000..731e32a --- /dev/null +++ b/app/update.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +cd fronters +node dl.js + +cd .. +node build.js
\ No newline at end of file diff --git a/assets/icons/favicon/about.png b/assets/icons/favicon/about.png Binary files differnew file mode 100644 index 0000000..e17841c --- /dev/null +++ b/assets/icons/favicon/about.png diff --git a/assets/icons/favicon/add.png b/assets/icons/favicon/add.png Binary files differnew file mode 100644 index 0000000..607ad2d --- /dev/null +++ b/assets/icons/favicon/add.png diff --git a/assets/icons/favicon/admin.png b/assets/icons/favicon/admin.png Binary files differnew file mode 100644 index 0000000..7762f56 --- /dev/null +++ b/assets/icons/favicon/admin.png diff --git a/assets/icons/favicon/bitset.png b/assets/icons/favicon/bitset.png Binary files differnew file mode 100644 index 0000000..5999238 --- /dev/null +++ b/assets/icons/favicon/bitset.png diff --git a/assets/icons/favicon/compare.png b/assets/icons/favicon/compare.png Binary files differnew file mode 100644 index 0000000..b41d42d --- /dev/null +++ b/assets/icons/favicon/compare.png diff --git a/assets/icons/favicon/complete.png b/assets/icons/favicon/complete.png Binary files differnew file mode 100644 index 0000000..b548081 --- /dev/null +++ b/assets/icons/favicon/complete.png diff --git a/assets/icons/favicon/delete.png b/assets/icons/favicon/delete.png Binary files differnew file mode 100644 index 0000000..8194dd9 --- /dev/null +++ b/assets/icons/favicon/delete.png diff --git a/assets/icons/favicon/disclaimers.png b/assets/icons/favicon/disclaimers.png Binary files differnew file mode 100644 index 0000000..ab18631 --- /dev/null +++ b/assets/icons/favicon/disclaimers.png diff --git a/assets/icons/favicon/down.png b/assets/icons/favicon/down.png Binary files differnew file mode 100644 index 0000000..305c94a --- /dev/null +++ b/assets/icons/favicon/down.png diff --git a/assets/icons/favicon/emergency.png b/assets/icons/favicon/emergency.png Binary files differnew file mode 100644 index 0000000..255bdd6 --- /dev/null +++ b/assets/icons/favicon/emergency.png diff --git a/assets/icons/favicon/form.png b/assets/icons/favicon/form.png Binary files differnew file mode 100644 index 0000000..d194644 --- /dev/null +++ b/assets/icons/favicon/form.png diff --git a/assets/icons/favicon/fronting.png b/assets/icons/favicon/fronting.png Binary files differnew file mode 100644 index 0000000..b5dd2f1 --- /dev/null +++ b/assets/icons/favicon/fronting.png diff --git a/assets/icons/favicon/global.png b/assets/icons/favicon/global.png Binary files differnew file mode 100644 index 0000000..f3a2b9a --- /dev/null +++ b/assets/icons/favicon/global.png diff --git a/assets/icons/favicon/history.png b/assets/icons/favicon/history.png Binary files differnew file mode 100644 index 0000000..3a6581e --- /dev/null +++ b/assets/icons/favicon/history.png diff --git a/assets/icons/favicon/home.png b/assets/icons/favicon/home.png Binary files differnew file mode 100644 index 0000000..d449bda --- /dev/null +++ b/assets/icons/favicon/home.png diff --git a/assets/icons/favicon/login.png b/assets/icons/favicon/login.png Binary files differnew file mode 100644 index 0000000..6cb2e6e --- /dev/null +++ b/assets/icons/favicon/login.png diff --git a/assets/icons/favicon/logout.png b/assets/icons/favicon/logout.png Binary files differnew file mode 100644 index 0000000..2f4dd99 --- /dev/null +++ b/assets/icons/favicon/logout.png diff --git a/assets/icons/favicon/none.png b/assets/icons/favicon/none.png Binary files differnew file mode 100644 index 0000000..6c7f2d1 --- /dev/null +++ b/assets/icons/favicon/none.png diff --git a/assets/icons/favicon/parser.png b/assets/icons/favicon/parser.png Binary files differnew file mode 100644 index 0000000..1c86e71 --- /dev/null +++ b/assets/icons/favicon/parser.png diff --git a/assets/icons/favicon/partial.png b/assets/icons/favicon/partial.png Binary files differnew file mode 100644 index 0000000..bd95908 --- /dev/null +++ b/assets/icons/favicon/partial.png diff --git a/assets/icons/favicon/prefix.png b/assets/icons/favicon/prefix.png Binary files differnew file mode 100644 index 0000000..4860cf3 --- /dev/null +++ b/assets/icons/favicon/prefix.png diff --git a/assets/icons/favicon/relations.png b/assets/icons/favicon/relations.png Binary files differnew file mode 100644 index 0000000..01b6cde --- /dev/null +++ b/assets/icons/favicon/relations.png diff --git a/assets/icons/favicon/right.png b/assets/icons/favicon/right.png Binary files differnew file mode 100644 index 0000000..fd8c56d --- /dev/null +++ b/assets/icons/favicon/right.png diff --git a/assets/icons/favicon/score.png b/assets/icons/favicon/score.png Binary files differnew file mode 100644 index 0000000..ef82f07 --- /dev/null +++ b/assets/icons/favicon/score.png diff --git a/assets/icons/favicon/shield.png b/assets/icons/favicon/shield.png Binary files differnew file mode 100644 index 0000000..f8b5056 --- /dev/null +++ b/assets/icons/favicon/shield.png diff --git a/assets/icons/favicon/species.png b/assets/icons/favicon/species.png Binary files differnew file mode 100644 index 0000000..f65b1b6 --- /dev/null +++ b/assets/icons/favicon/species.png diff --git a/assets/icons/favicon/splitting.png b/assets/icons/favicon/splitting.png Binary files differnew file mode 100644 index 0000000..4756275 --- /dev/null +++ b/assets/icons/favicon/splitting.png diff --git a/assets/icons/favicon/terminology.png b/assets/icons/favicon/terminology.png Binary files differnew file mode 100644 index 0000000..3545fed --- /dev/null +++ b/assets/icons/favicon/terminology.png diff --git a/assets/icons/favicon/together.png b/assets/icons/favicon/together.png Binary files differnew file mode 100644 index 0000000..7022be0 --- /dev/null +++ b/assets/icons/favicon/together.png diff --git a/assets/icons/favicon/travel.png b/assets/icons/favicon/travel.png Binary files differnew file mode 100644 index 0000000..fad716a --- /dev/null +++ b/assets/icons/favicon/travel.png diff --git a/assets/icons/favicon/travelling.png b/assets/icons/favicon/travelling.png Binary files differnew file mode 100644 index 0000000..4c26122 --- /dev/null +++ b/assets/icons/favicon/travelling.png diff --git a/assets/icons/favicon/tree.png b/assets/icons/favicon/tree.png Binary files differnew file mode 100644 index 0000000..c530f48 --- /dev/null +++ b/assets/icons/favicon/tree.png diff --git a/assets/icons/favicon/up.png b/assets/icons/favicon/up.png Binary files differnew file mode 100644 index 0000000..ce1a47b --- /dev/null +++ b/assets/icons/favicon/up.png diff --git a/assets/icons/favicon/user.png b/assets/icons/favicon/user.png Binary files differnew file mode 100644 index 0000000..c98f156 --- /dev/null +++ b/assets/icons/favicon/user.png diff --git a/assets/icons/favicon/visibility-depends.png b/assets/icons/favicon/visibility-depends.png Binary files differnew file mode 100644 index 0000000..521e991 --- /dev/null +++ b/assets/icons/favicon/visibility-depends.png diff --git a/assets/icons/favicon/visibility-private.png b/assets/icons/favicon/visibility-private.png Binary files differnew file mode 100644 index 0000000..000bc3e --- /dev/null +++ b/assets/icons/favicon/visibility-private.png diff --git a/assets/icons/favicon/visibility-public.png b/assets/icons/favicon/visibility-public.png Binary files differnew file mode 100644 index 0000000..b15ce73 --- /dev/null +++ b/assets/icons/favicon/visibility-public.png diff --git a/assets/icons/form.svg b/assets/icons/form.svg new file mode 100644 index 0000000..b1e150f --- /dev/null +++ b/assets/icons/form.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M10.75 42q-1.15 0-1.95-.8T8 39.25V12.3q0-1.15.8-1.95t1.95-.8h4.15v-4h1.8v4h14.75v-4h1.7v4h4.1q1.15 0 1.95.8t.8 1.95v26.95q0 1.15-.8 1.95t-1.95.8Zm0-1.55h26.5q.45 0 .825-.375.375-.375.375-.825V21H9.55v18.25q0 .45.375.825.375.375.825.375Zm-1.2-21h28.9V12.3q0-.45-.375-.825-.375-.375-.825-.375h-26.5q-.45 0-.825.375-.375.375-.375.825Zm0 0V11.1v8.35Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/icongen.js b/assets/icons/icongen.js new file mode 100644 index 0000000..694b063 --- /dev/null +++ b/assets/icons/icongen.js @@ -0,0 +1,15 @@ +const fs = require('fs'); +const exec = require('child_process').execSync; +const path = require('path'); + +let files = fs.readdirSync(".").filter(i => i.endsWith(".svg")); + +for (let file of files) { + let name = file.substring(0, file.length - path.extname(file).length); + + console.log(name); + exec("convert -density 1200 -resize 1000x1000 -channel RGB -depth 32 -negate -background none " + file + " ./favicon/" + name + "-pre.png"); + exec("convert -composite -compose Dst_Over -gravity center -depth 32 -geometry 1026x1026 ./favicon/" + name + "-pre.png ../logo/logo-template.png -set colorspace RGB ./favicon/" + name + ".png"); + + fs.unlinkSync("./favicon/" + name + "-pre.png"); +}
\ No newline at end of file diff --git a/assets/icons/pleasure.svg b/assets/icons/pleasure.svg new file mode 100644 index 0000000..ff335e4 --- /dev/null +++ b/assets/icons/pleasure.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 24q0-3.8 2.75-6.55t6.55-2.75q3.85 0 6.575 2.75T42.6 24Zm-9.3 9.3q-3.85 0-6.575-2.75T5.4 24H24q0 3.8-2.75 6.55T14.7 33.3ZM24 24q-3.8 0-6.55-2.75T14.7 14.7q0-3.85 2.75-6.575T24 5.4Zm0 18.6V24q3.8 0 6.55 2.75t2.75 6.55q0 3.85-2.75 6.575T24 42.6Z" fill="rgb(25,135,84)"/></svg>
\ No newline at end of file diff --git a/assets/icons/shield.svg b/assets/icons/shield.svg new file mode 100644 index 0000000..3e875bd --- /dev/null +++ b/assets/icons/shield.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 41.9q-6.05-1.8-10.025-7.375Q10 28.95 10 22.05v-10.7l14-5.2 14 5.2v10.7q0 6.9-3.975 12.475Q30.05 40.1 24 41.9Zm0-1.65q5.45-1.7 8.95-6.825 3.5-5.125 3.5-11.375v-9.6L24 7.75l-12.45 4.7v9.6q0 6.25 3.5 11.375T24 40.25Zm0-16.2Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/splitting.svg b/assets/icons/splitting.svg new file mode 100644 index 0000000..b1e150f --- /dev/null +++ b/assets/icons/splitting.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M10.75 42q-1.15 0-1.95-.8T8 39.25V12.3q0-1.15.8-1.95t1.95-.8h4.15v-4h1.8v4h14.75v-4h1.7v4h4.1q1.15 0 1.95.8t.8 1.95v26.95q0 1.15-.8 1.95t-1.95.8Zm0-1.55h26.5q.45 0 .825-.375.375-.375.375-.825V21H9.55v18.25q0 .45.375.825.375.375.825.375Zm-1.2-21h28.9V12.3q0-.45-.375-.825-.375-.375-.825-.375h-26.5q-.45 0-.825.375-.375.375-.375.825Zm0 0V11.1v8.35Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/travelling.svg b/assets/icons/travelling.svg new file mode 100644 index 0000000..f2b1f9d --- /dev/null +++ b/assets/icons/travelling.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="m14.4 33.6 12.35-6.8 6.85-12.4-12.4 6.85ZM24 26q-.85 0-1.425-.575Q22 24.85 22 24q0-.85.575-1.425Q23.15 22 24 22q.85 0 1.425.575Q26 23.15 26 24q0 .85-.575 1.425Q24.85 26 24 26Zm0 16q-3.7 0-6.975-1.425Q13.75 39.15 11.3 36.7 8.85 34.25 7.425 31 6 27.75 6 24t1.425-7.025q1.425-3.275 3.875-5.7 2.45-2.425 5.7-3.85Q20.25 6 24 6t7.025 1.425q3.275 1.425 5.7 3.85 2.425 2.425 3.85 5.7Q42 20.25 42 24q0 3.7-1.425 6.975-1.425 3.275-3.85 5.725-2.425 2.45-5.7 3.875Q27.75 42 24 42Zm0-1.55q6.85 0 11.65-4.8 4.8-4.8 4.8-11.65 0-6.85-4.8-11.65-4.8-4.8-11.65-4.8-6.85 0-11.65 4.8-4.8 4.8-4.8 11.65 0 6.85 4.8 11.65 4.8 4.8 11.65 4.8ZM24 24Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/user.svg b/assets/icons/user.svg new file mode 100644 index 0000000..2540260 --- /dev/null +++ b/assets/icons/user.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 22.75q-2.5 0-4.125-1.65t-1.625-4.15q0-2.5 1.625-4.125T24 11.2q2.5 0 4.125 1.625t1.625 4.125q0 2.5-1.625 4.15Q26.5 22.75 24 22.75Zm-14 14.5v-2.9q0-1.35.75-2.375t2-1.625q2.95-1.3 5.75-1.975T24 27.7q2.7 0 5.5.675t5.7 1.975q1.3.6 2.05 1.625Q38 33 38 34.35v2.9Zm1.55-1.55h24.9v-1.35q0-.75-.5-1.475-.5-.725-1.4-1.175-2.7-1.3-5.275-1.875T24 29.25q-2.7 0-5.3.575-2.6.575-5.25 1.875-.9.45-1.4 1.175-.5.725-.5 1.475ZM24 21.2q1.8 0 3.025-1.2 1.225-1.2 1.225-3t-1.225-3.025Q25.8 12.75 24 12.75q-1.8 0-3.025 1.225Q19.75 15.2 19.75 17q0 1.8 1.225 3T24 21.2Zm0-4.2Zm0 18.7Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/visibility-depends.svg b/assets/icons/visibility-depends.svg new file mode 100644 index 0000000..a94d92b --- /dev/null +++ b/assets/icons/visibility-depends.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 43.15 18.85 38h-8.1q-1.15 0-1.95-.8T8 35.25V8.75q0-1.15.8-1.95t1.95-.8h26.5q1.15 0 1.95.8t.8 1.95v26.5q0 1.15-.8 1.95t-1.95.8h-8.1Zm-13.25-6.7h8.75l4.5 4.5 4.5-4.5h8.75q.5 0 .85-.35t.35-.85V8.75q0-.5-.35-.85t-.85-.35h-26.5q-.5 0-.85.35t-.35.85v26.5q0 .5.35.85t.85.35Zm-1.2-28.9V36.45 7.55Zm14.5 24.4q.5 0 .9-.375t.4-.925q0-.5-.375-.9t-.925-.4q-.55 0-.95.4-.4.4-.4.9 0 .55.4.925t.95.375Zm.6-6.5q0-1.2.5-2.05.5-.85 1.6-2 1.45-1.45 2.05-2.55.6-1.1.6-2.4 0-2.35-1.55-3.725t-3.8-1.375q-2.05 0-3.55 1.05t-2.25 2.55l1.55.7q.65-1.2 1.6-1.95.95-.75 2.6-.75 2 0 2.925 1.075.925 1.075.925 2.475 0 1.05-.55 1.875t-1.55 1.775q-1.7 1.65-2.175 2.8-.475 1.15-.475 2.5Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/visibility-private.svg b/assets/icons/visibility-private.svg new file mode 100644 index 0000000..717077d --- /dev/null +++ b/assets/icons/visibility-private.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M12.75 42q-1.1 0-1.925-.825T10 39.25V20.9q0-1.15.825-1.95t1.925-.8h3.5v-4.4q0-3.25 2.25-5.5T24 6q3.25 0 5.5 2.25t2.25 5.5v4.4h3.5q1.1 0 1.925.8T38 20.9v18.35q0 1.1-.825 1.925T35.25 42Zm0-1.55h22.5q.5 0 .85-.35t.35-.85V20.9q0-.5-.35-.85t-.85-.35h-22.5q-.5 0-.85.35t-.35.85v18.35q0 .5.35.85t.85.35ZM24 33q1.2 0 2.075-.85.875-.85.875-2.05 0-1.15-.875-2.05-.875-.9-2.075-.9-1.2 0-2.075.9-.875.9-.875 2.05 0 1.2.875 2.05Q22.8 33 24 33Zm-6.25-14.85h12.5v-4.4q0-2.6-1.825-4.4Q26.6 7.55 24 7.55q-2.6 0-4.425 1.8-1.825 1.8-1.825 4.4Zm-6.2 22.3V19.7 40.45Z"/></svg>
\ No newline at end of file diff --git a/assets/icons/visibility-public.svg b/assets/icons/visibility-public.svg new file mode 100644 index 0000000..1872822 --- /dev/null +++ b/assets/icons/visibility-public.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M24 42q-3.75 0-7.025-1.425-3.275-1.425-5.7-3.85-2.425-2.425-3.85-5.7Q6 27.75 6 24q0-3.75 1.425-7.025 1.425-3.275 3.85-5.7 2.425-2.425 5.7-3.85Q20.25 6 24 6q3.75 0 7.025 1.425 3.275 1.425 5.7 3.85 2.425 2.425 3.85 5.7Q42 20.25 42 24q0 3.75-1.425 7.025-1.425 3.275-3.85 5.7-2.425 2.425-5.7 3.85Q27.75 42 24 42Zm-2.05-1.65V36.4q-1.75 0-2.925-1.225-1.175-1.225-1.175-2.925v-2.1l-9.9-9.9q-.15.9-.275 1.85-.125.95-.125 1.9 0 6.25 4.075 10.925Q15.7 39.6 21.95 40.35Zm14.2-5.2Q37.2 34 38 32.7q.8-1.3 1.35-2.725t.825-2.925q.275-1.5.275-3.05 0-5.1-2.775-9.325T30.15 8.6v.95q0 1.7-1.175 2.925Q27.8 13.7 26.1 13.7h-4.15v4.15q0 .85-.625 1.425-.625.575-1.475.575h-4.1V24h12.4q.9 0 1.45.6.55.6.55 1.45v6.2h2.05q1.4 0 2.475.8 1.075.8 1.475 2.1Z"/></svg>
\ No newline at end of file diff --git a/assets/logo/github.svg b/assets/logo/github.svg new file mode 100644 index 0000000..bc30d91 --- /dev/null +++ b/assets/logo/github.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve"> +<style type="text/css"> + .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;} +</style> +<path class="st0" d="M512,0C229.1,0,0,229.1,0,512c0,226.6,146.6,417.9,350.1,485.8c25.6,4.5,35.2-10.9,35.2-24.3 + c0-12.2-0.6-52.5-0.6-95.4c-128.6,23.7-161.9-31.4-172.2-60.2c-5.8-14.7-30.7-60.2-52.5-72.3c-17.9-9.6-43.5-33.3-0.6-33.9 + c40.3-0.6,69.1,37.1,78.7,52.5c46.1,77.4,119.7,55.7,149.1,42.2c4.5-33.3,17.9-55.7,32.6-68.5c-113.9-12.8-233-57-233-252.8 + c0-55.7,19.8-101.8,52.5-137.6c-5.1-12.8-23-65.3,5.1-135.7c0,0,42.9-13.4,140.8,52.5c41-11.5,84.5-17.3,128-17.3 + c43.5,0,87,5.8,128,17.3c97.9-66.6,140.8-52.5,140.8-52.5c28.2,70.4,10.2,122.9,5.1,135.7c32.6,35.8,52.5,81.3,52.5,137.6 + c0,196.5-119.7,240-233.6,252.8c18.6,16,34.6,46.7,34.6,94.7c0,68.5-0.6,123.5-0.6,140.8c0,13.4,9.6,29.4,35.2,24.3 + C877.4,929.9,1024,737.9,1024,512C1024,229.1,794.9,0,512,0z"/> +</svg> diff --git a/assets/logo/gitlab.svg b/assets/logo/gitlab.svg new file mode 100644 index 0000000..51e0467 --- /dev/null +++ b/assets/logo/gitlab.svg @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 26.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 155.8 148.7" style="enable-background:new 0 0 155.8 148.7;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#E24329;} + .st1{fill:#FC6D26;} + .st2{fill:#FCA326;} +</style> +<g id="LOGO"> + <path class="st0" d="M153.2,59.4l-0.2-0.6L131.8,3.5c-0.4-1.1-1.2-2-2.2-2.6c-2.6-1.7-6.1-0.9-7.7,1.7c-0.3,0.5-0.5,1-0.7,1.5 + l-14.3,43.8H48.9L34.6,4.1c-0.8-3-3.9-4.7-6.9-3.9c-0.5,0.1-1,0.4-1.5,0.7c-1,0.6-1.8,1.5-2.2,2.6L2.8,58.8l-0.2,0.6 + c-6.3,16.4-0.9,34.9,13.1,45.5l0.1,0.1l0.2,0.1l32.2,24.2l16,12.1l9.7,7.4c2.3,1.8,5.6,1.8,7.9,0l9.7-7.4l16-12.1l32.5-24.3 + l0.1-0.1C154.1,94.3,159.4,75.8,153.2,59.4z"/> + <path class="st1" d="M153.2,59.4l-0.2-0.6c-10.3,2.1-20.1,6.5-28.5,12.8l-46.6,35.2l29.6,22.4l32.5-24.3l0.1-0.1 + C154.1,94.3,159.4,75.7,153.2,59.4z"/> + <path class="st2" d="M48.2,129.2l16,12.1l9.7,7.4c2.3,1.8,5.6,1.8,7.9,0l9.7-7.4l16-12.1l-29.6-22.4L48.2,129.2z"/> + <path class="st1" d="M31.3,71.6c-8.4-6.3-18.2-10.7-28.5-12.8l-0.2,0.6c-6.3,16.4-0.9,34.9,13.1,45.5l0.1,0.1l0.2,0.1l32.3,24.2 + l29.7-22.4L31.3,71.6z"/> +</g> +</svg> diff --git a/assets/logo/logo-template.png b/assets/logo/logo-template.png Binary files differnew file mode 100644 index 0000000..2b0208a --- /dev/null +++ b/assets/logo/logo-template.png diff --git a/assets/species/alicorn-plush.png b/assets/species/alicorn-plush.png Binary files differnew file mode 100644 index 0000000..c64293c --- /dev/null +++ b/assets/species/alicorn-plush.png diff --git a/assets/species/batpony-plush.png b/assets/species/batpony-plush.png Binary files differnew file mode 100644 index 0000000..8fe4391 --- /dev/null +++ b/assets/species/batpony-plush.png diff --git a/assets/species/crystal-plush.png b/assets/species/crystal-plush.png Binary files differnew file mode 100644 index 0000000..5005247 --- /dev/null +++ b/assets/species/crystal-plush.png diff --git a/assets/species/earth-plush.png b/assets/species/earth-plush.png Binary files differnew file mode 100644 index 0000000..c859384 --- /dev/null +++ b/assets/species/earth-plush.png diff --git a/assets/species/pegasus-plush.png b/assets/species/pegasus-plush.png Binary files differnew file mode 100644 index 0000000..eb8c24f --- /dev/null +++ b/assets/species/pegasus-plush.png diff --git a/assets/species/unicorn-plush.png b/assets/species/unicorn-plush.png Binary files differnew file mode 100644 index 0000000..90f7d4f --- /dev/null +++ b/assets/species/unicorn-plush.png diff --git a/assets/uploads/pt-cloudy.png b/assets/uploads/pt-cloudy.png Binary files differnew file mode 100644 index 0000000..d7decb5 --- /dev/null +++ b/assets/uploads/pt-cloudy.png diff --git a/assets/uploads/pt-fusion.png b/assets/uploads/pt-fusion.png Binary files differnew file mode 100644 index 0000000..594fa1f --- /dev/null +++ b/assets/uploads/pt-fusion.png diff --git a/assets/uploads/pt-minty.png b/assets/uploads/pt-minty.png Binary files differdeleted file mode 100644 index d26f800..0000000 --- a/assets/uploads/pt-minty.png +++ /dev/null diff --git a/assets/uploads/raindrops.png b/assets/uploads/raindrops.png Binary files differindex bbb1793..f28a9c6 100644 --- a/assets/uploads/raindrops.png +++ b/assets/uploads/raindrops.png diff --git a/includes/banner.php b/includes/banner.php index 48bba83..6305857 100644 --- a/includes/banner.php +++ b/includes/banner.php @@ -1,5 +1,6 @@ <?php +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/pronouns.php"; $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); @@ -102,16 +103,21 @@ function _header_getSubsystemFromMember(array $member) { return $ss; } -function getMemberBannerData(string $id, string $system) { +function getMemberBannerData(string $id, string $system, bool $french = false) { 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']); + $metadata = file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$id-metadata.json") ? parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$id-metadata.json"), true)) : parseMetadata([ + "bitset" => 4196352, + "regression" => null, + "median" => null, + "marefriends" => [], + "sisters" => [], + "caretakers" => [] + ]); $prefixes = []; foreach ($member['proxy_tags'] as $proxy) { @@ -167,14 +173,24 @@ function getMemberBannerData(string $id, string $system) { 'timestamp' => strtotime($frontingEnd["timestamp"]), 'duration' => [ 'seconds' => $seconds, - 'pretty' => $seconds . " seconds" + 'pretty' => $seconds . ($french ? " secondes" : " seconds") ] ]; - if ($seconds > 60) { - if ($seconds > 3600) { - $lastFronted['duration']['pretty'] = round($seconds / 3600) . " hours"; - } else { - $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes"; + if ($french) { + if ($seconds > 60) { + if ($seconds > 3600) { + $lastFronted['duration']['pretty'] = round($seconds / 3600) . " heures"; + } else { + $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes"; + } + } + } else { + if ($seconds > 60) { + if ($seconds > 3600) { + $lastFronted['duration']['pretty'] = round($seconds / 3600) . " hours"; + } else { + $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes"; + } } } } @@ -183,21 +199,34 @@ function getMemberBannerData(string $id, string $system) { $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"] - }; + if ($french) { + $name = match ($species) { + "earth" => $metadata["robot"] ? "Robot poney terrestre" : (!$metadata["plush"] ? "Poney terrestre" : "Poney terrestre en peluche"), + "alicorn" => $metadata["robot"] ? "Robot alicorne" : (!$metadata["plush"] ? "Alicorne" : "Alicorne en peluche"), + "crystal" => $metadata["robot"] ? "Robot poney de crystal" : (!$metadata["plush"] ? "Poney de crystal" : "Poney de crystal en peluche"), + "pegasus" => $metadata["robot"] ? "Robot pégase" : (!$metadata["plush"] ? "Pégase" : "Pégase en peluche"), + "batpony" => $metadata["robot"] ? "Robot Poney chauve souris" : (!$metadata["plush"] ? "Poney chauve souris" : "Poney chauve souris en peluche"), + "unicorn" => $metadata["robot"] ? "Robot licorne" : (!$metadata["plush"] ? "Licorne" : "Licorne en peluche"), + default => $species . "_" . $metadata["robot"] + }; + } else { + $name = match ($species) { + "earth" => $metadata["robot"] ? "Robot earth pony" : (!$metadata["plush"] ? "Earth pony" : "Earth pony plush"), + "alicorn" => $metadata["robot"] ? "Robot alicorn" : (!$metadata["plush"] ? "Alicorn" : "Alicorn plush"), + "crystal" => $metadata["robot"] ? "Robot crystal pony" : (!$metadata["plush"] ? "Crystal pony" : "Crystal pony plush"), + "pegasus" => $metadata["robot"] ? "Robot pegasus" : (!$metadata["plush"] ? "Pegasus" : "Pegasus plush"), + "batpony" => $metadata["robot"] ? "Robot bat pony" : (!$metadata["plush"] ? "Bat pony" : "Bat pony plush"), + "unicorn" => $metadata["robot"] ? "Robot unicorn" : (!$metadata["plush"] ? "Unicorn" : "Unicorn plush"), + default => $species . "_" . $metadata["robot"] + }; + } $speciesList[] = [ "id" => $species, "name" => $name, "robot" => $metadata["robot"], - "icon" => $species . ($metadata["robot"] ? "-robot" : "") . ".png" + "plush" => $metadata["plush"], + "icon" => $species . ($metadata["robot"] ? "-robot" : ($metadata["plush"] ? "-plush" : "")) . ".png" ]; } @@ -239,7 +268,7 @@ function getMemberBannerData(string $id, string $system) { $marefriends[] = [ "id" => $marefriend, - "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "link" => "/" . ($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"] @@ -258,7 +287,7 @@ function getMemberBannerData(string $id, string $system) { $sisters[] = [ "id" => $marefriend, - "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "link" => "/" . ($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"] @@ -280,7 +309,7 @@ function getMemberBannerData(string $id, string $system) { $caretakers[] = [ "id" => $marefriend, - "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]), + "link" => "/" . ($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"] @@ -295,16 +324,44 @@ function getMemberBannerData(string $id, string $system) { $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Hôte</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' the one who fronts the most often in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill bg-primary">Hôte</span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' the one who fronts the most often in ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' system." class="badge rounded-pill bg-primary">Host</span>' + ) ]; } } + if (($metadata["age_spells"] ?? false) && !$french) { + $badges[] = [ + "id" => "age_spells", + "color" => "primary", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Affected by age spells</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' can feel younger than ' . getMemberPronouns($member['pronouns'])["subjective"] . ' actually ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' when somepony else casts an age spell on ' . getMemberPronouns($member['pronouns'])["object"] . '." class="badge rounded-pill" style="background-color: #6f42c1;">Affected by age spells</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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["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>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["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 ($member["name"] === "fusion") { + $badges[] = [ + "id" => "fusion", + "color" => "d63384", + "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fusion</b><br>She is the result of multiple ponies purposefully merging in a way that makes them impossible to tell apart." class="badge rounded-pill" style="background-color:#d63384;">Fusion</span>' ]; } @@ -312,7 +369,13 @@ function getMemberBannerData(string $id, string $system) { $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>' . (getMemberPronouns($member['pronouns'])["gender"] === "female" ? "Protectrice" : (getMemberPronouns($member['pronouns'])["gender"] === "male" ? "Protecteur" : "Protecteur·ice")) . '</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' a protector in the system and will front when somepony cannot handle it anymore." class="badge rounded-pill bg-black">' . (getMemberPronouns($member['pronouns'])["gender"] === "female" ? "Protectrice" : (getMemberPronouns($member['pronouns'])["gender"] === "male" ? "Protecteur" : "Protecteur·ice")) . '</span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Protector</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["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>' + ) ]; } @@ -320,7 +383,13 @@ function getMemberBannerData(string $id, string $system) { $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Petit' . (getMemberPronouns($member['pronouns'])["gender"] === "female" ? "e" : (getMemberPronouns($member['pronouns'])["gender"] === "male" ? "" : "·e")) . '</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' mentally younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Petit' . (getMemberPronouns($member['pronouns'])["gender"] === "female" ? "e" : (getMemberPronouns($member['pronouns'])["gender"] === "male" ? "" : "·e")) . '</span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Little</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' mentally younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Little</span>' + ) ]; } @@ -328,7 +397,13 @@ function getMemberBannerData(string $id, string $system) { $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Plus jeune</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' younger than the body, but not young enough to be classified as a little." class="badge rounded-pill bg-dark">Plus jeune</span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Younger</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["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>' + ) ]; } @@ -338,13 +413,25 @@ function getMemberBannerData(string $id, string $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Régresseur d\'âge</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' capable of regressing ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, which causes ' . getMemberPronouns($member['pronouns'])["object"] . ' to become ' . (getMiniName($regression["display_name"] ?? $regression["name"])) . ', temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Régresse en âge en <a href="/' . $regression["name"] . '">'. (getMiniName($regression["display_name"] ?? $regression["name"])) . '</a></span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' capable of regressing ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, which causes ' . getMemberPronouns($member['pronouns'])["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="/' . $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Régresseur d\'âge</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' capable of regressing ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Régresseur d\'âge</span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' capable of regressing ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regressor</span>' + ) ]; } } @@ -355,13 +442,25 @@ function getMemberBannerData(string $id, string $system) { $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Régressée en âge</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' has regressed ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, making ' . getMemberPronouns($member['pronouns'])["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">Régressé en âge de <a href="/' . $source["name"] . '">' . (getMiniName($source["display_name"] ?? $source["name"])) . '</a></span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressed</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' has regressed ' . getMemberPronouns($member['pronouns'])["possessive_det"] . ' mental age, making ' . getMemberPronouns($member['pronouns'])["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="/' . $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>' + "html" => ( + $french + ? + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facette</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' is a facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . ', meaning ' . getMemberPronouns($member['pronouns'])["subjective"] . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' not totally independent of ' . getMiniName($source["display_name"] ?? $source["name"]) . '." class="badge rounded-pill bg-light">Facette de <a href="/' . $source["name"] . '">' . getMiniName($source["display_name"] ?? $source["name"]) . '</a></span>' + : + '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facet</b><br>' . ucfirst(getMemberPronouns($member['pronouns'])["subjective"]) . ' is a facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . ', meaning ' . getMemberPronouns($member['pronouns'])["subjective"] . ' ' . (getMemberPronouns($member['pronouns'])["third"] ? "is" : "are") . ' not totally independent of ' . getMiniName($source["display_name"] ?? $source["name"]) . '." class="badge rounded-pill bg-light">Facet of <a href="/' . $source["name"] . '">' . getMiniName($source["display_name"] ?? $source["name"]) . '</a></span>' + ) ]; } } @@ -378,8 +477,8 @@ function getMemberBannerData(string $id, string $system) { '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, + 'pronouns' => getTooltipsFromMark($member["pronouns"], $french) ?? "<span data-bs-toggle='tooltip' title='Pronouns not specified' class='text-muted'>she/her</span>", + 'pronouns_usage' => getMemberPronouns($member['pronouns']), 'last_fronted' => $lastFronted, 'species' => $speciesList, 'system' => $systemData, diff --git a/includes/bitset.php b/includes/bitset.php index 272325a..6483669 100644 --- a/includes/bitset.php +++ b/includes/bitset.php @@ -1,18 +1,24 @@ <?php function parseBitset ($bitset) { - $bin = str_repeat("0", 24 - strlen(decbin($bitset))) . decbin($bitset); + $bin = str_repeat("0", 48 - 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); + $sharedMemory = bindec(substr($bin, 8 + 16, 2)); + $median = substr($bin, 10 + 16, 1) !== "0"; + $little = bindec(substr($bin, 11 + 16, 2)); + $food = bindec(substr($bin, 16, 2)); + $magic = bindec(substr($bin, 2 + 16, 3)); + $sensitivity = bindec(substr($bin, 5 + 16, 3)); + $protector = substr($bin, 13 + 16, 1) !== "0"; + $fictive = substr($bin, 14 + 16, 1) !== "0"; + $notTalking = substr($bin, 15 + 16, 1) !== "0"; + $host = substr($bin, 16 + 16, 1) !== "0"; + $robot = substr($bin, 29 + 16, 1) !== "0"; + $plush = substr($bin, 30 + 16, 1) !== "0"; + $age = substr($bin, 31 + 16, 1) !== "0"; + $species1 = substr($bin, 17 + 16, 4); + $species2 = substr($bin, 21 + 16, 4); + $species3 = substr($bin, 25 + 16, 4); $species1 = match ($species1) { "0001" => "earth", @@ -34,6 +40,16 @@ function parseBitset ($bitset) { default => null, }; + $species3 = match ($species3) { + "0001" => "earth", + "0010" => "unicorn", + "0011" => "pegasus", + "0100" => "alicorn", + "0101" => "batpony", + "0110" => "crystal", + default => null, + }; + return [ 'shared_memory' => $sharedMemory, 'median' => $median, @@ -43,9 +59,15 @@ function parseBitset ($bitset) { 'not_talking' => $notTalking, 'host' => $host, 'robot' => $robot, + 'magic' => $magic, + 'sensitivity' => $sensitivity, + 'food' => $food, + 'plush' => $plush, + 'age_spells' => $age, 'species' => array_filter([ $species1, - $species2 + $species2, + $species3 ], function ($i) { return isset($i); }) diff --git a/includes/data.backup/gdapd-content.html b/includes/data.backup/gdapd-content.html deleted file mode 100644 index 47ab5c6..0000000 --- a/includes/data.backup/gdapd-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index d49deb7..0000000 --- a/includes/data.backup/gdapd-fronters.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 21f6d7f..0000000 --- a/includes/data.backup/gdapd-general.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index d611a44..0000000 --- a/includes/data.backup/gdapd-ghuln-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index cc8f4f6..0000000 --- a/includes/data.backup/gdapd-hpwyq-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index b0cf1a2..0000000 --- a/includes/data.backup/gdapd-khsbb-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index 12eeca0..0000000 --- a/includes/data.backup/gdapd-lllfw-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index bceedfa..0000000 --- a/includes/data.backup/gdapd-members.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 8df6b9c..0000000 --- a/includes/data.backup/gdapd-nabky-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index b625c8a..0000000 --- a/includes/data.backup/gdapd-nabky-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index 6796cec..0000000 --- a/includes/data.backup/gdapd-pabmo-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 71b6b88..0000000 --- a/includes/data.backup/gdapd-pabmo-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index a79adba..0000000 --- a/includes/data.backup/gdapd-planner.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 90e39f1..0000000 --- a/includes/data.backup/gdapd-qbzxm-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 574370e..0000000 --- a/includes/data.backup/gdapd-qbzxm-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index f55873f..0000000 --- a/includes/data.backup/gdapd-qraku-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 5d41c45..0000000 --- a/includes/data.backup/gdapd-rirgf-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 3fa70c5..0000000 --- a/includes/data.backup/gdapd-rirgf-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index d640e4a..0000000 --- a/includes/data.backup/gdapd-subsystems.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "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 deleted file mode 100644 index 6544d1e..0000000 --- a/includes/data.backup/gdapd-switches.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 275ba1d..0000000 --- a/includes/data.backup/gdapd-tfbob-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 0cc12cd..0000000 --- a/includes/data.backup/gdapd-tfbob-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 1f1aa56..0000000 --- a/includes/data.backup/gdapd-zajrk-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 41617f3..0000000 --- a/includes/data.backup/gdapd-ztfjz-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 716096f..0000000 --- a/includes/data.backup/migrate.js +++ /dev/null @@ -1,94 +0,0 @@ -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 deleted file mode 100644 index 7eb983a..0000000 --- a/includes/data.backup/refresh.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 7c84b7f..0000000 --- a/includes/data.backup/ynmuc-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 585463f..0000000 --- a/includes/data.backup/ynmuc-erefx-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index e87109e..0000000 --- a/includes/data.backup/ynmuc-erefx-metadata.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "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 deleted file mode 100644 index e3507ef..0000000 --- a/includes/data.backup/ynmuc-erknz-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 31c8c1e..0000000 --- a/includes/data.backup/ynmuc-fronters.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index a0229be..0000000 --- a/includes/data.backup/ynmuc-general.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 53960e6..0000000 --- a/includes/data.backup/ynmuc-gevde-metadata.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "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 deleted file mode 100644 index 5abc149..0000000 --- a/includes/data.backup/ynmuc-gfhsr-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index a21d651..0000000 --- a/includes/data.backup/ynmuc-gfhsr-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index 2ae4ef9..0000000 --- a/includes/data.backup/ynmuc-jnbae-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 0f6c62a..0000000 --- a/includes/data.backup/ynmuc-kkhbw-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 37a9ec0..0000000 --- a/includes/data.backup/ynmuc-kkhbw-metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "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 deleted file mode 100644 index 999e82c..0000000 --- a/includes/data.backup/ynmuc-members.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 068c227..0000000 --- a/includes/data.backup/ynmuc-mglyq-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 0960683..0000000 --- a/includes/data.backup/ynmuc-mglyq-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 47523b3..0000000 --- a/includes/data.backup/ynmuc-planner.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 9f6b4a4..0000000 --- a/includes/data.backup/ynmuc-sehke-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index dbcf6fc..0000000 --- a/includes/data.backup/ynmuc-subsystem-sparkles.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 0f21fbd..0000000 --- a/includes/data.backup/ynmuc-subsystem-sparkles.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "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 deleted file mode 100644 index 7bfb72e..0000000 --- a/includes/data.backup/ynmuc-subsystems.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "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 deleted file mode 100644 index 4d9db54..0000000 --- a/includes/data.backup/ynmuc-switches.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 467f8ce..0000000 --- a/includes/data.backup/ynmuc-tmgiu-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 9f6b4a4..0000000 --- a/includes/data.backup/ynmuc-vncoa-metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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 deleted file mode 100644 index a8ee483..0000000 --- a/includes/data.backup/ynmuc-vvsxf-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 84a033c..0000000 --- a/includes/data.backup/ynmuc-vvsxf-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index f3188ad..0000000 --- a/includes/data.backup/ynmuc-xbvwt-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index d578181..0000000 --- a/includes/data.backup/ynmuc-xbvwt-metadata.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "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 deleted file mode 100644 index 628dd56..0000000 --- a/includes/data.backup/ynmuc-xcjhj-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index 8f5bce7..0000000 --- a/includes/data.backup/ynmuc-zhtzs-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index d65ab81..0000000 --- a/includes/data.backup/ynmuc-zhtzs-metadata.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "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 deleted file mode 100644 index c10d824..0000000 --- a/includes/data.backup/ynmuc-zzise-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index a508528..0000000 --- a/includes/data.backup/ynmuc-zzise-metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "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 deleted file mode 100644 index 47ab5c6..0000000 --- a/includes/data.backup2/gdapd-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 3284f2e..0000000 --- a/includes/data.backup2/gdapd-fronters.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 21f6d7f..0000000 --- a/includes/data.backup2/gdapd-general.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 42dfe79..0000000 --- a/includes/data.backup2/gdapd-ghuln-metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "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 deleted file mode 100644 index f8106da..0000000 --- a/includes/data.backup2/gdapd-hpwyq-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 4818dec..0000000 --- a/includes/data.backup2/gdapd-khsbb-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index 496547d..0000000 --- a/includes/data.backup2/gdapd-lllfw-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 4c8f076..0000000 --- a/includes/data.backup2/gdapd-members.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index a9f69ae..0000000 --- a/includes/data.backup2/gdapd-mhnqy-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index 8df6b9c..0000000 --- a/includes/data.backup2/gdapd-nabky-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index d10c153..0000000 --- a/includes/data.backup2/gdapd-nabky-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index 6796cec..0000000 --- a/includes/data.backup2/gdapd-pabmo-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 6c142d2..0000000 --- a/includes/data.backup2/gdapd-pabmo-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 18e8fd0..0000000 --- a/includes/data.backup2/gdapd-planner.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 90e39f1..0000000 --- a/includes/data.backup2/gdapd-qbzxm-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 9ef7f71..0000000 --- a/includes/data.backup2/gdapd-qbzxm-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 1dc1e03..0000000 --- a/includes/data.backup2/gdapd-qraku-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 5d41c45..0000000 --- a/includes/data.backup2/gdapd-rirgf-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 1c40723..0000000 --- a/includes/data.backup2/gdapd-rirgf-metadata.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "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 deleted file mode 100644 index d640e4a..0000000 --- a/includes/data.backup2/gdapd-subsystems.json +++ /dev/null @@ -1,9 +0,0 @@ -[ - { - "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 deleted file mode 100644 index 67824c2..0000000 --- a/includes/data.backup2/gdapd-switches.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 275ba1d..0000000 --- a/includes/data.backup2/gdapd-tfbob-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 604d6bd..0000000 --- a/includes/data.backup2/gdapd-tfbob-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index db9a223..0000000 --- a/includes/data.backup2/gdapd-zajrk-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index da9434c..0000000 --- a/includes/data.backup2/gdapd-ztfjz-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 differdeleted file mode 100644 index f060e72..0000000 --- a/includes/data.backup2/images/pf-gdapd-ghuln.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-hpwyq.webp b/includes/data.backup2/images/pf-gdapd-hpwyq.webp Binary files differdeleted file mode 100644 index 690f8a1..0000000 --- a/includes/data.backup2/images/pf-gdapd-hpwyq.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-khsbb.webp b/includes/data.backup2/images/pf-gdapd-khsbb.webp Binary files differdeleted file mode 100644 index 24d22b5..0000000 --- a/includes/data.backup2/images/pf-gdapd-khsbb.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-lllfw.webp b/includes/data.backup2/images/pf-gdapd-lllfw.webp Binary files differdeleted file mode 100644 index 62fac0d..0000000 --- a/includes/data.backup2/images/pf-gdapd-lllfw.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-pabmo.webp b/includes/data.backup2/images/pf-gdapd-pabmo.webp Binary files differdeleted file mode 100644 index d99674a..0000000 --- a/includes/data.backup2/images/pf-gdapd-pabmo.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-qbzxm.webp b/includes/data.backup2/images/pf-gdapd-qbzxm.webp Binary files differdeleted file mode 100644 index 27ad6a7..0000000 --- a/includes/data.backup2/images/pf-gdapd-qbzxm.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-qraku.webp b/includes/data.backup2/images/pf-gdapd-qraku.webp Binary files differdeleted file mode 100644 index 6c37005..0000000 --- a/includes/data.backup2/images/pf-gdapd-qraku.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-rirgf.webp b/includes/data.backup2/images/pf-gdapd-rirgf.webp Binary files differdeleted file mode 100644 index 5fae701..0000000 --- a/includes/data.backup2/images/pf-gdapd-rirgf.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-tfbob.webp b/includes/data.backup2/images/pf-gdapd-tfbob.webp Binary files differdeleted file mode 100644 index 4bcb735..0000000 --- a/includes/data.backup2/images/pf-gdapd-tfbob.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-zajrk.webp b/includes/data.backup2/images/pf-gdapd-zajrk.webp Binary files differdeleted file mode 100644 index 0f6afcd..0000000 --- a/includes/data.backup2/images/pf-gdapd-zajrk.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-zdtsg.webp b/includes/data.backup2/images/pf-gdapd-zdtsg.webp Binary files differdeleted file mode 100644 index 54296f1..0000000 --- a/includes/data.backup2/images/pf-gdapd-zdtsg.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-gdapd-ztfjz.webp b/includes/data.backup2/images/pf-gdapd-ztfjz.webp Binary files differdeleted file mode 100644 index 98a7703..0000000 --- a/includes/data.backup2/images/pf-gdapd-ztfjz.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-erefx.webp b/includes/data.backup2/images/pf-ynmuc-erefx.webp Binary files differdeleted file mode 100644 index c0ea6a8..0000000 --- a/includes/data.backup2/images/pf-ynmuc-erefx.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-erknz.webp b/includes/data.backup2/images/pf-ynmuc-erknz.webp Binary files differdeleted file mode 100644 index 78b6cb2..0000000 --- a/includes/data.backup2/images/pf-ynmuc-erknz.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-gevde.webp b/includes/data.backup2/images/pf-ynmuc-gevde.webp Binary files differdeleted file mode 100644 index eac7023..0000000 --- a/includes/data.backup2/images/pf-ynmuc-gevde.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-gfhsr.webp b/includes/data.backup2/images/pf-ynmuc-gfhsr.webp Binary files differdeleted file mode 100644 index a367f0f..0000000 --- a/includes/data.backup2/images/pf-ynmuc-gfhsr.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-jnbae.webp b/includes/data.backup2/images/pf-ynmuc-jnbae.webp Binary files differdeleted file mode 100644 index 0867587..0000000 --- a/includes/data.backup2/images/pf-ynmuc-jnbae.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-kkhbw.webp b/includes/data.backup2/images/pf-ynmuc-kkhbw.webp Binary files differdeleted file mode 100644 index 2e710f9..0000000 --- a/includes/data.backup2/images/pf-ynmuc-kkhbw.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-mglyq.webp b/includes/data.backup2/images/pf-ynmuc-mglyq.webp Binary files differdeleted file mode 100644 index 4e98d51..0000000 --- a/includes/data.backup2/images/pf-ynmuc-mglyq.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-rdstg.webp b/includes/data.backup2/images/pf-ynmuc-rdstg.webp Binary files differdeleted file mode 100644 index 99164f0..0000000 --- a/includes/data.backup2/images/pf-ynmuc-rdstg.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-rpjok.webp b/includes/data.backup2/images/pf-ynmuc-rpjok.webp Binary files differdeleted file mode 100644 index 04c0911..0000000 --- a/includes/data.backup2/images/pf-ynmuc-rpjok.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-sehke.webp b/includes/data.backup2/images/pf-ynmuc-sehke.webp Binary files differdeleted file mode 100644 index 08bfe26..0000000 --- a/includes/data.backup2/images/pf-ynmuc-sehke.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-tmgiu.webp b/includes/data.backup2/images/pf-ynmuc-tmgiu.webp Binary files differdeleted file mode 100644 index 56dd727..0000000 --- a/includes/data.backup2/images/pf-ynmuc-tmgiu.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-vncoa.webp b/includes/data.backup2/images/pf-ynmuc-vncoa.webp Binary files differdeleted file mode 100644 index c07edb2..0000000 --- a/includes/data.backup2/images/pf-ynmuc-vncoa.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-vvsxf.webp b/includes/data.backup2/images/pf-ynmuc-vvsxf.webp Binary files differdeleted file mode 100644 index 2dd1d06..0000000 --- a/includes/data.backup2/images/pf-ynmuc-vvsxf.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-xbvwt.webp b/includes/data.backup2/images/pf-ynmuc-xbvwt.webp Binary files differdeleted file mode 100644 index e9cec7c..0000000 --- a/includes/data.backup2/images/pf-ynmuc-xbvwt.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-xcjhj.webp b/includes/data.backup2/images/pf-ynmuc-xcjhj.webp Binary files differdeleted file mode 100644 index 4d7a9c5..0000000 --- a/includes/data.backup2/images/pf-ynmuc-xcjhj.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-zhtzs.webp b/includes/data.backup2/images/pf-ynmuc-zhtzs.webp Binary files differdeleted file mode 100644 index da9dcb7..0000000 --- a/includes/data.backup2/images/pf-ynmuc-zhtzs.webp +++ /dev/null diff --git a/includes/data.backup2/images/pf-ynmuc-zzise.webp b/includes/data.backup2/images/pf-ynmuc-zzise.webp Binary files differdeleted file mode 100644 index 72bb342..0000000 --- a/includes/data.backup2/images/pf-ynmuc-zzise.webp +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-ghuln.png b/includes/data.backup2/images/pt-gdapd-ghuln.png Binary files differdeleted file mode 100644 index e0601bd..0000000 --- a/includes/data.backup2/images/pt-gdapd-ghuln.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-hpwyq.png b/includes/data.backup2/images/pt-gdapd-hpwyq.png Binary files differdeleted file mode 100644 index 348eabd..0000000 --- a/includes/data.backup2/images/pt-gdapd-hpwyq.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-khsbb.png b/includes/data.backup2/images/pt-gdapd-khsbb.png Binary files differdeleted file mode 100644 index 09032f3..0000000 --- a/includes/data.backup2/images/pt-gdapd-khsbb.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-lllfw.png b/includes/data.backup2/images/pt-gdapd-lllfw.png Binary files differdeleted file mode 100644 index 2cda43e..0000000 --- a/includes/data.backup2/images/pt-gdapd-lllfw.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-pabmo.png b/includes/data.backup2/images/pt-gdapd-pabmo.png Binary files differdeleted file mode 100644 index 5a3243e..0000000 --- a/includes/data.backup2/images/pt-gdapd-pabmo.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-qbzxm.png b/includes/data.backup2/images/pt-gdapd-qbzxm.png Binary files differdeleted file mode 100644 index 8589a82..0000000 --- a/includes/data.backup2/images/pt-gdapd-qbzxm.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-qraku.png b/includes/data.backup2/images/pt-gdapd-qraku.png Binary files differdeleted file mode 100644 index b022f28..0000000 --- a/includes/data.backup2/images/pt-gdapd-qraku.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-rirgf.png b/includes/data.backup2/images/pt-gdapd-rirgf.png Binary files differdeleted file mode 100644 index 26071d3..0000000 --- a/includes/data.backup2/images/pt-gdapd-rirgf.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-tfbob.png b/includes/data.backup2/images/pt-gdapd-tfbob.png Binary files differdeleted file mode 100644 index 69beeec..0000000 --- a/includes/data.backup2/images/pt-gdapd-tfbob.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-zajrk.png b/includes/data.backup2/images/pt-gdapd-zajrk.png Binary files differdeleted file mode 100644 index 87fa846..0000000 --- a/includes/data.backup2/images/pt-gdapd-zajrk.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-zdtsg.png b/includes/data.backup2/images/pt-gdapd-zdtsg.png Binary files differdeleted file mode 100644 index 4523069..0000000 --- a/includes/data.backup2/images/pt-gdapd-zdtsg.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-gdapd-ztfjz.png b/includes/data.backup2/images/pt-gdapd-ztfjz.png Binary files differdeleted file mode 100644 index e547b71..0000000 --- a/includes/data.backup2/images/pt-gdapd-ztfjz.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-erefx.png b/includes/data.backup2/images/pt-ynmuc-erefx.png Binary files differdeleted file mode 100644 index b0125a0..0000000 --- a/includes/data.backup2/images/pt-ynmuc-erefx.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-erknz.png b/includes/data.backup2/images/pt-ynmuc-erknz.png Binary files differdeleted file mode 100644 index 1f358d8..0000000 --- a/includes/data.backup2/images/pt-ynmuc-erknz.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-gevde.png b/includes/data.backup2/images/pt-ynmuc-gevde.png Binary files differdeleted file mode 100644 index ca030b2..0000000 --- a/includes/data.backup2/images/pt-ynmuc-gevde.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-gfhsr.png b/includes/data.backup2/images/pt-ynmuc-gfhsr.png Binary files differdeleted file mode 100644 index fd483af..0000000 --- a/includes/data.backup2/images/pt-ynmuc-gfhsr.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-jnbae.png b/includes/data.backup2/images/pt-ynmuc-jnbae.png Binary files differdeleted file mode 100644 index 184837e..0000000 --- a/includes/data.backup2/images/pt-ynmuc-jnbae.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-kkhbw.png b/includes/data.backup2/images/pt-ynmuc-kkhbw.png Binary files differdeleted file mode 100644 index e1d5dbd..0000000 --- a/includes/data.backup2/images/pt-ynmuc-kkhbw.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-mglyq.png b/includes/data.backup2/images/pt-ynmuc-mglyq.png Binary files differdeleted file mode 100644 index 8c234aa..0000000 --- a/includes/data.backup2/images/pt-ynmuc-mglyq.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-rdstg.png b/includes/data.backup2/images/pt-ynmuc-rdstg.png Binary files differdeleted file mode 100644 index 4523069..0000000 --- a/includes/data.backup2/images/pt-ynmuc-rdstg.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-rpjok.png b/includes/data.backup2/images/pt-ynmuc-rpjok.png Binary files differdeleted file mode 100644 index 4523069..0000000 --- a/includes/data.backup2/images/pt-ynmuc-rpjok.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-sehke.png b/includes/data.backup2/images/pt-ynmuc-sehke.png Binary files differdeleted file mode 100644 index 18b4ac8..0000000 --- a/includes/data.backup2/images/pt-ynmuc-sehke.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-tmgiu.png b/includes/data.backup2/images/pt-ynmuc-tmgiu.png Binary files differdeleted file mode 100644 index 7989e21..0000000 --- a/includes/data.backup2/images/pt-ynmuc-tmgiu.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-vncoa.png b/includes/data.backup2/images/pt-ynmuc-vncoa.png Binary files differdeleted file mode 100644 index 938a248..0000000 --- a/includes/data.backup2/images/pt-ynmuc-vncoa.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-vvsxf.png b/includes/data.backup2/images/pt-ynmuc-vvsxf.png Binary files differdeleted file mode 100644 index 0d416f7..0000000 --- a/includes/data.backup2/images/pt-ynmuc-vvsxf.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-xbvwt.png b/includes/data.backup2/images/pt-ynmuc-xbvwt.png Binary files differdeleted file mode 100644 index 23f4d7b..0000000 --- a/includes/data.backup2/images/pt-ynmuc-xbvwt.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-xcjhj.png b/includes/data.backup2/images/pt-ynmuc-xcjhj.png Binary files differdeleted file mode 100644 index 07a15fe..0000000 --- a/includes/data.backup2/images/pt-ynmuc-xcjhj.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-zhtzs.png b/includes/data.backup2/images/pt-ynmuc-zhtzs.png Binary files differdeleted file mode 100644 index 475ae03..0000000 --- a/includes/data.backup2/images/pt-ynmuc-zhtzs.png +++ /dev/null diff --git a/includes/data.backup2/images/pt-ynmuc-zzise.png b/includes/data.backup2/images/pt-ynmuc-zzise.png Binary files differdeleted file mode 100644 index 2b0046b..0000000 --- a/includes/data.backup2/images/pt-ynmuc-zzise.png +++ /dev/null diff --git a/includes/data.backup2/migrate.js b/includes/data.backup2/migrate.js deleted file mode 100755 index 716096f..0000000 --- a/includes/data.backup2/migrate.js +++ /dev/null @@ -1,94 +0,0 @@ -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 deleted file mode 100644 index ce87852..0000000 --- a/includes/data.backup2/refresh.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 7c84b7f..0000000 --- a/includes/data.backup2/ynmuc-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 585463f..0000000 --- a/includes/data.backup2/ynmuc-erefx-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 030a51b..0000000 --- a/includes/data.backup2/ynmuc-erefx-metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "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 deleted file mode 100644 index 3604147..0000000 --- a/includes/data.backup2/ynmuc-erknz-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index fd82c19..0000000 --- a/includes/data.backup2/ynmuc-fronters.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index a0229be..0000000 --- a/includes/data.backup2/ynmuc-general.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 8396901..0000000 --- a/includes/data.backup2/ynmuc-gevde-metadata.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "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 deleted file mode 100644 index 5abc149..0000000 --- a/includes/data.backup2/ynmuc-gfhsr-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 35fe7c9..0000000 --- a/includes/data.backup2/ynmuc-gfhsr-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index 76a6e91..0000000 --- a/includes/data.backup2/ynmuc-jnbae-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 0f6c62a..0000000 --- a/includes/data.backup2/ynmuc-kkhbw-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 5d52499..0000000 --- a/includes/data.backup2/ynmuc-kkhbw-metadata.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index 126854e..0000000 --- a/includes/data.backup2/ynmuc-members.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 068c227..0000000 --- a/includes/data.backup2/ynmuc-mglyq-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 43cb2bf..0000000 --- a/includes/data.backup2/ynmuc-mglyq-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index a57f899..0000000 --- a/includes/data.backup2/ynmuc-planner.json +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index e6c9fb4..0000000 --- a/includes/data.backup2/ynmuc-rpjok-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index 666313a..0000000 --- a/includes/data.backup2/ynmuc-sehke-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index dbcf6fc..0000000 --- a/includes/data.backup2/ynmuc-subsystem-sparkles.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 0f21fbd..0000000 --- a/includes/data.backup2/ynmuc-subsystem-sparkles.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "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 deleted file mode 100644 index 7bfb72e..0000000 --- a/includes/data.backup2/ynmuc-subsystems.json +++ /dev/null @@ -1,18 +0,0 @@ -[ - { - "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 deleted file mode 100644 index 483f554..0000000 --- a/includes/data.backup2/ynmuc-switches.json +++ /dev/null @@ -1 +0,0 @@ -[{"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 deleted file mode 100644 index 5b9fd19..0000000 --- a/includes/data.backup2/ynmuc-tmgiu-metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "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 deleted file mode 100644 index 666313a..0000000 --- a/includes/data.backup2/ynmuc-vncoa-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index a8ee483..0000000 --- a/includes/data.backup2/ynmuc-vvsxf-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 866ec06..0000000 --- a/includes/data.backup2/ynmuc-vvsxf-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index f3188ad..0000000 --- a/includes/data.backup2/ynmuc-xbvwt-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 0255291..0000000 --- a/includes/data.backup2/ynmuc-xbvwt-metadata.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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 deleted file mode 100644 index 5ace650..0000000 --- a/includes/data.backup2/ynmuc-xcjhj-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index cc33585..0000000 --- a/includes/data.backup2/ynmuc-xxxxx-metadata.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "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 deleted file mode 100644 index 8f5bce7..0000000 --- a/includes/data.backup2/ynmuc-zhtzs-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index 1cbac39..0000000 --- a/includes/data.backup2/ynmuc-zhtzs-metadata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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 deleted file mode 100644 index c10d824..0000000 --- a/includes/data.backup2/ynmuc-zzise-content.html +++ /dev/null @@ -1 +0,0 @@ -<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 deleted file mode 100644 index ef183a2..0000000 --- a/includes/data.backup2/ynmuc-zzise-metadata.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "bitset": 8660992, - "regression": null, - "marefriends": [ - "gdapd/tfbob", - "gdapd/lllfw" - ], - "sisters": [], - "caretakers": [] -}
\ No newline at end of file diff --git a/includes/emergency.php b/includes/emergency.php index 454890d..a86e090 100644 --- a/includes/emergency.php +++ b/includes/emergency.php @@ -57,9 +57,6 @@ <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> diff --git a/includes/functions.php b/includes/functions.php new file mode 100644 index 0000000..51317ca --- /dev/null +++ b/includes/functions.php @@ -0,0 +1,202 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/bitset.php"; + +if (!function_exists("getMiniName")) { + function getMiniName(string $name) { + $parts = explode(" ", $name); + + 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("showMembersFromList")) { + function showMembersFromList(array $list) { + foreach ($list as $member) { if ($member['name'] !== "unknown" && $member['name'] !== "fusion") { + echo('<!-- ' . ($member['display_name'] ?? $member['name']) . ' --> +<a href="/' . $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['travelling'] ? "+" . ($member['proxy_tags'][0]['prefix'] ?? " ") : ($member['proxy_tags'][0]['prefix'] ?? " ")) . '</code></div> +</div></div></a>'); + }} + } +} + +if (!function_exists("showSubsystem")) { + function showSubsystem(array $data, string $parentSystem) { + $subsystemData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$parentSystem-subsystem-$data[source].json"), true); + + echo('<!-- ' . $subsystemData["name"] . ' --> +<div id="hpd-cloudburst" style="background:rgba(255, 255, 255, .1);border-radius:10px;padding:10px;display:grid;grid-template-columns: 1fr;margin-bottom:10px;">'); + echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);grid-gap:10px;">'); + + showMembersFromList(scoreOrder(array_map(function ($i) use ($parentSystem) { + return getSystemMember($parentSystem, $i); + }, $data["members"]), $parentSystem)); + + echo('</div> + +</div>'); + } +} + +if (!function_exists("showSystem")) { + function showSystem(string $id, string $name, string $color, bool $hideTitle) { + global $travelling; + + $global = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$id-general.json"), true); + + 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;">'); + } else { + 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: #' . $global['color'] . '55;width: 148px;text-decoration:none;color:white;filter:none !important;" href="/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '" class="hpd-system"> +<div style="text-align:center;"><img src="/assets/uploads/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '.png" style="width:64px;"><br>' . $name . '</div> +</a>'); + + if ($hideTitle) { + echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);grid-gap:10px;">'); + } else { + echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);padding-left:10px;grid-gap:10px;">'); + } + + 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)); + + echo('</div> + +</div>'); + } +} + +if (!function_exists("cloudburst")) { + function cloudburst(bool $hideTitle): void { + showSystem("ynmuc", "Cloudburst System", "#5f08a9a6", $hideTitle); + } +} + +if (!function_exists("raindrops")) { + function raindrops(bool $hideTitle): void { + showSystem("gdapd", "Raindrops System", "#a95f08a6", $hideTitle); + } +} + +if (!function_exists("getMember")) { + function getMember(string $id) { + global $systemID; + + $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); + + $period = $periods[$j] . ($difference >1 ? "s" :''); + return "{$difference} {$period} {$tense}"; + } +} + +if (!function_exists("getMemberSystem")) { + function getMemberSystem(string $id) { + $list = scoreOrderGlobal(); + + foreach ($list as $item) { + if ($item["id"] === $id) return $item["_system"]; + } + } +} + +if (!function_exists("getMemberFromName")) { + function getMemberFromName(string $name) { + $list = [...json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), ...json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)]; + + foreach ($list as $item) { + if ($item["name"] === $name) return $item; + } + } +} + +if (!function_exists("resolveMember")) { + function resolveMember(mixed $name) { + if (is_string($name)) { + if (str_ends_with($name, "-travelling")) { + return substr($name, 0, strlen($name) - 11); + } else { + return $name; + } + } else { + return $name; + } + } +}
\ No newline at end of file diff --git a/includes/header.php b/includes/header.php index 59c64b7..8ce8389 100644 --- a/includes/header.php +++ b/includes/header.php @@ -1,138 +1,34 @@ <?php global $title; -function error($errno, $errstr, $file, $line) { ?> +function error($errno, $errstr, $file, $line) { + echo(' <!-- -->"> <div class="alert alert-danger" style="text-align: left;"> - <b>Error <?= $errno ?>:</b> <?= $errstr ?> [<?= $file ?>:<?= $line ?>] - </div> -<?php } + <b>Error ' . $errno . ':</b> ' . $errstr . ' [' . $file . ':' . $line . '] + </div>'); +} if (isset($_GET['errors'])) { - set_error_handler("error"); + ini_set('display_errors', '1'); + ini_set('display_startup_errors', '1'); + error_reporting(E_ALL); + set_error_handler("error", E_ALL); } +global $_MemberName; +global $_MemberPage; +global $_SystemName; +global $_SystemPage; +global $toplevel; + 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/session.php"; global $isLoggedIn; global $isUserLoggedIn; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/banner.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/rainbow.php"; - -function getMiniName(string $name) { - $parts = explode(" ", $name); - - 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; - } -} - -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; -} - -function getBrightness(string $hexCode) { - if (str_starts_with("#", $hexCode)) { - $hexCode = substr($hexCode, 1); - } - - $red = hexdec(substr($hexCode, 0, 2)); - $green = hexdec(substr($hexCode, 2, 2)); - $blue = hexdec(substr($hexCode, 4, 2)); - $brightness = $red + $green + $blue; - - return $brightness > 382; -} - -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: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['travelling'] ? "+" . ($member['proxy_tags'][0]['prefix'] ?? " ") : ($member['proxy_tags'][0]['prefix'] ?? " ")) . '</code></div> -</div></div></a>'); - }} -} - -function showSubsystem(array $data, string $parentSystem) { - $subsystemData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$parentSystem-subsystem-$data[source].json"), true); - - echo('<!-- ' . $subsystemData["name"] . ' --> -<div id="hpd-cloudburst" style="background:rgba(255, 255, 255, .1);border-radius:10px;padding:10px;display:grid;grid-template-columns: 1fr;margin-bottom:10px;">'); - echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);grid-gap:10px;">'); - - showMembersFromList(scoreOrder(array_map(function ($i) use ($parentSystem) { - return getSystemMember($parentSystem, $i); - }, $data["members"]), $parentSystem), $parentSystem); - - echo('</div> - -</div>'); -} - -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;">'); - } else { - 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"> -<div style="text-align:center;"><img src="/assets/uploads/' . ($id === "gdapd" ? "raindrops" : "cloudburst") . '.png" style="width:64px;"><br>' . $name . '</div> -</a>'); - - if ($hideTitle) { - echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);grid-gap:10px;">'); - } else { - echo(' <div style="display:grid;grid-template-columns:repeat(6, 1fr);padding-left:10px;grid-gap:10px;">'); - } - - 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> - -</div>'); -} - -function cloudburst(bool $hideTitle): void { - showSystem("ynmuc", "Cloudburst System", "#5f08a9a6", $hideTitle); -} - -function raindrops(bool $hideTitle): void { - showSystem("gdapd", "Raindrops System", "#a95f08a6", $hideTitle); -} +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/functions.php"; ?> <!doctype html> @@ -142,8 +38,28 @@ function raindrops(bool $hideTitle): void { <meta name="viewport" content="width=device-width, initial-scale=1"> <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/logo/logo.png" type="image/png"> + <title><?= $title ? $title . " · " : "" ?>Cold Haze</title> + <?php if (isset($_MemberName) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $_MemberName . ".png")): ?> + <link rel="shortcut icon" href="/assets/uploads/pt-<?= $_MemberName ?>.png" type="image/png"> + <?php else: ?> + <?php if (isset($_MemberPage) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/icons/favicon/" . $_MemberPage . ".png")): ?> + <link rel="shortcut icon" href="/assets/icons/favicon/<?= $_MemberPage ?>.png" type="image/png"> + <?php else: ?> + <?php if (isset($toplevel) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/icons/favicon/" . $toplevel . ".png")): ?> + <link rel="shortcut icon" href="/assets/icons/favicon/<?= $toplevel ?>.png" type="image/png"> + <?php else: ?> + <?php if (isset($_SystemPage) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/icons/favicon/" . $_SystemPage . ".png")): ?> + <link rel="shortcut icon" href="/assets/icons/favicon/<?= $_SystemPage ?>.png" type="image/png"> + <?php else: ?> + <?php if (isset($_SystemName) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/" . $_SystemName . ".png") && (!isset($_MemberName) || $_MemberName !== "fusion")): ?> + <link rel="shortcut icon" href="/assets/uploads/<?= $_SystemName ?>.png" type="image/png"> + <?php else: ?> + <link rel="shortcut icon" href="/assets/logo/logo.png" type="image/png"> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> + <?php endif; ?> <style> nav.navbar { background-color: black !important; @@ -364,7 +280,7 @@ function raindrops(bool $hideTitle): void { .comparison { display: grid; - grid-template-columns: 3fr repeat(2, 2fr) repeat(5, 1fr); + grid-template-columns: 3fr 1.5fr 2fr repeat(4, 1fr); } .comparison-header { @@ -594,7 +510,7 @@ function raindrops(bool $hideTitle): void { display: none !important; } .comparison { - grid-template-columns: repeat(3, 2fr) repeat(5, 1fr) !important; + grid-template-columns: repeat(3, 2fr) repeat(4, 1fr) !important; } .comparison-relations-count { display: inline; @@ -663,17 +579,76 @@ function raindrops(bool $hideTitle): void { .rainbow-item:active { opacity: .5; } + + peh-muted { + --bs-text-opacity: 1; + color: #6c757d!important; + } + + .dropdown-toggle::after { + margin-bottom: -3px; + } + + .navbar-nav { + width: 100%; + } + + .card { + background-color: #111; + border: 1px solid rgba(255, 255, 255, .125); + } + + #member-banner-container > #member-banner > #system-info { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + + #member-details { + background: rgba(255, 255, 255, .1); + border: 1px solid transparent; + border-top: none; + padding: 10px 20px; + border-bottom-left-radius: 10px; + border-bottom-right-radius: 10px; + display: grid; + grid-template-columns: repeat(4, 1fr); + text-align: center; + } + + .navbar-collapse.show { + z-index: 999; + } + + @media (max-width: 991px) { + div#member-details.member-details-loggedIn { + grid-template-columns: repeat(2, 1fr) !important; + text-align: center; + } + + #member-details { + grid-template-columns: 1fr !important; + text-align: left; + } + } + + @media (max-width: 767px) { + div#member-details.member-details-loggedIn { + grid-template-columns: 1fr !important; + text-align: left; + } + } </style> </head> <body> - <nav class="navbar navbar-expand-<?= $isLoggedIn ? 'lg' : 'md' ?> bg-dark navbar-dark" style="height:60px;"> + <nav class="navbar navbar-expand-<?= $isLoggedIn ? 'xl' : 'lg' ?> bg-dark navbar-dark" style="height:60px;"> <div class="container-fluid"> - <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> + <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;">Cold Haze</span><a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="collapsibleNavbar"> <ul class="navbar-nav"> + <?php if (!isset($demoHeader) || !$demoHeader): ?> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown"> <img src="/assets/icons/global.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> @@ -700,27 +675,12 @@ function raindrops(bool $hideTitle): void { <li><h5 class="dropdown-header">Tools</h5></li> <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> + <span style="vertical-align: middle;">Message parser</span> </a></li> <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> + <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> - <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): ?> @@ -732,14 +692,29 @@ function raindrops(bool $hideTitle): void { <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> + <span class="text-danger" style="vertical-align: middle;"><b>Emergency alert</b></span> </a></li> + <?php + + $frontCloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-fronters.json"), true)["members"]; + $frontRaindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-fronters.json"), true)["members"]; + + if (isset($_GET['pleasure']) || ( + ((int)date('H') >= 20 || (int)date('H') < 6) && + $frontCloudburst[0]["id"] === "erknz" && + $frontRaindrops[0]["id"] === "qbzxm" + )): ?> + <li><a class="dropdown-item" href="/-/pleasure" <?= isset($_GET['pleasure']) ? 'style="opacity: .5;"' : '' ?>> + <img src="/assets/icons/pleasure.svg" alt="" style="width:24px;vertical-align: middle;"> + <span class="text-success" style="vertical-align: middle;"><b>Pleasure alert</b></span> + </a></li> + <?php endif; ?> <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> + <span style="vertical-align: middle;">Front planner</span> </a></li> <li><a class="dropdown-item" href="/-/together"> <img src="/assets/icons/together.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> @@ -747,18 +722,22 @@ function raindrops(bool $hideTitle): void { </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> + <span style="vertical-align: middle;">System travels manager</span> </a></li> <li><hr class="dropdown-divider"></li> <li><h5 class="dropdown-header">Utilities</h5></li> + <li><a class="dropdown-item" href="/-/splitting"> + <img src="/assets/icons/form.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Members by splitting date</span> + </a></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> + <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> + <span style="vertical-align: middle;">Score system testing</span> </a></li> <li><hr class="dropdown-divider"></li> @@ -768,6 +747,13 @@ function raindrops(bool $hideTitle): void { </a></li> </ul> </li> + <?php endif; else: ?> + <li class="nav-item"> + <a class="nav-link" href="/" role="button"> + <img src="/assets/icons/right.svg" class="dropdown-icon" alt="" style="width:24px;vertical-align: middle;"> + <span style="vertical-align: middle;">Reste du site (en anglais)</span> + </a> + </li> <?php endif; ?> <?php if (!isset($emergencyHeader) || !$emergencyHeader): ?> <li class="nav-item dropdown"> @@ -789,7 +775,7 @@ function raindrops(bool $hideTitle): void { if (count($subsystemsNotMember) > 0): ?> <li><hr class="dropdown-divider"></li> - <li><h5 class="dropdown-header">Subsystems (<?= count($subsystemsNotMember) ?>)</h5></li> + <li><h5 class="dropdown-header">Subsystems</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;"> @@ -798,10 +784,10 @@ function raindrops(bool $hideTitle): void { <?php endforeach; ?> <?php endif; ?> <li><hr class="dropdown-divider"></li> - <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><h5 class="dropdown-header">Members</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" && $member['name'] !== "fusion"): ?> <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;"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;"><?= $member['display_name'] ?? $member['name'] ?></span> </a></li> <?php endif; endforeach; ?> @@ -818,15 +804,46 @@ 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(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><h5 class="dropdown-header">Members</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" && $member['name'] !== "fusion"): ?> <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;"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" alt="" style="width:24px;vertical-align: middle;"> <span style="vertical-align: middle;"><?= $member['display_name'] ?? $member['name'] ?></span> </a></li> <?php endif; endforeach; ?> </ul> </li> + <?php if ($isLoggedIn): ?> + <li class="nav-item" style="margin-left: auto;"> + <a class="nav-link" href="/-/user"> + <?php global $_PROFILE; ?> + <span style="vertical-align: middle;"> + <?= $_PROFILE["name"] ?> + </span> + <img alt="" src="/assets/icons/shield.svg" style="filter:invert(1);width:24px;vertical-align: middle;"> + </a> + </li> + <?php elseif ($isUserLoggedIn): ?> + <li class="nav-item" style="margin-left: auto;"> + <a class="nav-link" href="/-/user"> + <?php global $_PROFILE; ?> + <span style="vertical-align: middle;"> + <?= $_PROFILE["name"] ?> + </span> + <img alt="" src="/assets/icons/shield.svg" style="filter:invert(1);width:24px;vertical-align: middle;"> + </a> + </li> + <?php else: ?> + <li class="nav-item" style="margin-left: auto;"> + <a class="nav-link" href="/-/login"> + <?php global $_PROFILE; ?> + <span style="vertical-align: middle;"> + Not logged in + </span> + <img alt="" src="/assets/icons/login.svg" style="filter:invert(1);width:24px;vertical-align: middle;"> + </a> + </li> + <?php endif; ?> <?php endif; ?> </ul> </div> diff --git a/includes/member.php b/includes/member.php index a2573d1..d027fa7 100644 --- a/includes/member.php +++ b/includes/member.php @@ -1,4 +1,12 @@ -<?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'; +<?php global $system; global $systemCommonName; global $systemID; global $member; global $memberData; global $memberCommonName; global $memberID; + +if ($memberData["name"] === "fusion") { + $title = ($memberCommonName === "fusion" ? "Multiple merged members" : $memberCommonName); +} else { + $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); @@ -31,20 +39,94 @@ function timeAgo($time): string { return "{$difference} {$period} {$tense}"; } -$metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true)); +if ($memberData["name"] !== "unknown" && $memberData["name"] !== "fusion") { + $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true)); +} + +global $isLoggedIn; + +$frontersRaindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-fronters.json"), true); +$frontersCloudburst = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-fronters.json"), true); + +$fusionRaindrops = false; + +if ($memberData["name"] === "fusion") { + if (in_array("fusion", array_map(function ($i) { + return $i["name"]; + }, $frontersRaindrops["members"]))) { + $fusionRaindrops = true; + + $memberData = array_values(array_filter($frontersRaindrops["members"], function ($i) { + return $i["name"] === "fusion"; + }))[0]; + $memberCommonName = $memberData['display_name'] ?? $memberData['name']; + $memberID = $memberData['id']; + $system = $systemID === "gdapd" ? "cloudburst" : "raindrops"; + $systemID = $system === "cloudburst" ? "ynmuc" : "gdapd"; + } +} ?> <br> <div class="container"> <script> - window.currentMemberData = JSON.parse(atob(`<?= base64_encode(json_encode(getMemberBannerData($memberID, $systemID))) ?>`)); + window.currentMemberData = JSON.parse(atob(`<?= base64_encode(json_encode(getMemberBannerData($memberID, $systemID, false))) ?>`)); </script> + <?php if ($memberData["name"] !== "unknown" && $memberData["name"] !== "fusion"): ?> + <div id="member-banner-container"> + <div id="member-banner"></div> + <div id="member-details" class="<?= $isLoggedIn ? 'member-details-loggedIn' : '' ?>" style="<?php if (!$isLoggedIn): ?>grid-template-columns: repeat(3, 1fr);<?php endif; ?> border-color: <?= isset($memberData["color"]) ? '#' . $memberData["color"] : "transparent" ?>"> + <div> + <b>Food:</b> + <?= match ($metadata["food"]) { + 0 => "<span data-bs-toggle='tooltip' title='" . ucfirst(str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"])) . " species indicates that " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["subjective"]) . ' ' . (getMemberPronouns($memberData["pronouns"])["third"] ? "doesn't" : "don't") . " need to eat food, therefore " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["subjective"]) . " can eat all foods.'>Doesn't need</span>", + 1 => "<span data-bs-toggle='tooltip' title='" . ucfirst(str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["subjective"])) . " can't eat fish or meat.'>Can't eat animals</span>", + 2 => "<span data-bs-toggle='tooltip' title='" . ucfirst(str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["subjective"])) . " can't eat meat, but can eat fish.'>Can't eat meat</span>", + 3 => "<span data-bs-toggle='tooltip' title='" . ucfirst(str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["subjective"])) . " can eat all foods, meat and fish included.'>No restrictions</span>", + } ?> + </div> + <div> + <b>Memory access:</b> + <?= match ($metadata["shared_memory"]) { + 0 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " doesn't directly share" : " don't directly share") . " memory with " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " headmates, but is able to (slowly) query it if that is needed.'>No direct access</span>", + 1 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " doesn't directly shares" : " don't directly share") . " all memories with " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " headmates, but may be able to share certain memories and/or share memories at will.'>Partial direct access</span>", + 2 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " shares" : " share") . " all memories with " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " headmates.'>Full direct access</span>", + } ?> + </div> + <div> + <b>Magic:</b> + <?= match ($metadata["magic"]) { + 0 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " is unable to use magic at all.'>Can't use magic</span>", + 1 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " can use magic in rare cases, such as when somepony else is pouring magic into " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["object"]) . " or when a physical event occurs.'>Can use magic in some cases</span>", + 2 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " can cast spells using " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " horn.'>Can use a horn</span>", + 3 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " can cast spells using " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " wings.'>Can use wings</span>", + 4 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " can cast spells using both " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " horn and wings.'>Can use a horn and wings</span>", + 5 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " can cast spells using another part of " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body that is neither a horn or wings.'>Can cast spells</span>", + } ?> + </div> + <?php if ($isLoggedIn): ?> + <div> + <b>Sensitivity:</b> + <?= match ($metadata["sensitivity"]) { + 0 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " does" : " do") . " not have sensitive spots on " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body.'>Not sensitive</span>", + 1 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . " may have (a) sensitive spot·s on " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body.'>May be sensitive</span>", + 2 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " has" : " have") . " (a) sensitive spot·s on " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body, and playing with it/them will make " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["object"]) . " feel affectionate: extremely safe and cared for.'>Affectionately sensitive</span>", + 3 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " has" : " have") . " (a) sensitive spot·s on " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body, and playing with it/them will make " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["object"]) . " feel sexually pleasured.'>Sexually sensitive</span>", + 4 => "<span data-bs-toggle='tooltip' title='" . str_replace("'", "'", ucfirst(getMemberPronouns($memberData['pronouns'])["subjective"])) . (getMemberPronouns($memberData["pronouns"])["third"] ? " has" : " have") . " (a) sensitive spot·s on " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["possessive_det"]) . " body, and playing with it/them will make " . str_replace("'", "'", getMemberPronouns($memberData['pronouns'])["object"]) . " feel affectionate or sexually pleasured.'>Affectionate and sexual</span>", + } ?> + </div> + <?php endif; ?> + </div> + </div> + <?php else: ?> <div id="member-banner"></div> - <script src="/app/banner.js"></script><script>refreshBanner()</script> + <?php endif; ?> + + <script src="/app/banner.js"></script><script>refreshBanner(false)</script> <br> - <?php global $isLoggedIn; if ($isLoggedIn): ?> + <?php global $isLoggedIn; if ($isLoggedIn && $memberData["name"] !== "unknown" && $memberData["name"] !== "fusion"): ?> <?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>) @@ -55,6 +137,13 @@ $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT' <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>Files:</b> + <ul> + <li><code><?= $_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-metadata.json" ?></code> (<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-metadata.json") ? filesize($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-metadata.json") . " bytes" : "not found" ?>)</li> + <li><code><?= $_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html" ?></code> (<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") ? filesize($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$memberID-content.html") . " bytes" : "not found" ?>)</li> + </ul> + </li> + <li><b>Date added:</b> <?= date('l j F Y', strtotime($memberData["created"])) ?> (<?= timeAgo($memberData["created"]) ?>, <code><?= $memberData["created"] ?></code>)</li> <li><b>Pronouns:</b> <?= implode(", ", getPronounsFromMark($memberData['pronouns'])) ?></li> <li><b>Pronouns usage:</b> <ul><?php @@ -65,8 +154,8 @@ $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT' } ?></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>Color:</b> <span style="border:1px solid rgba(255, 255, 255, .5);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"])): ?> <code><?= str_repeat("0", 48 - strlen(decbin($metadata["bitset"]))) . decbin($metadata["bitset"]) ?></code> (0x<?= str_repeat("0", 12 - strlen(dechex($metadata["bitset"]))) . dechex($metadata["bitset"]) ?>, <?= $metadata["bitset"] ?>)</li><?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> @@ -75,37 +164,68 @@ $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT' <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $score = calculateScore($metadata, $memberData["display_name"] ?? $memberData["name"]); ?> <li> <b>Score breakdown:</b> <code><?= $score["total"] ?></code> - <details> - <summary>Show details</summary> - <ul> - <li><b>Host score:</b> <code><?= $score["host"] ?></code></li> - <li><b>Relationships score:</b> <code><?= $score["relations"] ?></code></li> - <li><b>Fictive score:</b> <code><?= $score["fictive"] ?></code></li> - <li><b>Median score:</b> <code><?= $score["median"] ?></code></li> - <li><b>Species score:</b> <code><?= $score["species"] ?></code></li> - <li><b>Little score:</b> <code><?= $score["little"] ?></code></li> - <li><b>Not talking score:</b> <code><?= $score["not_talking"] ?></code></li> - <li><b>Protector score:</b> <code><?= $score["protector"] ?></code></li> - <li><b>Name score:</b> <code><?= $score["name"] ?></code></li> - <li><b>Shared memory score:</b> <code><?= $score["shared_memory"] ?></code></li> - </ul> - </details> + <ul> + <li><b>Host score:</b> <code><?= $score["host"] ?></code></li> + <li><b>Relationships score:</b> <code><?= $score["relations"] ?></code></li> + <li><b>Fictive score:</b> <code><?= $score["fictive"] ?></code></li> + <li><b>Median score:</b> <code><?= $score["median"] ?></code></li> + <li><b>Species score:</b> <code><?= $score["species"] ?></code></li> + <li><b>Little score:</b> <code><?= $score["little"] ?></code></li> + <li><b>Not talking score:</b> <code><?= $score["not_talking"] ?></code></li> + <li><b>Protector score:</b> <code><?= $score["protector"] ?></code></li> + <li><b>Name score:</b> <code><?= $score["name"] ?></code></li> + <li><b>Shared memory score:</b> <code><?= $score["shared_memory"] ?></code></li> + </ul> </li> + <li><b>Full metadata:</b> <ul><?php + + foreach ($metadata as $type => $usage) { + if (is_string($usage)) { + echo("<li><b>" . $type . ":</b> " . $usage . "</li>"); + } else { + echo("<li><b>" . $type . ":</b> " . json_encode($usage, JSON_UNESCAPED_SLASHES) . "</li>"); + } + } + + ?></ul></li> </ul> </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 ?>. + <?= getMiniName($memberData["display_name"] ?? $memberData["name"]) ?> is visiting the <?= $systemID === "ynmuc" ? "Raindrops System" : "Cloudburst System" ?> since <?= timeAgo($travelling[$memberID]["history"][count($travelling[$memberID]["history"]) - 1]["start"]) ?>, therefore <?= getMemberPronouns($memberData["pronouns"])["subjective"] ?> <?= getMemberPronouns($memberData["pronouns"])["third"] ? "is" : "are" ?> 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> + <?php if ($memberData["name"] === "unknown"): ?> + <div class="alert alert-secondary"> + <p>Hello there!</p> + <p>I'm currently not totally sure who I am (it's a thing that can happen with plurality), but I am using <?= $systemID === "ynmuc" ? "Twilight Sparkle" : "Scootaloo" ?> as a temporary identity to stay calm and not panic while I figure out what is going on and who I am.</p> + <p>I can either be an existing headmate who cannot work out they are fronting (this can sometimes happen when one of us gets pushed out of front), multiple headmates blurring who cannot work out who we are, or a new pony trying to figure out their identity (this can sometimes take a while).</p> + <span>In all cases, feel free to ask!</span> + </div> + <?php elseif ($memberData["name"] === "fusion"): ?> + <div class="alert alert-secondary"> + <p>Hello there!</p> + <p>I'm the result of more than one pony temporarily merging together to the point they are unable to be told apart (this can be done for various reasons). We have not registered this switch for the "Unknown" member since this merge is made on purpose.</p> + <p>Below is the list of who is merged, we can be either from a single system or from different systems.</p> + <div class="list-group"> + <?php $foundFusion = false; $fusionOn = false; foreach ($fusionRaindrops ? $frontersRaindrops['members'] : $frontersCloudburst['members'] as $fronter): if ($fronter["name"] !== "fusion"): if ($fusionOn): $foundFusion = true; $name = str_ends_with($fronter['name'], "-travelling") ? substr($fronter['name'], 0, strlen($fronter['name']) - 11) : $fronter['name'] ?> + <a class="list-group-item list-group-item-action text-black" href="/<?= $name ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $name . ".png") ? "-" . $name : "" ?>.png" style="filter:invert(1) hue-rotate(180deg);width:24px;"> <?= $fronter["display_name"] ?? $name ?></a> + <?php endif; else: $fusionOn = true; endif; endforeach; ?> + </div> + <?php if (!$foundFusion): ?> + <i>No members are currently merged.</i> + <?php endif; ?> + </div> + <?php else: ?> + <?php global $isLoggedIn; if ($isLoggedIn): ?> + <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>" ?> <?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> </div> diff --git a/includes/member/hierarchy.php b/includes/member/hierarchy.php new file mode 100644 index 0000000..39045b3 --- /dev/null +++ b/includes/member/hierarchy.php @@ -0,0 +1,207 @@ +<?php global $system; +global $systemCommonName; +global $systemID; +global $member; +global $memberData; +global $memberCommonName; +global $memberID; +$title = "Member hierarchy · " . $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); + } + + $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); + + $period = $periods[$j] . ($difference > 1 ? "s" : ''); + return "{$difference} {$period} {$tense}"; +} + +$metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-" . $memberID . "-metadata.json"), true)); + +$allMembers = scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-members.json"), true), $systemID); +$allMembers2 = scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true), $systemID === "gdapd" ? "ynmuc" : "gdapd"); + +$systemCommonData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-general.json"), true); + +if ($travelling[$memberID]["travelling"]) { + $allMembers = scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true), $systemID === "gdapd" ? "ynmuc" : "gdapd"); + $allMembers2 = scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . $systemID . "-members.json"), true), $systemID); + + $systemCommonData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-general.json"), true); + + $system = $systemID === "gdapd" ? "cloudburst" : "raindrops"; + $systemCommonName = $systemID === "gdapd" ? "Cloudburst System" : "Raindrops System"; +} + +?> + + <br> + <div class="container"> + <h2><?= getMiniName($memberCommonName) ?>'s hierarchy</h2> + <br> + + <?php + + $takingCare = [ + ...array_filter($allMembers, function ($i) use ($systemID, $memberData) { + return in_array($systemID . "/" . $memberData["id"], $i["_metadata"]["caretakers"]) && $i["id"] !== $memberData["id"]; + }), + ...array_filter($allMembers2, function ($i) use ($systemID, $memberData) { + return in_array($systemID . "/" . $memberData["id"], $i["_metadata"]["caretakers"]) && $i["id"] !== $memberData["id"]; + }) + ]; + + $protected = array_filter($allMembers, function ($i) use ($memberData) { + return $i["_metadata"]["protector"] && $i["id"] !== $memberData["id"]; + }); + + $caretakers = array_map(function ($i) { + return getSystemMember(explode("/", $i)[0], explode("/", $i)[1]); + }, $metadata["caretakers"]); + + ?> + + <p class="text-muted" style="text-align: center;"><b>Part of:</b></p> + <div class="row"> + <div class="cell" style="width:20%;display:inline-block;margin-left:auto;margin-right:auto;"> + <a href="/<?= $system ?>" style="text-decoration:none !important;filter:none !important;"> + <div class="hpd-item-card" + style="background-color:rgba(255, 255, 255, .1);border:1px solid #<?= $systemCommonData["color"] ?? "ffffff" ?>55;outline-color:#<?= $systemCommonData["color"] ?? "ffffff" ?>55;border-radius:10px;text-align:center;display:flex;align-items:center;justify-content:center;padding:5px;"> + <div> + <img alt="" + src="/assets/uploads/<?= $system ?>.png" + style="height:48px;display:block;margin-left:auto;margin-right:auto;"> + <div style="text-decoration:none;color:white;margin-top:5px;"><?= $systemCommonName ?></div> + </div> + </div> + </a> + </div> + </div> + + <hr> + + <?php if (count($protected) > 0): ?> + <p class="text-muted" style="text-align: center;"><b>Protected by:</b></p> + <div class="row"> + <?php foreach ($protected as $selectedMember): ?> + <div class="cell" style="width:20%;display:inline-block;margin-left:auto;margin-right:auto;"> + <?php showMembersFromList([$selectedMember]) ?> + </div> + <?php endforeach; ?> + </div> + + <hr> + <?php endif; ?> + + <?php if (count($caretakers) > 0): ?> + <p class="text-muted" style="text-align: center;"><b>Taken care of by:</b></p> + <div class="row"> + <?php foreach ($caretakers as $selectedMember): ?> + <div class="cell" style="width:20%;display:inline-block;margin-left:auto;margin-right:auto;"> + <?php showMembersFromList([$selectedMember]) ?> + </div> + <?php endforeach; ?> + </div> + + <hr> + <?php endif; ?> + + <p class="text-muted" style="text-align: center;"><b>Member:</b></p> + <div class="row"> + <div class="cell" style="width:20%;display:inline-block;margin-left:auto;margin-right:auto;"> + <?php showMembersFromList([$memberData]) ?> + </div> + </div> + + <?php if (count($takingCare) > 0): ?> + <hr> + + <p class="text-muted" style="text-align: center;"><b>Taking care of:</b></p> + <div class="row"> + <?php foreach ($takingCare as $selectedMember): ?> + <div class="cell" style="width:20%;display:inline-block;margin-left:auto;margin-right:auto;"> + <?php showMembersFromList([$selectedMember]) ?> + </div> + <?php endforeach; ?> + </div> + <?php endif; ?> + </div> + + <style> + .row { + margin-bottom: 20px; + } + + @media (max-width: 750px) { + #hpd-cloudburst > div, #hpd-raindrops > div { + grid-template-columns: repeat(1, 1fr) !important; + } + + .hpd-item-card img { + display: inline-block !important; + margin-right: 5px !important; + height: 32px !important; + } + + #hpd-cloudburst > div, #hpd-raindrops > div { + grid-gap: 5px !important; + } + + .hpd-item-card div { + display: inline-block !important; + } + + .hpd-item-card div:nth-child(3)::before { + content: "("; + padding-left: 5px; + color: white !important; + } + + .hpd-item-card div:nth-child(3)::after { + content: ")"; + color: white !important; + } + + div.cell { + grid-row-gap: 5px !important; + width: 100% !important; + margin-bottom: 5px; + } + + div.cell:nth-last-child(1) { + margin-bottom: 0 !important; + } + } + + @media (max-width: 997px) { + .cell { + width: 30% !important; + } + } + </style> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?>
\ No newline at end of file diff --git a/includes/member/tree.php b/includes/member/tree.php new file mode 100644 index 0000000..2e94951 --- /dev/null +++ b/includes/member/tree.php @@ -0,0 +1,8 @@ +<?php + +global $parts; +$parts[3] = "hierarchy"; +array_shift($parts); + +header("Location: /" . implode("/", $parts)); +die();
\ No newline at end of file diff --git a/includes/planner.php b/includes/planner.php index 0b7604a..72575cd 100644 --- a/includes/planner.php +++ b/includes/planner.php @@ -36,7 +36,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -54,7 +54,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -107,7 +107,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -125,7 +125,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -178,7 +178,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -196,7 +196,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -249,7 +249,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -267,7 +267,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -320,7 +320,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -338,7 +338,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -391,7 +391,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -409,7 +409,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -462,7 +462,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -480,7 +480,7 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include </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> + <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-" . resolveMember($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"> @@ -817,13 +817,13 @@ $raindrops = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/include <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> + <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-" . resolveMember($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> + <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-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> <?php endforeach; ?> </div> </div> diff --git a/includes/pleasure.php b/includes/pleasure.php new file mode 100644 index 0000000..1bbfcea --- /dev/null +++ b/includes/pleasure.php @@ -0,0 +1,114 @@ +<h2>Pleasure 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 onclick="disableAlert()" 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">Somepony will be awoken.</h4> + <button type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <button onclick="enableAlert();" data-bs-dismiss="modal" class="btn btn-success" style="font-size:20px;font-weight:bold;display:block;width:100%;">I wish to proceed.</button> + + <hr> + + <div class="alert alert-warning"> + This alert system is designed to emit sudden alerts, and may surprise somecreature if e.g. they are sleeping. Keep that in mind. + </div> + + <p> + <b>Disclaimer:</b> This is NOT an emergency alert system, use the "Emergency alert" option is you need immediate help and comfort. + </p> + <p> + © <?= date('Y') ?> Equestria.dev + </p> + </div> + </div> + </div> +</div> + +<script> + window.alertInterval = null; + window.alertIntervalCounter = 15; + + 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/pleasure").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/pleasure-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); + 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/pronouns.php b/includes/pronouns.php index 5f79dd3..6ab2487 100644 --- a/includes/pronouns.php +++ b/includes/pronouns.php @@ -3,6 +3,7 @@ $pronounsSets = [ "pony" => [ "gender" => "ponygender", + "gender:fr" => "poneygenre", "object" => "pony", "person" => "pony", "possessive_det" => "pony's", @@ -14,6 +15,7 @@ $pronounsSets = [ ], "she" => [ "gender" => "female", + "gender:fr" => "fille", "object" => "her", "person" => "girl", "possessive_det" => "her", @@ -25,6 +27,7 @@ $pronounsSets = [ ], "he" => [ "gender" => "male", + "gender:fr" => "garçon", "object" => "him", "person" => "boy", "possessive_det" => "his", @@ -36,6 +39,7 @@ $pronounsSets = [ ], "it" => [ "gender" => "agender", + "gender:fr" => "agenre", "object" => "it", "person" => "person", "possessive_det" => "its", @@ -47,6 +51,7 @@ $pronounsSets = [ ], "they" => [ "gender" => "non binary", + "gender:fr" => "non binaire", "object" => "them", "person" => "person", "possessive_det" => "their", @@ -58,6 +63,8 @@ $pronounsSets = [ ] ]; +$pronounGetCount = 0; + $possibilitiesPerSet = []; foreach ($pronounsSets as $name => $set) { if (!isset($possibilitiesPerSet[$name])) $possibilitiesPerSet[$name] = []; @@ -80,9 +87,9 @@ function getSetFromValue(string $value) { return null; } -function getPronounsFromMark(string $mark = null): array { - if (!isset($mark)) { - return []; +function getPronounsFromMark(?string $mark = null): array { + if (!isset($mark) || trim($mark) === "") { + return ["they"]; } else { $parts = array_unique(array_map(function ($i) { return getSetFromValue($i); @@ -94,22 +101,49 @@ function getPronounsFromMark(string $mark = null): array { function getMemberPronouns(?string $pronouns): ?array { global $pronounsSets; $list = getPronounsFromMark($pronouns); - return $pronounsSets[$list[count($list) - 1]] ?? $pronounsSets["she"]; + return $pronounsSets[$list[array_rand($list)]] ?? $pronounsSets["she"]; } -function getGenderFromPronoun(string $pronoun) { +function getGenderFromPronoun(string $pronoun, bool $french = false) { global $pronounsSets; $set = getPronounsFromMark($pronoun)[0]; - return $pronounsSets[$set]["gender"]; + + if ($french) { + return ($pronounsSets[$set] ?? $pronounsSets["they"])["gender:fr"]; + } else { + return ($pronounsSets[$set] ?? $pronounsSets["they"])["gender"]; + } } -function getTooltipsFromMark(string $mark = null): ?string { +function pronounInFrench(string $pronoun): string { + return match ($pronoun) { + "she" => "elle", + "her" => "elle", + "he" => "il", + "him" => "lui", + "they" => "iel", + "them" => "iel", + "it" => "iel", + "its" => "iel", + "pony" => "poney", + "pony's" => "à poney", + "ponys" => "à poney", + default => $pronoun, + }; +} + +function getTooltipsFromMark(string $mark = null, bool $french = false): ?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))); + if ($french) { + return implode("/", array_map(function ($i) { + return "<span title='" . ucfirst(getGenderFromPronoun($i, true)) . "' data-bs-toggle='tooltip'>" . pronounInFrench($i) . "</span>"; + }, explode("/", $mark))); + } else { + return implode("/", array_map(function ($i) { + return "<span title='" . ucfirst(getGenderFromPronoun($i, false)) . "' data-bs-toggle='tooltip'>" . $i . "</span>"; + }, explode("/", $mark))); + } } }
\ No newline at end of file diff --git a/includes/refresh.php b/includes/refresh.php index 83745fb..79e3b7f 100644 --- a/includes/refresh.php +++ b/includes/refresh.php @@ -25,26 +25,22 @@ function getSystem(string $id) { 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); + file_put_contents("./data/$id-general.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id")); $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); + file_put_contents("./data/$id-members.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/members")); $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); + file_put_contents("./data/$id-fronters.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/fronters")); $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); + file_put_contents("./data/$id-switches.json", file_get_contents("https://pluralkit.equestria.dev/v2/systems/$id/switches")); $times["system-switches-$id"] = microtime(true) - $currentOpStart; } diff --git a/includes/score.php b/includes/score.php index 89b3d3c..e0d0d62 100644 --- a/includes/score.php +++ b/includes/score.php @@ -33,7 +33,7 @@ function calculateScore($metadata, $name) { function scoreOrder($members, $system) { $ordered = []; foreach ($members as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $systemID = $member["system"] ?? $system; $member["_metadata"] = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-$member[id]-metadata.json"), true)); @@ -52,7 +52,7 @@ function scoreOrder($members, $system) { function scoreOrderGlobal() { $ordered = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $member["_system"] = "gdapd"; $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"]); @@ -60,7 +60,7 @@ function scoreOrderGlobal() { } } foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $member["_system"] = "ynmuc"; $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"]); diff --git a/includes/session.php b/includes/session.php index 27acf6b..2157f5f 100644 --- a/includes/session.php +++ b/includes/session.php @@ -1,6 +1,7 @@ <?php global $isLoggedIn; +global $isUserLoggedIn; global $_PROFILE; if (isset($_COOKIE['PEH2_SESSION_TOKEN'])) { @@ -16,4 +17,19 @@ if (isset($_COOKIE['PEH2_SESSION_TOKEN'])) { } } else { $isLoggedIn = false; +} + +if (isset($_COOKIE['PEH2_USER_TOKEN'])) { + if (str_contains($_COOKIE['PEH2_USER_TOKEN'], ".") || str_contains($_COOKIE['PEH2_USER_TOKEN'], "/")) { + $isUserLoggedIn = false; + } + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_USER_TOKEN'])))) { + $_PROFILE = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_USER_TOKEN']))), true); + $isUserLoggedIn = true; + } else { + $isUserLoggedIn = false; + } +} else { + $isUserLoggedIn = false; }
\ No newline at end of file diff --git a/includes/short.php b/includes/short.php new file mode 100644 index 0000000..dec0e09 --- /dev/null +++ b/includes/short.php @@ -0,0 +1,47 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/functions.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/bitset.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; + +global $toplevel; + +header("Content-Type: text/plain"); +$members = scoreOrderGlobal(); +$list = [ + "rd" => "/raindrops", + "cb" => "/cloudburst", + "minty" => "/cloudy" +]; + +foreach ($members as $member) { + for ($i = 1; $i < strlen($member["name"]); $i++) { + $part = substr($member["name"], 0, $i); + + if (in_array($part, array_keys($list))) { + $list[$part] = false; + } else { + $list[$part] = "/" . $member["name"]; + } + } + + foreach ($member["proxy_tags"] as $proxy) { + $system = $member["_system"] === "gdapd" ? "rd" : "cb"; + $list[$system . preg_replace("/[^a-z]/m", "", $proxy["prefix"])] = "/" . $member["name"]; + } + + $list[$member["id"]] = "/" . $member["name"]; + $list[$member["uuid"]] = "/" . $member["name"]; +} + +$list["minty"] = "/cloudy"; + +if (in_array($toplevel, array_keys($list)) && $list[$toplevel]) { + if ($toplevel !== "unknown") { + header("Location: " . $list[$toplevel]); + } else { + header("Location: /?error=Page not found: " . strip_tags($toplevel)) and die(); + } +} else { + header("Location: /?error=Page not found: " . strip_tags($toplevel)) and die(); +}
\ No newline at end of file diff --git a/includes/subsysbanner.php b/includes/subsysbanner.php index 95c6942..e36d0b5 100644 --- a/includes/subsysbanner.php +++ b/includes/subsysbanner.php @@ -25,7 +25,7 @@ $fronters = array_map(function ($item) { <span> <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> + <a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> <?php else: ?> <span class="text-muted">N/A</span> <?php endif; ?> @@ -48,7 +48,7 @@ $fronters = array_map(function ($item) { } ?> - <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> + <b>Last Fronter: </b><a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($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/sysbanner.php b/includes/sysbanner.php index 7b6bbf1..5ffe000 100644 --- a/includes/sysbanner.php +++ b/includes/sysbanner.php @@ -31,7 +31,7 @@ $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includ foreach ($members as $member) { $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> + <a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a> <?php endif; } @@ -43,7 +43,7 @@ $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includ </span> <span> <?php $member = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["members"][0]; ?> - <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> + <b>Fronter: </b><a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . resolveMember($member['name']) : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? ($member["name"] === "fusion" ? "<peh-muted>More than one</peh-muted>" : $member["name"])) ?></a> </span> <span> <?php @@ -59,15 +59,18 @@ $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includ } ?> - <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> + <b>Last fronter: </b><a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? ($member["name"] === "fusion" ? "<peh-muted>More than one</peh-muted>" : $member["name"])) ?></a> </span> <span> - <b>Members: </b><?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true)) - 1 ?><?php + <?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']; }); + ?> + <b>Members: </b><?= count(scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true), $systemID)) ?><?php + if (count($travellers) > 0) { echo("<br>+ " . count($travellers) . " traveller" . (count($travellers) > 1 ? "s" : "")); } @@ -75,7 +78,7 @@ $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includ ?> </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> + <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> </span> </div> </div> diff --git a/includes/system.php b/includes/system.php index 059eed7..46adeb1 100644 --- a/includes/system.php +++ b/includes/system.php @@ -1,47 +1,5 @@ <?php global $system; global $systemCommonName; global $systemID; $title = $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; -function getMember(string $id) { - global $systemID; - - $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; -} - -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); - - $period = $periods[$j] . ($difference >1 ? "s" :''); - return "{$difference} {$period} {$tense}"; -} - ?> <br> diff --git a/includes/system/compare.php b/includes/system/compare.php index 6d69cd0..f597cf3 100644 --- a/includes/system/compare.php +++ b/includes/system/compare.php @@ -1,4 +1,4 @@ -<?php global $system; global $systemCommonName; global $systemID; $title = "Compare members · " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +<?php global $system; global $systemCommonName; global $systemID; $title = "Compare members · " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; global $travelling; $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); @@ -70,14 +70,6 @@ function getMember(string $id) { <span class="comparison-header-l5">Ltl.</span> </span> <span class="comparison-header comparison-item"> - <span class="comparison-header-l0">Not talking</span> - <span class="comparison-header-l1">No talk</span> - <span class="comparison-header-l2">No talk</span> - <span class="comparison-header-l3">NT.</span> - <span class="comparison-header-l4">NT.</span> - <span class="comparison-header-l5">NT.</span> - </span> - <span class="comparison-header comparison-item"> <span class="comparison-header-l0">Protector</span> <span class="comparison-header-l1">Protector</span> <span class="comparison-header-l2">Protect.</span> @@ -97,41 +89,41 @@ function getMember(string $id) { } ?> - <a title="<?= $member["display_name"] ?? $member["name"] ?>" data-bs-toggle="tooltip" class="member-link comparison-item comparison-item-clickable" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><span class="comparison-name-full"><?= $member["display_name"] ?? $member["name"] ?></span><span class="comparison-name-small"><?= getMiniName($member["display_name"] ?? $member["name"]) ?></span></span> + <a title="<?= $member["display_name"] ?? $member["name"] ?>" data-bs-toggle="tooltip" class="member-link comparison-item comparison-item-clickable" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><span class="comparison-name-full"><?= $member["display_name"] ?? $member["name"] ?></span><span class="comparison-name-small"><?= getMiniName($member["display_name"] ?? $member["name"]) ?></span></span> <span class="comparison-colors" style="background-color: #<?= $member["color"] ?? "ffffff" ?>; height: 16px; width: 16px;display: inline-block;vertical-align: middle;border-radius:2px;"></span> </a> <span class="comparison-item"> <?php foreach ($metadata["species"] ?? [] as $species): ?> <img data-bs-toggle="tooltip" title="<?php switch ($species) { case "earth": - if ($metadata["robot"]) echo "Robot earth pony"; else echo "Earth pony"; + if ($metadata["robot"]) echo "Robot earth pony"; else if ($metadata["plush"]) echo "Earth pony plush"; else echo "Earth pony"; break; case "alicorn": - if ($metadata["robot"]) echo "Robot alicorn"; else echo "Alicorn"; + if ($metadata["robot"]) echo "Robot alicorn"; else if ($metadata["plush"]) echo "Alicorn plush"; else echo "Alicorn"; break; case "crystal": - if ($metadata["robot"]) echo "Robot crystal pony"; else echo "Crystal pony"; + if ($metadata["robot"]) echo "Robot crystal pony"; else if ($metadata["plush"]) echo "Crystal pony plush"; else echo "Crystal pony"; break; case "pegasus": - if ($metadata["robot"]) echo "Robot pegasus"; else echo "Pegasus"; + if ($metadata["robot"]) echo "Robot pegasus"; else if ($metadata["plush"]) echo "Pegasus plush"; else echo "Pegasus"; break; case "batpony": - if ($metadata["robot"]) echo "Robot bat pony"; else echo "Bat pony"; + if ($metadata["robot"]) echo "Robot bat pony"; else if ($metadata["plush"]) echo "Bat pony plush"; else echo "Bat pony"; break; case "unicorn": - if ($metadata["robot"]) echo "Robot unicorn"; else echo "Unicorn"; + if ($metadata["robot"]) echo "Robot unicorn"; else if ($metadata["plush"]) echo "Unicorn plush"; else echo "Unicorn"; break; default: echo $species . "_" . $metadata["robot"]; break; - } ?>" style="width:24px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?><?= $metadata["robot"] ? "-robot" : "" ?>.png" alt="<?= $species ?>"> + } ?>" style="width:24px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?><?= $metadata["robot"] ? "-robot" : ($metadata["plush"] ? "-plush" : "") ?>.png" alt="<?= $species ?>"> <?php endforeach; ?> </span> <span class="comparison-item"> @@ -143,15 +135,22 @@ function getMember(string $id) { <?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 title="<b><?= $mfMember["display_name"] ?? $mfMember["name"] ?></b><br>Marefriend" data-bs-toggle="tooltip" data-bs-html="true" 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;"></a><?php $index++; endforeach; ?><?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) { + }); sort($mfMember); $mfMember = $mfMember[0]; ?><a title="<b><?= $mfMember["display_name"] ?? $mfMember["name"] ?></b><br>Marefriend" data-bs-toggle="tooltip" data-bs-html="true" class="member-link tooltip-nohelp" href="/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"></a><?php $index++; endforeach; ?><?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 title="<b><?= $mfMember["display_name"] ?? $mfMember["name"] ?></b><br>Sister" data-bs-toggle="tooltip" data-bs-html="true" class="member-link tooltip-nohelp" href="/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"></a><?php $index++; endforeach; ?><?php $index = 0; 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) { global $mfMemberID; return $item["id"] === $mfMemberID; - }); sort($mfMember); $mfMember = $mfMember[0]; ?><a title="<b><?= $mfMember["display_name"] ?? $mfMember["name"] ?></b><br>Sister" data-bs-toggle="tooltip" data-bs-html="true" 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;"></a><?php $index++; endforeach; ?> + }); sort($mfMember); $mfMember = $mfMember[0]; ?><a title="<b><?= $mfMember["display_name"] ?? $mfMember["name"] ?></b><br>Caretaker" data-bs-toggle="tooltip" data-bs-html="true" class="member-link tooltip-nohelp" href="/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"></a><?php $index++; endforeach; ?> </span> </span> <span class="comparison-item"> <?php if ($metadata["host"]): ?> - <img data-bs-toggle="tooltip" title="Yes" src="/assets/icons/complete.svg" alt="Yes" style="width:24px;"> + <?php if ($travelling[$member["id"]]["travelling"]): ?> + <img data-bs-toggle="tooltip" title="Yes, but currently travelling" src="/assets/icons/partial.svg" alt="Yes, but currently travelling" style="width:24px;"> + <?php else: ?> + <img data-bs-toggle="tooltip" title="Yes" src="/assets/icons/complete.svg" alt="Yes" style="width:24px;"> + <?php endif; ?> <?php else: ?> <img data-bs-toggle="tooltip" title="No" src="/assets/icons/none.svg" alt="No" style="width:24px;"> <?php endif; ?> @@ -173,15 +172,12 @@ function getMember(string $id) { <?php endif; ?> </span> <span class="comparison-item"> - <?php if ($metadata["not_talking"]): ?> - <img data-bs-toggle="tooltip" title="Yes" src="/assets/icons/complete.svg" alt="Yes" style="width:24px;"> - <?php else: ?> - <img data-bs-toggle="tooltip" title="No" src="/assets/icons/none.svg" alt="No" style="width:24px;"> - <?php endif; ?> - </span> - <span class="comparison-item"> <?php if ($metadata["protector"]): ?> - <img data-bs-toggle="tooltip" title="Yes" src="/assets/icons/complete.svg" alt="Yes" style="width:24px;"> + <?php if ($travelling[$member["id"]]["travelling"]): ?> + <img data-bs-toggle="tooltip" title="Yes, but currently travelling" src="/assets/icons/partial.svg" alt="Yes, but currently travelling" style="width:24px;"> + <?php else: ?> + <img data-bs-toggle="tooltip" title="Yes" src="/assets/icons/complete.svg" alt="Yes" style="width:24px;"> + <?php endif; ?> <?php else: ?> <img data-bs-toggle="tooltip" title="No" src="/assets/icons/none.svg" alt="No" style="width:24px;"> <?php endif; ?> diff --git a/includes/system/history.php b/includes/system/history.php index 8483e3a..1f04bb7 100644 --- a/includes/system/history.php +++ b/includes/system/history.php @@ -119,8 +119,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 0) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -149,8 +149,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 1) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -179,8 +179,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 2) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -209,8 +209,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 3) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -239,8 +239,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 4) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -269,8 +269,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 5) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -299,8 +299,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 6) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -329,8 +329,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 7) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -359,8 +359,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 8) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> @@ -384,8 +384,8 @@ function getMember(string $id) { <?= isNotToday($fronter["date"], 9) ? "00:00" : date('H:i', $fronter["date"]) ?> </span> <span class="fronter-profile" style="vertical-align: middle;"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> </span> </div> diff --git a/includes/system/species.php b/includes/system/species.php index 7747809..a35e811 100644 --- a/includes/system/species.php +++ b/includes/system/species.php @@ -1,9 +1,23 @@ -<?php global $system; global $systemCommonName; global $systemID; $title = "Members by species · " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +<?php global $system; global $systemCommonName; global $systemID; $title = "Members by species · " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; global $travelling; $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); $members = scoreOrder($members, $systemID); function species(array $members, string $id, string $name) { global $systemID; ?> + <?php + + $members = [ + ...array_filter($members, function ($i) { + global $travelling; + return !$travelling[$i['id']]['travelling']; + }), + ...array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-members.json"), true), function ($i) use ($id, $systemID) { + global $travelling; + return $travelling[$i['id']]['travelling'] && in_array($id, parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "ynmuc" : "gdapd") . "-" . $i['id'] . "-metadata.json"), true))["species"]); + }) + ]; + + ?> <div class="relation" style="background-color:rgba(255, 255, 255, .1);margin-bottom:10px;padding:10px;border-radius:10px;display:grid;grid-template-columns: 1fr 4fr;"> <div class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;text-decoration: none;"> <img src="/assets/species/<?= $id ?>.png" style="width:24px;"><span class="species-name"> <?= $name ?></span> (<?= count($members) ?>) @@ -12,7 +26,7 @@ function species(array $members, string $id, string $name) { global $systemID; ? <div class="relation-item" style="margin-left:10px;padding:0 20px;"> <?php if (count($members) > 0): ?> <?php $index = 0; foreach ($members as $member): ?> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $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 if ($index + 2 <= count($members)) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; endforeach; ?> + <a class="member-link" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($member["display_name"] ?? $member["name"]) ?></a><?php if ($index + 2 <= count($members)) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; endforeach; ?> <?php else: ?>-<?php endif; ?> </div> </div> diff --git a/includes/system/tree.php b/includes/system/tree.php index 04cbf83..21d146b 100644 --- a/includes/system/tree.php +++ b/includes/system/tree.php @@ -78,7 +78,7 @@ function getMemberSubsystem(array $member) { <div class="tree-l0-separator"> </div> <div class="tree-l1-separator<?= $ssfirst ? " tree-first-separator" : "" ?>"> </div> <div class="tree-inner"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $ssmember["name"] ?>"> + <a class="member-link" href="/<?= $ssmember["name"] ?>"> <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $ssmember['name'] . ".png") ? "-" . $ssmember['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $ssmember["display_name"] ?? $ssmember["name"] ?></span> </a> </div> @@ -90,8 +90,8 @@ function getMemberSubsystem(array $member) { <div class="tree-l0"> <div class="tree-l0-separator<?= $first ? " tree-first-separator" : "" ?>"> </div> <div class="tree-inner"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $member["display_name"] ?? $member["name"] ?></span> + <a class="member-link" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $member["display_name"] ?? $member["name"] ?></span> </a> </div> <?php if (memberHasSubsystem($member)): ?> @@ -100,7 +100,7 @@ function getMemberSubsystem(array $member) { <div class="tree-l0-separator"> </div> <div class="tree-l1-separator<?= $ssfirst ? " tree-first-separator" : "" ?>"> </div> <div class="tree-inner"> - <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $ssmember["name"] ?>"> + <a class="member-link" href="/<?= $ssmember["name"] ?>"> <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $ssmember['name'] . ".png") ? "-" . $ssmember['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $ssmember["display_name"] ?? $ssmember["name"] ?></span> </a> </div> diff --git a/pages/bitset.php b/pages/bitset.php index c3cdf0a..11031e2 100644 --- a/pages/bitset.php +++ b/pages/bitset.php @@ -3,7 +3,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; if (!$isLoggedIn) header("Location: /login") and die(); -$title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +$title = "Bitset calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> @@ -11,47 +11,68 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include <div class="container"> <div id="page-content"> <h2>Bitset Calculator</h2> - <!--<div class="alert alert-dark"> - <details> - <summary>About the 24bit integer-based metadata system</summary> - </details> - </div>--> </div> - <div style="display:grid; grid-template-columns: repeat(24, 1fr);"> - <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-1" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div> - <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-2" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div> - <div data-bs-toggle="tooltip" title="Median system" id="binary-bit-3" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color: #a14700;">0</div> - <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-4" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div> - <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-5" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div> - <div data-bs-toggle="tooltip" title="Protector" id="binary-bit-6" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#77faab;">0</div> - <div data-bs-toggle="tooltip" title="Fictive" id="binary-bit-7" class="font-monospace tooltip-nohelp text-info" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Not talking" id="binary-bit-8" class="font-monospace tooltip-nohelp text-danger" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Host" id="binary-bit-9" class="font-monospace tooltip-nohelp text-primary" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-10" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> - <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-11" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> - <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-12" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> - <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-13" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">1</div> - <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-14" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> - <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-15" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> - <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-16" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> - <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-17" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-18" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-19" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-20" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-21" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Robot" id="binary-bit-22" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-23" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> - <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-24" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div style="display:grid; grid-template-columns: repeat(48, 1fr);"> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-1" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-2" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-3" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-4" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-5" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-6" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-7" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-8" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-9" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-10" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-11" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-12" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-13" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-14" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-15" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Value reserved for future use" id="binary-bit-16" class="font-monospace tooltip-nohelp text-muted" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Eatable food" id="binary-bit-17" class="font-monospace tooltip-nohelp" style="color: #d63384;text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Eatable food" id="binary-bit-18" class="font-monospace tooltip-nohelp" style="color: #d63384;text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Ability to use magic" id="binary-bit-19" class="font-monospace tooltip-nohelp" style="color: #fd7e14;text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Ability to use magic" id="binary-bit-20" class="font-monospace tooltip-nohelp" style="color: #fd7e14;text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Ability to use magic" id="binary-bit-21" class="font-monospace tooltip-nohelp" style="color: #fd7e14;text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Affectionative or sexual sensitivity" id="binary-bit-22" class="font-monospace tooltip-nohelp" style="color:#ffc107; text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Affectionative or sexual sensitivity" id="binary-bit-23" class="font-monospace tooltip-nohelp" style="color:#ffc107; text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Affectionative or sexual sensitivity" id="binary-bit-24" class="font-monospace tooltip-nohelp" style="color:#ffc107; text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-25" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div> + <div data-bs-toggle="tooltip" title="Shared memory access" id="binary-bit-26" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fa77ef;">0</div> + <div data-bs-toggle="tooltip" title="Median system" id="binary-bit-27" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color: #a14700;">0</div> + <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-28" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div> + <div data-bs-toggle="tooltip" title="Little/age regressor" id="binary-bit-29" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#b277fa;">0</div> + <div data-bs-toggle="tooltip" title="Protector" id="binary-bit-30" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#77faab;">0</div> + <div data-bs-toggle="tooltip" title="Fictive" id="binary-bit-31" class="font-monospace tooltip-nohelp text-info" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Not talking" id="binary-bit-32" class="font-monospace tooltip-nohelp text-danger" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Host" id="binary-bit-33" class="font-monospace tooltip-nohelp text-primary" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-34" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> + <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-35" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> + <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-36" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">0</div> + <div data-bs-toggle="tooltip" title="1st species" id="binary-bit-37" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#fab277;">1</div> + <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-38" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> + <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-39" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> + <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-40" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> + <div data-bs-toggle="tooltip" title="2nd species" id="binary-bit-41" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#faf377;">0</div> + <div data-bs-toggle="tooltip" title="3rd species" id="binary-bit-42" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#abfa77;">0</div> + <div data-bs-toggle="tooltip" title="3rd species" id="binary-bit-43" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#abfa77;">0</div> + <div data-bs-toggle="tooltip" title="3rd species" id="binary-bit-44" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#abfa77;">0</div> + <div data-bs-toggle="tooltip" title="3rd species" id="binary-bit-45" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#abfa77;">0</div> + <div data-bs-toggle="tooltip" title="Robot" id="binary-bit-46" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;">0</div> + <div data-bs-toggle="tooltip" title="Plush" id="binary-bit-47" class="font-monospace tooltip-nohelp" style="text-align: center;cursor: pointer;color:#6610f2;">0</div> + <div data-bs-toggle="tooltip" title="Affected by age spells" id="binary-bit-48" class="font-monospace tooltip-nohelp" style="color:#6f42c1;text-align: center;cursor: pointer;">0</div> </div> <br> <p> - <b>Input:</b> <input onchange="calculateInput();" onkeydown="calculateInput()" onkeyup="calculateInput()" value="2048" id="input" type="number" class="form-control" style="width:256px;display: inline-block;color:white;background:#111;border-color:#222;" maxlength="8" max="16777215" min="16777215"><br> - <b>Output:</b> <span id="output-color" style="border-radius:5px;display:inline-block;width:16px;height:16px;background-color:black;vertical-align:middle;"></span> <span style="vertical-align:middle;"><code id="output-bin">0b000000000000100000000000</code>, <code id="output-hex">0x000800</code>, <code id="output-dec">2048</code></span> + <b>Input:</b> <input onchange="calculateInput();" onkeydown="calculateInput()" onkeyup="calculateInput()" value="2048" id="input" type="number" class="form-control" style="width:256px;display: inline-block;color:white;background:#111;border-color:#222;" maxlength="10" max="4294967295" min="2048"><br> + <b>Output:</b> <code id="output-bin">0b000000000000000000000000000000000000100000000000</code>, <code id="output-hex">0x000008000000</code>, <code id="output-dec">2048</code> </p> <script> - for (let i = 1; i <= 24; i++) { + for (let i = 1; i <= 48; i++) { document.getElementById("binary-bit-" + i).onclick = (event) => { let el = event.target; + console.log(el, el.innerText); + if (el.innerText === "0") { el.innerText = "1"; } else { @@ -60,10 +81,10 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include calculateOutput(); - let binString = ("0".repeat(24 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2); + let binString = ("0".repeat(48 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2); let bin = binString.split("").map((i) => parseInt(i)); - for (let i = 1; i <= 24; i++) { + for (let i = 1; i <= 48; i++) { if (bin[i - 1]) { document.getElementById("binary-bit-" + i).innerText = bin[i - 1].toString(); } else { @@ -71,16 +92,22 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include } } - let sharedMemory = parseInt(binString.substring(0, 2), 2); - let median = binString.substring(2, 3) !== "0"; - let little = parseInt(binString.substring(3, 5), 2); - let protector = binString.substring(5, 6) !== "0"; - let fictive = binString.substring(6, 7) !== "0"; - let notTalking = binString.substring(7, 8) !== "0"; - let host = binString.substring(8, 9) !== "0"; - let robot = binString.substring(21, 22) !== "0"; - let species1 = binString.substring(9, 13); - let species2 = binString.substring(13, 17); + let sharedMemory = parseInt(binString.substring(8 + 16, 10 + 16), 2); + let median = binString.substring(10 + 16, 11 + 16) !== "0"; + let little = parseInt(binString.substring(11 + 16, 13 + 16), 2); + let protector = binString.substring(13 + 16, 14 + 16) !== "0"; + let fictive = binString.substring(14 + 16, 15 + 16) !== "0"; + let notTalking = binString.substring(15 + 16, 16 + 16) !== "0"; + let host = binString.substring(16 + 16, 17 + 16) !== "0"; + let robot = binString.substring(29 + 16, 30 + 16) !== "0"; + let plush = binString.substring(30 + 16, 31 + 16) !== "0"; + let species1 = binString.substring(17 + 16, 21 + 16); + let species2 = binString.substring(21 + 16, 25 + 16); + let species3 = binString.substring(25 + 16, 29 + 16); + let food = parseInt(binString.substring(16, 2 + 16), 2); + let magic = parseInt(binString.substring(2 + 16, 5 + 16), 2); + let sensitivity = parseInt(binString.substring(5 + 16, 8 + 16), 2); + let ageSpells = binString.substring(31 + 16, 32 + 16) !== "0"; document.getElementById("value-0").value = sharedMemory; document.getElementById("value-1").value = little; @@ -92,11 +119,17 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include document.getElementById("value-7").checked = notTalking; document.getElementById("value-8").checked = host; document.getElementById("value-9").checked = robot; + document.getElementById("value-10").checked = plush; + document.getElementById("value-11").value = food; + document.getElementById("value-12").value = magic; + document.getElementById("value-13").value = sensitivity; + document.getElementById("value-14").value = species3; + document.getElementById("value-15").checked = ageSpells; } } function calculateOutput() { - let bin = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null].map((_, i) => { + let bin = [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null].map((_, i) => { let e = i + 1; return document.getElementById("binary-bit-" + e).innerText; }).join(""); @@ -105,19 +138,18 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include let hex = parseInt(bin, 2).toString(16); - document.getElementById("output-hex").innerText = "0x" + "0".repeat(6 - hex.length) + hex; - document.getElementById("output-color").style.backgroundColor = "#" + "0".repeat(6 - hex.length) + hex; + document.getElementById("output-hex").innerText = "0x" + "0".repeat(12 - hex.length) + hex; document.getElementById("output-dec").innerText = parseInt(bin, 2).toString(); document.getElementById("input").value = parseInt(bin, 2).toString(); } function calculateInput() { - if (parseInt(document.getElementById("input").value).toString().length > 8) return; + if (parseInt(document.getElementById("input").value).toString().length > 10) return; - let binString = ("0".repeat(24 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2); + let binString = ("0".repeat(48 - parseInt(document.getElementById("input").value).toString(2).length)) + parseInt(document.getElementById("input").value).toString(2); let bin = binString.split("").map((i) => parseInt(i)); - for (let i = 1; i <= 24; i++) { + for (let i = 1; i <= 48; i++) { if (bin[i - 1]) { document.getElementById("binary-bit-" + i).innerText = bin[i - 1].toString(); } else { @@ -125,27 +157,39 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include } } - let sharedMemory = parseInt(binString.substring(0, 2), 2); - let median = binString.substring(2, 3) !== "0"; - let little = parseInt(binString.substring(3, 5), 2); - let protector = binString.substring(5, 6) !== "0"; - let fictive = binString.substring(6, 7) !== "0"; - let notTalking = binString.substring(7, 8) !== "0"; - let host = binString.substring(8, 9) !== "0"; - let robot = binString.substring(21, 22) !== "0"; - let species1 = binString.substring(9, 13); - let species2 = binString.substring(13, 17); + let sharedMemory = parseInt(binString.substring(8 + 16, 10 + 16), 2); + let median = binString.substring(10 + 16, 11 + 16) !== "0"; + let little = parseInt(binString.substring(11 + 16, 13 + 16), 2); + let protector = binString.substring(13 + 16, 14 + 16) !== "0"; + let fictive = binString.substring(14 + 16, 15 + 16) !== "0"; + let notTalking = binString.substring(15 + 16, 16 + 16) !== "0"; + let host = binString.substring(16 + 16, 17 + 16) !== "0"; + let robot = binString.substring(29 + 16, 30 + 16) !== "0"; + let plush = binString.substring(30 + 16, 31 + 16) !== "0"; + let ageSpells = binString.substring(31 + 16, 32 + 16) !== "0"; + let species1 = binString.substring(17 + 16, 21 + 16); + let species2 = binString.substring(21 + 16, 25 + 16); + let species3 = binString.substring(25 + 16, 29 + 16); + let food = parseInt(binString.substring(16, 2 + 16), 2); + let magic = parseInt(binString.substring(2 + 16, 5 + 16), 2); + let sensitivity = parseInt(binString.substring(5 + 16, 8 + 16), 2); document.getElementById("value-0").value = sharedMemory; document.getElementById("value-1").value = little; document.getElementById("value-2").value = species1; document.getElementById("value-3").value = species2; + document.getElementById("value-11").value = food; + document.getElementById("value-12").value = magic; + document.getElementById("value-13").value = sensitivity; document.getElementById("value-4").checked = median; document.getElementById("value-5").checked = protector; document.getElementById("value-6").checked = fictive; document.getElementById("value-7").checked = notTalking; document.getElementById("value-8").checked = host; document.getElementById("value-9").checked = robot; + document.getElementById("value-10").checked = plush; + document.getElementById("value-14").value = species3; + document.getElementById("value-15").checked = ageSpells; calculateOutput(); @@ -163,6 +207,12 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include let val7 = document.getElementById("value-7").checked; let val8 = document.getElementById("value-8").checked; let val9 = document.getElementById("value-9").checked; + let val10 = document.getElementById("value-10").checked; + let val11 = document.getElementById("value-11").value; + let val12 = document.getElementById("value-12").value; + let val13 = document.getElementById("value-13").value; + let val14 = document.getElementById("value-14").value; + let val15 = document.getElementById("value-15").checked; let val0bin = parseInt(val0).toString(2); val0bin = val0bin.length === 1 ? "0" + val0bin : val0bin; @@ -170,8 +220,18 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include let val1bin = parseInt(val1).toString(2); val1bin = val1bin.length === 1 ? "0" + val1bin : val1bin; + let val11bin = parseInt(val11).toString(2); + val11bin = val11bin.length === 1 ? "0" + val11bin : val11bin; + + let val12bin = parseInt(val12).toString(2); + val12bin = val12bin.length === 1 ? "00" + val12bin : (val12bin.length === 2 ? "0" + val12bin : val12bin); + + let val13bin = parseInt(val13).toString(2); + val13bin = val13bin.length === 1 ? "00" + val13bin : (val13bin.length === 2 ? "0" + val13bin : val13bin); + let val2bin = val2; let val3bin = val3; + let val14bin = val14; let val4bin = val4 ? "1" : "0"; let val5bin = val5 ? "1" : "0"; @@ -179,14 +239,16 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include let val7bin = val7 ? "1" : "0"; let val8bin = val8 ? "1" : "0"; let val9bin = val9 ? "1" : "0"; + let val10bin = val10 ? "1" : "0"; + let val15bin = val15 ? "1" : "0"; - let bin = val0bin + val4bin + val1bin + val5bin + val6bin + val7bin + val8bin + val2bin + val3bin + "0000" + val9bin + "00"; + let bin = "0000000000000000" + val11bin + val12bin + val13bin + val0bin + val4bin + val1bin + val5bin + val6bin + val7bin + val8bin + val2bin + val3bin + val14bin + val9bin + val10bin + val15bin; console.log(bin, parseInt(bin, 2)); let parts = bin.split("").map((i) => parseInt(i)); - for (let i = 1; i <= 24; i++) { + for (let i = 1; i <= 48; i++) { if (parts[i - 1]) { document.getElementById("binary-bit-" + i).innerText = parts[i - 1].toString(); } else { @@ -204,6 +266,15 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include <option value="1">Partial direct access</option> <option value="0" selected>No direct access</option> </select> + <img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"> + <br> + <b>Food: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-11" onchange="updateFromSelection();"> + <option value="0" selected>Doesn't need to eat</option> + <option value="1">Can't eat fish or meat</option> + <option value="2">Can't eat meat</option> + <option value="3">Can eat everything</option> + </select> + <img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"> <br> <b>Little/age regressor: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-1" onchange="updateFromSelection();"> <option value="0" selected>None</option> @@ -211,6 +282,7 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include <option value="3">Younger</option> <option value="1">Age regressor</option> </select> + <img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"> <br> <b>Species: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-2" onchange="updateFromSelection();"> <option value="0000" disabled>None</option> @@ -230,32 +302,69 @@ $title = "Bitset Calculator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/include <option value="0101">Bat pony</option> <option value="0110">Crystal pony</option> </select> + <select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-14" onchange="updateFromSelection();"> + <option value="0000">None</option> + <option value="0001">Earth pony</option> + <option value="0010">Unicorn</option> + <option value="0011">Pegasus</option> + <option value="0100">Alicorn</option> + <option value="0101">Bat pony</option> + <option value="0110">Crystal pony</option> + </select> + <img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"> + <br> + <b>Magic: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-12" onchange="updateFromSelection();"> + <option value="0" selected>Can't use magic</option> + <option value="1">Can use magic in some cases</option> + <option value="2">Can use magic with a horn</option> + <option value="3">Can use magic with wings</option> + <option value="4">Can use magic with wings and a horn</option> + <option value="5">Can use magic with another part of the body</option> + </select> + <img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"> + <br> + <b>Sensitivity: </b><select class="tooltip-nohelp form-select" style='display:inline-block;width:max-content;color:white;background-color:#111;border-color:#222;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");' id="value-13" onchange="updateFromSelection();"> + <option value="0" selected>None</option> + <option value="1">May be sensitive</option> + <option value="2">Affectionately sensitive</option> + <option value="3">Sexually sensitive</option> + <option value="4">Sensitive in both ways</option> + </select> + <img alt="" src="/assets/icons/visibility-private.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will remain private" data-bs-toggle="tooltip"> </p> <p> - <label> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-4" onchange="updateFromSelection();"> Part of a median system - </label><br> - <label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-5" onchange="updateFromSelection();"> Protector - </label><br> - <label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-6" onchange="updateFromSelection();"> Fictive - </label><br> - <label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-7" onchange="updateFromSelection();"> Not talking - </label><br> - <label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-8" onchange="updateFromSelection();"> Host - </label><br> - <label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> <input type="checkbox" id="value-9" onchange="updateFromSelection();"> Robot - </label> + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> + <input type="checkbox" id="value-10" onchange="updateFromSelection();"> + Plush + </label><img alt="" src="/assets/icons/visibility-public.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will be shown publicly" data-bs-toggle="tooltip"><br> + <label style="margin-bottom:5px;"> + <input type="checkbox" id="value-15" onchange="updateFromSelection();"> + Affected by age spells + </label><img alt="" src="/assets/icons/visibility-private.svg" style="filter:invert(1);width:24px;margin-left:5px;margin-top:-5px;" title="This information will remain private" data-bs-toggle="tooltip"> </p> </div> diff --git a/pages/demo.php b/pages/demo.php new file mode 100644 index 0000000..a408763 --- /dev/null +++ b/pages/demo.php @@ -0,0 +1,130 @@ +<?php + +$title = "Mode démonstration"; $demoHeader = true; $emergencyHeader = true; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; + +?> + +<script src="/app/banner.js"></script> +<br> +<div class="container"> + <div> + <div id="header" style="text-align: center;"> + <img alt="" src="/assets/uploads/raindrops.png" style="width:128px;"> + <h3>Raindrops System</h3> + <p>Système plural de <?= count(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true)) - 1 ?> poneys</p> + <hr> + </div> + + <div id="list"> + <p>Cliquez sur quelqu'un pour avoir plus d'information sur elle.</p> + <div class="list-group"> + <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd") as $member): ?> + <a onclick="showMember('<?= $member["id"] ?>');" class="list-group-item"> + <img src="/assets/uploads/pt-<?= $member["name"] ?>.png" style="width:32px;vertical-align: middle;"> + <span style="vertical-align: middle;margin-left: 5px;"> + <b><?= getMiniName($member["display_name"] ?? $member["name"]) ?></b> + <?= $member["_metadata"]["host"] ? "(hôte)" : "" ?><?= $member["_metadata"]["protector"] ? "(protectrice)" : "" ?><?= $member["_metadata"]["little"] === 2 ? (isset($member["_metadata"]["median"]) ? "(" . getMiniName(getSystemMember("gdapd", $member["_metadata"]["median"])["display_name"]) . " régressée en âge)" : "(petite)") : "" ?> + </span> + </a> + <?php endforeach; ?> + </div> + </div> + </div> +</div> + +<div class="modal fade" id="member"> + <div class="modal-dialog modal-xl"> + <div class="modal-content"> + <div class="modal-header"> + <h4 class="modal-title"> + <img id="modal-img" src="/assets/uploads/pt.png" style="width:32px;vertical-align: middle;"> + <span style="vertical-align: middle;"><span id="modal-member">Member</span> · Raindrops System</span> + </h4> + <button type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + + <div class="modal-body"> + <?php foreach (scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd") as $member): ?> + <div class="modal-member-content" id="modal-member-content-<?= $member["id"] ?>"> + <script> + <?php global $memberData; $memberData = $member; ?> + window.currentMemberData = JSON.parse(atob(`<?= base64_encode(json_encode(getMemberBannerData($member["id"], "gdapd", true))) ?>`)); + </script> + <div id="member-banner"></div> + <script> + refreshBanner(false, true); + document.getElementById("member-banner").id = ""; + </script> + </div> + <?php endforeach; ?> + </div> + </div> + </div> +</div> + +<style> + .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; + } + + a { + cursor: pointer; + } + + .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> + +<script> + window._phpMembers = JSON.parse(atob(`<?= base64_encode(json_encode(array_values(scoreOrder(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true), "gdapd")))) ?>`)); + window.members = {}; + + for (let member of window._phpMembers) { + window.members[member.id] = member; + } + + function showMember(id) { + let member = members[id]; + document.getElementById("modal-member").innerText = member["display_name"]; + document.getElementById("modal-img").src = "/assets/uploads/pt-" + member["name"] + ".png"; + + Array.from(document.getElementsByClassName("modal-member-content")).forEach((i) => { + i.style.display = "none"; + }); + document.getElementById("modal-member-content-" + id).style.display = ""; + + let modal = new bootstrap.Modal(document.getElementById('member')); + modal.show(); + } +</script> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?> diff --git a/pages/emergency.php b/pages/emergency.php index 2e38a6f..0405bca 100644 --- a/pages/emergency.php +++ b/pages/emergency.php @@ -4,7 +4,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLogg if (!$isLoggedIn) header("Location: /login") and die(); $emergencyHeader = true; -$title = "Emergency Alert"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +$title = "Emergency alert"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> diff --git a/pages/fronting.php b/pages/fronting.php index 21d6691..eae0b61 100644 --- a/pages/fronting.php +++ b/pages/fronting.php @@ -1,4 +1,4 @@ -<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; if (!$isLoggedIn) header("Location: /login") and die(); $title = "Front Planner"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> +<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; if (!$isLoggedIn) header("Location: /login") and die(); $title = "Front planner"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> <br> <div class="container"> diff --git a/pages/home.php b/pages/home.php index 2127712..340df44 100644 --- a/pages/home.php +++ b/pages/home.php @@ -9,11 +9,11 @@ </div> <?php endif; ?> - <?php global $isLoggedIn; global $_PROFILE; global $travelling; if ($isLoggedIn): $byColor = getMembersByColor(); ?> + <?php global $travelling; if (!isset($_GET['legacy'])): $byColor = getMembersByColor(); ?> <div style="text-align: center;"> <img alt="" src="/assets/logo/logo.png" style="width:128px;"> <p style="z-index:999;position:relative;background:black;margin: 20px -10px 0 -20px;padding-right:30px;height:32px;text-align: center;display:grid;grid-template-columns: repeat(<?= count($byColor) ?>, 1fr);"> - <?php foreach ($byColor as $member): ?><a data-bs-html="true" class="rainbow-item tooltip-nohelp" title="<b><?= $member["display_name"] ?? $member["name"] ?></b><br><?= ($travelling[$member['id']]["travelling"] ? $member["_system"] === "ynmuc" : $member["_system"] === "gdapd") ? "Raindrops System" : "Cloudburst System" ?>" data-bs-toggle="tooltip" style="overflow: hidden;" href="/<?= $member["_system"] === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"><img src="/assets/uploads/pt-<?= $member["name"] ?>.png" style="width:32px;height:32px;position:absolute;z-index:99;"></a><?php endforeach; ?> + <?php foreach ($byColor as $member): ?><a data-bs-html="true" class="rainbow-item tooltip-nohelp" title="<b><?= $member["display_name"] ?? $member["name"] ?></b><br><?= ($travelling[$member['id']]["travelling"] ? $member["_system"] === "ynmuc" : $member["_system"] === "gdapd") ? "Raindrops System" : "Cloudburst System" ?>" data-bs-toggle="tooltip" style="overflow: hidden;" href="/<?= $member["name"] ?>"><img src="/assets/uploads/pt-<?= $member["name"] ?>.png" style="width:32px;height:32px;position:absolute;z-index:99;"></a><?php endforeach; ?> </p> <div style="margin-top:-33px;margin-bottom:0;margin-left:-20px;margin-right:20px;height:32px;text-align: center;display:grid;grid-template-columns: repeat(<?= count($byColor) ?>, 1fr);"> <?php foreach ($byColor as $member): ?><div> @@ -21,8 +21,8 @@ </div><?php endforeach; ?> </div> <div style="padding:5px 10px;background:#222;border-bottom-left-radius: 10px;border-bottom-right-radius: 10px;"> - <h2 style="margin-top: 20px;">Cuties and Plurality</h2> - <p>A safe place for <?= count($byColor) ?> ponies in 2 plural systems</p> + <h2 style="margin-top: 20px;">Cold Haze</h2> + <p><?= count($byColor) ?> ponies in 2 plural systems</p> </div> </div> <hr style="border-color:rgba(255, 255, 255, .25);"> @@ -37,7 +37,7 @@ <div> <!-- Main title --> - <span style="font-weight:bold;font-size:24px;">Cuties and Plurality</span><br> + <span style="font-weight:bold;font-size:24px;">Cold Haze</span><br> <!-- Tagline --> <span style="font-weight:normal;font-size:16px;">Just a small safe place for two plural systems</span> @@ -48,8 +48,8 @@ </div> <?php endif; ?> - <?php if ($isLoggedIn && ((int)date('H') >= 20 || (int)date('H') < 6)): ?> - <a href="/emergency" style="text-decoration: none;margin-top:15px;display:block;font-size:24px;"> + <?php global $isLoggedIn; if ($isLoggedIn && ((int)date('H') >= 20 || (int)date('H') < 6)): ?> + <a href="/-/emergency" style="text-decoration: none;margin-top:15px;display:block;"> <div class="alert alert-danger"> <b>Are you in need of help?</b> If you need immediate help from a loved one, you may want to enable the emergency alert by clicking here, even if that will wake up the <?= $_PROFILE['name'] === "Raindrops System" ? "Cloudburst System" : "Raindrops System" ?>. Use it as you need. </div> diff --git a/pages/login.php b/pages/login.php index a6f075f..8611f5f 100644 --- a/pages/login.php +++ b/pages/login.php @@ -1,2 +1,42 @@ <?php -header("Location: /Authentication/Start") and die();
\ No newline at end of file + +$title = "Login"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; + +?> + +<br> +<div class="container"> + <div> + <h2>Login</h2> + <?php global $isLoggedIn; if ($isLoggedIn): ?> + <div class="alert alert-warning"> + <b>You are already logged in.</b> If you want to login to a different account or using a different authentication method, you may do so now. + </div> + <?php endif; ?> + <p>Select how you want to log into Cold Haze.</p> + <div class="row"> + <div class="col-md-6"> + <div class="card" style="margin-bottom:10px;text-align: center;"> + <div class="card-body"> + <img src="https://git.equestria.dev/equestria.dev/design/raw/branch/mane/logo/dark/banner.svg" style="height:48px;" alt=""> + <h4 class="card-title" style="margin-top:15px;">Equestria.dev Private Authentication</h4> + <p>For website administrators, allows to change content and access private information.</p> + <a href="/Authentication/Start" class="btn btn-primary">Continue</a> + </div> + </div> + </div> + <div class="col-md-6"> + <div class="card" style="margin-bottom:10px;text-align: center;"> + <div class="card-body"> + <img src="https://equestria.horse/assets/favicon.png" style="height:48px;" alt=""><img src="/assets/logo/gitlab.svg" style="height:48px;margin-left:15px;" alt=""><img src="/assets/logo/github.svg" style="height:48px;margin-left:15px;" alt=""> + <h4 class="card-title" style="margin-top:15px;">Equestria.horse/GitLab/GitHub</h4> + <p>For website users, allows to view more content, ask questions, and set notes for members.</p> + <a href="#" class="btn btn-primary disabled">Continue</a> + </div> + </div> + </div> + </div> + </div> +</div> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?> diff --git a/pages/logout.php b/pages/logout.php index ea1bfce..0263278 100644 --- a/pages/logout.php +++ b/pages/logout.php @@ -1,16 +1,15 @@ <?php if (isset($_COOKIE['PEH2_SESSION_TOKEN'])) { - if (str_contains($_COOKIE['PEH2_SESSION_TOKEN'], ".") || str_contains($_COOKIE['PEH2_SESSION_TOKEN'], "/")) { - header("Location: /") and die(); - } - if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_SESSION_TOKEN'])))) { unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_SESSION_TOKEN']))); - header("Location: /") and die(); - } else { - header("Location: /") and die(); } -} else { - header("Location: /") and die(); -}
\ No newline at end of file +} + +if (isset($_COOKIE['PEH2_USER_TOKEN'])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_USER_TOKEN'])))) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/includes/tokens-public/" . str_replace(".", "", str_replace("/", "", $_COOKIE['PEH2_USER_TOKEN']))); + } +} + +header("Location: /") and die();
\ No newline at end of file diff --git a/pages/page.php b/pages/page.php index 00622b3..a00a0f1 100644 --- a/pages/page.php +++ b/pages/page.php @@ -4,6 +4,28 @@ $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includ if (!isset($_GET['_']) || trim($_GET['_']) === "") header("Location: /?error=Invalid request") and die(); $parts = explode("/", $_GET['_']); + +if (($parts[0] !== "cloudburst" && $parts[0] !== "raindrops") && (!(count($parts) > 2) || $parts[1] === "-")) { + $namesCloudburst = [...array_map(function ($i) { + return $i['name']; + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true)), "unknown-cb"]; + $namesRaindrops = [...array_map(function ($i) { + return $i['name']; + }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true)), "unknown-rd"]; + + $parts = explode("/", $_GET['_']); + array_unshift($parts, ""); + $parts = array_values($parts); + + if (in_array($parts[1], $namesCloudburst)) { + $parts[0] = "cloudburst"; + } else if (in_array($parts[1], $namesRaindrops)) { + $parts[0] = "raindrops"; + } + + if ($parts[1] === "unknown-rd" || $parts[1] === "unknown-cb") $parts[1] = "unknown"; +} + $system = $parts[0]; $member = ($parts[1] ?? null) === "" ? null : $parts[1]; @@ -12,12 +34,16 @@ $systemCommonName = $system === "cloudburst" ? "Cloudburst System" : "Raindrops $systemID = $system === "cloudburst" ? "ynmuc" : "gdapd"; if ($member === null) { + global $_SystemName; + $_SystemName = $system; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/system.php'; } else if ($member === "-" && isset($parts[2])) { if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/includes/system/' . $parts[2] . '.php')) { + global $_SystemPage; + $_SystemPage = $parts[2]; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/system/' . $parts[2] . '.php'; } else { - header("Location: /?error=Page not found") and die(); + header("Location: /?error=Page not found: " . $parts[2]) and die(); } } else { $memberFoundInAnotherSystem = false; @@ -44,25 +70,32 @@ if ($member === null) { $memberCommonName = $m['display_name'] ?? $m['name']; $memberID = $m['id']; $system = $systemID === "gdapd" ? "cloudburst" : "raindrops"; - $systemCommonName = $system === "cloudburst" ? "Cloudburst System" : "Raindrops System"; $systemID = $system === "cloudburst" ? "ynmuc" : "gdapd"; } else if ($m['name'] === $member) { $memberFoundInAnotherSystem = true; } } - if ($memberData === null) { - if ($memberFoundInAnotherSystem) { - header("Location: /" . ($systemID === "gdapd" ? "cloudburst" : "raindrops") . "/" . $member) and die(); - } else { - header("Location: /?error=System member not found") and die(); - } + global $_SystemName; + $_SystemName = $system; + + if (str_ends_with($member, "-travelling")) { + header("Location: /" . substr($member, 0, strlen($member) - 11)) and die(); } - if ($travelling[$memberID]['travelling'] && !$traveller) { - header("Location: /" . ($systemID === "gdapd" ? "cloudburst" : "raindrops") . "/" . $member) and die(); + if (isset($parts[2]) && $parts[2] === "-" && isset($parts[3])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/includes/member/' . $parts[3] . '.php')) { + global $_MemberPage; + $_MemberPage = $parts[3]; + require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/member/' . $parts[3] . '.php'; + } else { + header("Location: /?error=Page not found: " . $parts[3]) and die(); + } + die(); } + global $_MemberName; + $_MemberName = $member; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/member.php'; } diff --git a/pages/parser.php b/pages/parser.php index e3d70b8..cb07179 100644 --- a/pages/parser.php +++ b/pages/parser.php @@ -1,4 +1,4 @@ -<?php $title = "Message Parser"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> +<?php $title = "Message parser"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> <br> <div class="container"> diff --git a/pages/pleasure.php b/pages/pleasure.php new file mode 100644 index 0000000..db63f5a --- /dev/null +++ b/pages/pleasure.php @@ -0,0 +1,18 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; +if (!$isLoggedIn) header("Location: /login") and die(); + +$emergencyHeader = true; +$title = "Pleasure alert"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; + +?> + +<br> +<div class="container"> + <div id="page-content"> + <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/pleasure.php"; ?> + </div> +</div> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?> diff --git a/pages/prefix.php b/pages/prefix.php index 721baa5..73e9c8a 100644 --- a/pages/prefix.php +++ b/pages/prefix.php @@ -1,4 +1,4 @@ -<?php $title = "Prefix Generator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> +<?php $title = "Prefix generator"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> <br> <div class="container"> diff --git a/pages/relations.php b/pages/relations.php index 54fc4ec..d0f5583 100644 --- a/pages/relations.php +++ b/pages/relations.php @@ -5,9 +5,9 @@ <div id="page-content"> <h2>Relations</h2> <?php foreach (scoreOrderGlobal() as $member): if (count($member["_metadata"]["marefriends"]) > 0 || count($member["_metadata"]["sisters"]) > 0): ?> - <div class="relation" style="background-color:rgba(255, 255, 255, .1);margin-bottom:10px;padding:10px;border-radius:10px;display:grid;grid-template-columns: 1fr 2fr 2fr;"> - <a class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;text-decoration: none;" href="/<?= $member["_system"] === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <div class="relation" style="background-color:rgba(255, 255, 255, .1);margin-bottom:10px;padding:10px;border-radius:10px;display:grid;grid-template-columns: 1.5fr <?= $member["_metadata"]["little"] === 2 ? "2fr 2fr 2fr" : "3fr 3fr" ?>;"> + <a class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;text-decoration: none;" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> <div class="relation-item relation-item-marefriends" style="margin-left:10px;padding:0 20px;"> @@ -16,7 +16,7 @@ <span class="text-muted">None</span> <?php else: ?> <?php $index = 0; foreach ($member["_metadata"]["marefriends"] as $id): $mfSystem = explode("/", $id)[0]; $marefriend = getSystemMember(explode("/", $id)[0], explode("/", $id)[1]); ?> - <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $marefriend["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $marefriend['name'] . ".png") ? "-" . $marefriend['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($marefriend["display_name"] ?? $marefriend["name"]) ?></a><?php if ($index + 2 <= count($member["_metadata"]["marefriends"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; ?> + <a class="member-link" href="/<?= $marefriend["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $marefriend['name'] . ".png") ? "-" . $marefriend['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($marefriend["display_name"] ?? $marefriend["name"]) ?></a><?php if ($index + 2 <= count($member["_metadata"]["marefriends"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; ?> <?php endforeach; ?> <?php endif; ?> </div> @@ -27,10 +27,23 @@ <span class="text-muted">None</span> <?php else: ?> <?php $index = 0; foreach ($member["_metadata"]["sisters"] as $id): $mfSystem = explode("/", $id)[0]; $marefriend = getSystemMember(explode("/", $id)[0], explode("/", $id)[1]); ?> - <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $marefriend["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $marefriend['name'] . ".png") ? "-" . $marefriend['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($marefriend["display_name"] ?? $marefriend["name"]) ?></a><?php if ($index + 2 <= count($member["_metadata"]["sisters"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; ?> + <a class="member-link" href="/<?= $marefriend["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $marefriend['name'] . ".png") ? "-" . $marefriend['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($marefriend["display_name"] ?? $marefriend["name"]) ?></a><?php if ($index + 2 <= count($member["_metadata"]["sisters"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; ?> <?php endforeach; ?> <?php endif; ?> </div> + + <?php if ($member["_metadata"]["little"] === 2): ?> + <div class="relation-item relation-item-sisters" style="padding:0 20px;"> + <b style="padding-right:5px;">Caretakers:</b><span class="list-separator-mobile"><br></span> + <?php if (count($member["_metadata"]["caretakers"]) === 0): ?> + <span class="text-muted">None</span> + <?php else: ?> + <?php $index = 0; foreach ($member["_metadata"]["caretakers"] as $id): $mfSystem = explode("/", $id)[0]; $marefriend = getSystemMember(explode("/", $id)[0], explode("/", $id)[1]); ?> + <a class="member-link" href="/<?= $marefriend["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $marefriend['name'] . ".png") ? "-" . $marefriend['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($marefriend["display_name"] ?? $marefriend["name"]) ?></a><?php if ($index + 2 <= count($member["_metadata"]["sisters"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); $index++; ?> + <?php endforeach; ?> + <?php endif; ?> + </div> + <?php endif; ?> </div> <?php endif; endforeach; ?> </div> @@ -57,9 +70,12 @@ margin-top: 10px; margin-left: 0 !important; padding: 10px 0 !important; - text-align: center; } } + + .relation-item { + text-align: center; + } </style> </div> diff --git a/pages/score.php b/pages/score.php index 0074016..96a9d17 100644 --- a/pages/score.php +++ b/pages/score.php @@ -3,7 +3,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; if (!$isLoggedIn) header("Location: /login") and die(); -$title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +$title = "Score system testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; ?> @@ -16,7 +16,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)); $score = calculateScore($metadata, $member["display_name"] ?? $member["name"]); @@ -37,7 +37,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $name = $member["display_name"] ?? $member["name"]; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)); @@ -45,7 +45,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores[] = [ "name" => $name, - "page" => "/raindrops/" . $member["name"], + "page" => "/" . $member["name"], "score" => $score["total"], "details" => $score ]; @@ -73,7 +73,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)); $score = calculateScore($metadata, $member["display_name"] ?? $member["name"]); @@ -94,7 +94,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $name = $member["display_name"] ?? $member["name"]; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)); @@ -102,7 +102,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores[] = [ "name" => $name, - "page" => "/cloudburst/" . $member["name"], + "page" => "/" . $member["name"], "score" => $score["total"], "details" => $score ]; @@ -129,7 +129,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)); $score = calculateScore($metadata, $member["display_name"] ?? $member["name"]); @@ -138,7 +138,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl } } foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)); $score = calculateScore($metadata, $member["display_name"] ?? $member["name"]); @@ -159,7 +159,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores = []; foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $name = $member["display_name"] ?? $member["name"]; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd-$member[id]-metadata.json"), true)); @@ -167,14 +167,14 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores[] = [ "name" => $name, - "page" => "/raindrops/" . $member["name"], + "page" => "/" . $member["name"], "score" => $score["total"], "details" => $score ]; } } foreach (json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-members.json"), true) as $member) { - if ($member["name"] !== "unknown") { + if ($member["name"] !== "unknown" && $member["name"] !== "fusion" && !str_ends_with($member["name"], "-travelling")) { $name = $member["display_name"] ?? $member["name"]; require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/score.php"; $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc-$member[id]-metadata.json"), true)); @@ -182,7 +182,7 @@ $title = "Score System Testing"; require_once $_SERVER['DOCUMENT_ROOT'] . '/incl $scores[] = [ "name" => $name, - "page" => "/cloudburst/" . $member["name"], + "page" => "/" . $member["name"], "score" => $score["total"], "details" => $score ]; diff --git a/pages/splitting.php b/pages/splitting.php new file mode 100644 index 0000000..fab97f1 --- /dev/null +++ b/pages/splitting.php @@ -0,0 +1,57 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; +if (!$isLoggedIn) header("Location: /login") and die(); + +$title = "Members by splitting date"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; + +?> + +<br> +<div class="container"> + <div id="page-content"> + <h2>Members by splitting date</h2> + <?php $members = scoreOrderGlobal(); uasort($members, function ($a, $b) { + return strtotime($a["created"]) - strtotime($b["created"]); + }); foreach ($members as $member): ?> + <div class="relation" style="background-color:rgba(255, 255, 255, .1);margin-bottom:10px;padding:10px;border-radius:10px;display:grid;grid-template-columns: 1fr 2fr max-content;"> + <a class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;display:flex;align-items:center;text-decoration: none;" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + </a> + + <div class="relation-item" style="display:flex;align-items:center;margin-left:10px;padding:0 20px;"> + Formed at least <?= timeAgo($member["created"]) ?> (<?= date('l j F Y', strtotime($member["created"])) ?>) + </div> + </div> + <?php endforeach; ?> + </div> + + <style> + @media (max-width: 991px) { + .relation { + grid-template-columns: 1fr !important; + } + + .relation-intro { + text-align: center; + border-bottom-left-radius: 0 !important; + border-top-right-radius: 10px; + border-right: none !important; + border-bottom: 1px solid rgba(255, 255, 255, .1); + } + + .relation-item-marefriends { + margin-top: 20px !important; + } + + .relation-item { + margin-top: 10px; + margin-left: 0 !important; + padding: 10px 0 !important; + text-align: center; + } + } + </style> +</div> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?> diff --git a/pages/travelling.php b/pages/travelling.php index 260ea15..affe92e 100644 --- a/pages/travelling.php +++ b/pages/travelling.php @@ -3,18 +3,93 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $isLoggedIn; if (!$isLoggedIn) header("Location: /login") and die(); $travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true); +$app = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true); + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/functions.php"; if (isset($_GET['toggleTravel'])) { if (isset($travelling[$_GET['member']])) { + $id = $_GET['member']; + $member = getSystemMember(getMemberSystem($id), $id); + $system = getMemberSystem($id); + $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$id-metadata.json"), true)); + $travellingSystem = $system === "gdapd" ? "ynmuc" : "gdapd"; + if ($travelling[$_GET['member']]["travelling"]) { + $travelling[$_GET['member']]["travelling"] = false; $travelling[$_GET['member']]["history"][count($travelling[$_GET['member']]["history"]) - 1]["end"] = date("c"); + + // Insert code here to run after a travelling member is DELETED. + // $id is the member ID (e.g. rirgf) + // $member is the member object + // $system is the ID of the system the member comes from + // $travellingSystem is the ID of the system the member visits + // $metadata is the ponies.equestria.horse metadata object + // $travellingMember is the member ID from the other system + if (isset($travelling[$_GET['member']]["pluralkit"])) { + $travellingMember = $travelling[$_GET['member']]["pluralkit"]; + $reqOptions = [ + 'http' => [ + 'method' => "DELETE", + 'header' => "Authorization: " . $app["pluralkit"][$travellingSystem === "gdapd" ? "raindrops" : "cloudburst"] + ] + ]; + + $reqContext = stream_context_create($reqOptions); + + // No actual data is received on DELETE, so we don't even bother trying to collect req response; if it fails it will put a warning in the logs anyway. + sleep(1); + file_get_contents("https://api.pluralkit.me/v2/members/$travellingMember", false, $reqContext); + } } else { $travelling[$_GET['member']]["travelling"] = true; + $travelling[$_GET['member']]["pluralkit"] = null; $travelling[$_GET['member']]["history"][] = [ "start" => date("c"), "end" => null ]; + + // Insert code here to run after a travelling member is ADDED. + // $id is the member ID (e.g. rirgf) + // $member is the member + // $system is the system the member comes from + // $metadata is the ponies.equestria.horse metadata + // $travellingMember is unset here + // Store the travelling member ID in $travelling[$id]['pluralkit'] + $reqOptions = [ + 'http' => [ + 'method' => "POST", + 'header' => "Authorization: " . $app["pluralkit"][$travellingSystem === "gdapd" ? "raindrops" : "cloudburst"] . "\r\n" . + "Content-Type: application/json", + 'content' => json_encode([ + 'name' => "$member[name]-travelling", + 'display_name' => $member["display_name"], + 'color' => $member["color"], + 'birthday' => $member["birthday"], + 'created' => $member["created"], + 'pronouns' => $member["pronouns"], + 'avatar_url' => $member["avatar_url"], + 'banner' => $member["banner"], + 'description' => "**This pony is visiting this system from the " . ($system === "gdapd" ? "Raindrops System" : "Cloudburst System") . ". They are not a permanent member of this system**\n\n$member[description]", + 'proxy_tags' => array_map(function ($i) { + $i["prefix"] = "+" . $i['prefix']; + return $i; + }, $member["proxy_tags"]), + 'privacy' => $member["privacy"] + ]) + ] + ]; + + $reqContext = stream_context_create($reqOptions); + + sleep(1); + $member = json_decode(file_get_contents("https://api.pluralkit.me/v2/members", false, $reqContext), true); + + // Member exists? + if (isset($member)) { + $travelling[$id]['pluralkit'] = $member["id"]; + } } } @@ -23,7 +98,7 @@ if (isset($_GET['toggleTravel'])) { die(); } -$title = "System Travelling"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; +$title = "System travels manager"; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; global $travelling; ?> @@ -44,8 +119,8 @@ global $travelling; <h2>System Travelling</h2> <?php foreach (scoreOrderGlobal() as $member): ?> <div class="relation" style="background-color:rgba(255, 255, 255, .1);margin-bottom:10px;padding:10px;border-radius:10px;display:grid;grid-template-columns: 1fr 2fr max-content;"> - <a class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;display:flex;align-items:center;text-decoration: none;" href="/<?= $member["_system"] === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> - <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> + <a class="relation-intro" style="background-color:rgba(255, 255, 255, .05);border-right:1px solid rgba(255, 255, 255, .1);margin:-10px;padding:10px;border-top-left-radius:10px;border-bottom-left-radius:10px;color: white;display:flex;align-items:center;text-decoration: none;" href="/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . resolveMember($member['name']) . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <?= $member["display_name"] ?? $member["name"] ?> </a> <div class="relation-item" style="display:flex;align-items:center;margin-left:10px;padding:0 20px;"> |