From e5f50fb2ee79d26fec2c14b5e4dff0b5e3b481fa Mon Sep 17 00:00:00 2001
From: RaindropsSys <contact@minteck.org>
Date: Wed, 7 Jun 2023 17:01:59 +0200
Subject: Updated 11 files and added 3 files (automated)

---
 includes/fragments/metadata.inc |  2 ++
 includes/jobs/PKFronters.php    |  9 ++++++---
 includes/jobs/PKMembers.php     |  7 +++++--
 includes/jobs/PKSwitches.php    | 21 ++++++++++++++-------
 includes/jobs/PKSystem.php      |  7 +++++--
 includes/util/banner.inc        |  1 +
 includes/util/functions.inc     | 17 ++++++++++++++---
 includes/util/rainbow.inc       | 11 +++++++++--
 8 files changed, 56 insertions(+), 19 deletions(-)

(limited to 'includes')

diff --git a/includes/fragments/metadata.inc b/includes/fragments/metadata.inc
index a4f1f6d..962e3a0 100644
--- a/includes/fragments/metadata.inc
+++ b/includes/fragments/metadata.inc
@@ -91,6 +91,7 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $member
                     <option <?= $metadata["species"][0] === "batpony" ? "selected" : "" ?> value="batpony">Bat pony</option>
                     <option <?= $metadata["species"][0] === "crystal" ? "selected" : "" ?> value="crystal">Crystal pony</option>
                     <option <?= $metadata["species"][0] === "changeling" ? "selected" : "" ?> value="changeling">Changeling</option>
+                    <option <?= $metadata["species"][0] === "human" ? "selected" : "" ?> value="human">Human</option>
                     <option <?= $metadata["species"][0] === "merpony" ? "selected" : "" ?> value="merpony">Merpony</option>
                 </select>
                 <select class="tooltip-nohelp form-select" style='display:inline-block;filter:invert(1) hue-rotate(180deg);background-image:url("data:image/svg+xml,%3csvg xmlns=&apos;http://www.w3.org/2000/svg&apos; viewBox=&apos;0 0 16 16&apos;%3e%3cpath fill=&apos;none&apos; stroke=&apos;%23000000&apos; stroke-linecap=&apos;round&apos; stroke-linejoin=&apos;round&apos; stroke-width=&apos;2&apos; d=&apos;M2 5l6 6 6-6&apos;/%3e%3c/svg%3e");' name="species[1]">
@@ -102,6 +103,7 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $member
                     <option <?= ($metadata["species"][1] ?? "") === "batpony" ? "selected" : "" ?> value="batpony">Bat pony</option>
                     <option <?= ($metadata["species"][1] ?? "") === "crystal" ? "selected" : "" ?> value="crystal">Crystal pony</option>
                     <option <?= ($metadata["species"][1] ?? "") === "changeling" ? "selected" : "" ?> value="changeling">Changeling</option>
+                    <option <?= ($metadata["species"][1] ?? "") === "human" ? "selected" : "" ?> value="human">Human</option>
                     <option <?= ($metadata["species"][1] ?? "") === "merpony" ? "selected" : "" ?> value="merpony">Merpony</option>
                 </select>
             </div>
diff --git a/includes/jobs/PKFronters.php b/includes/jobs/PKFronters.php
index b1449a9..3c669d5 100644
--- a/includes/jobs/PKFronters.php
+++ b/includes/jobs/PKFronters.php
@@ -23,19 +23,22 @@ if ($app["other"]["id"] === $system) {
     echo("Not using authentication\n");
     $ctx = stream_context_create([
         'http' => [
-            'method' => 'GET'
+            'method' => 'GET',
+            'headers' => "User-Agent: Mozilla/5.0 (+Cold-Haze/1.1)\r\n"
         ]
     ]);
 }
 
 echo("Fetching...\n");
+sleep(1);
 $data = file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/fronters", false, $ctx);
+json_decode($data);
 
-if (trim($data) !== "" && $data !== false) {
+if (trim($data) !== "" && $data !== false && json_last_error() === JSON_ERROR_NONE) {
     echo("Data is valid, saved it\n");
     file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/fronters.json", $data);
 } else {
-    echo("Data is invalid\n");
+    echo("Data is invalid: " . json_last_error_msg() . ": " . $data . "\n");
 }
 
 chdir($_SERVER['DOCUMENT_ROOT'] . "/includes/external/matrix");
diff --git a/includes/jobs/PKMembers.php b/includes/jobs/PKMembers.php
index c6ad897..83a8a7e 100644
--- a/includes/jobs/PKMembers.php
+++ b/includes/jobs/PKMembers.php
@@ -24,15 +24,18 @@ if ($app["other"]["id"] === $system) {
     echo("Not using authentication\n");
     $ctx = stream_context_create([
         'http' => [
-            'method' => 'GET'
+            'method' => 'GET',
+            'headers' => "User-Agent: Mozilla/5.0 (+Cold-Haze/1.1)\r\n"
         ]
     ]);
 }
 
 echo("Fetching...\n");
+sleep(1);
 $data = file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/members", false, $ctx);
+json_decode($data);
 
-if (trim($data) !== "" && $data !== false) {
+if (trim($data) !== "" && $data !== false && json_last_error() === JSON_ERROR_NONE) {
     echo("Data is valid, saved it\n");
     $parsed = json_decode($data, true);
 
diff --git a/includes/jobs/PKSwitches.php b/includes/jobs/PKSwitches.php
index e13118f..99e4a2c 100644
--- a/includes/jobs/PKSwitches.php
+++ b/includes/jobs/PKSwitches.php
@@ -24,43 +24,50 @@ if ($app["other"]["id"] === $system) {
     echo("Not using authentication\n");
     $ctx = stream_context_create([
         'http' => [
-            'method' => 'GET'
+            'method' => 'GET',
+            'headers' => "User-Agent: Mozilla/5.0 (+Cold-Haze/1.1)\r\n"
         ]
     ]);
 }
 
 echo("Fetching...\n");
 echo("     Part 1/6\n");
+sleep(1);
 $switches1 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches", false, $ctx), true);
 
-if (count($switches1) > 0) {
+if (count($switches1) > 0 && json_last_error() === JSON_ERROR_NONE) {
     $oldest = $switches1[count($switches1) - 1]["timestamp"];
 
     echo("     Part 2/6\n");
+    sleep(1);
     $switches2 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches?before=$oldest", false, $ctx), true);
 
-    if (count($switches2) > 0) {
+    if (count($switches2) > 0 && json_last_error() === JSON_ERROR_NONE) {
         $oldest = $switches2[count($switches2) - 1]["timestamp"];
 
         echo("     Part 3/6\n");
+        sleep(1);
         $switches3 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches?before=$oldest", false, $ctx), true);
 
-        if (count($switches3) > 0) {
+        if (count($switches3) > 0 && json_last_error() === JSON_ERROR_NONE) {
             $oldest = $switches3[count($switches3) - 1]["timestamp"];
 
             echo("     Part 4/6\n");
+            sleep(1);
             $switches4 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches?before=$oldest", false, $ctx), true);
 
-            if (count($switches4) > 0) {
+            if (count($switches4) > 0 && json_last_error() === JSON_ERROR_NONE) {
                 $oldest = $switches4[count($switches4) - 1]["timestamp"];
 
                 echo("     Part 5/6\n");
+                sleep(1);
                 $switches5 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches?before=$oldest", false, $ctx), true);
 
-                if (count($switches5) > 0) {
+                if (count($switches5) > 0 && json_last_error() === JSON_ERROR_NONE) {
                     $oldest = $switches5[count($switches5) - 1]["timestamp"];
 
                     echo("     Part 6/6\n");
+                    sleep(1);
                     $switches6 = json_decode(file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system/switches?before=$oldest", false, $ctx), true);
                 } else {
                     $switches6 = [];
@@ -78,7 +85,7 @@ if (count($switches1) > 0) {
     $switches2 = $switches3 = $switches4 = $switches5 = $switches6 = [];
 }
 
-if ($switches1 !== null && $switches2 !== null && $switches3 !== null && $switches4 !== null && $switches5 !== null && $switches6 !== null) {
+if (json_last_error() === JSON_ERROR_NONE && $switches1 !== null && $switches2 !== null && $switches3 !== null && $switches4 !== null && $switches5 !== null && $switches6 !== null) {
     echo("Data is valid, saved it\n");
     file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/switches.json", json_encode([...$switches1, ...$switches2, ...$switches3, ...$switches4, ...$switches5, ...$switches6], JSON_PRETTY_PRINT));
 } else {
diff --git a/includes/jobs/PKSystem.php b/includes/jobs/PKSystem.php
index 6583e4f..117b6ad 100644
--- a/includes/jobs/PKSystem.php
+++ b/includes/jobs/PKSystem.php
@@ -23,15 +23,18 @@ if ($app["other"]["id"] === $system) {
     echo("Not using authentication\n");
     $ctx = stream_context_create([
         'http' => [
-            'method' => 'GET'
+            'method' => 'GET',
+            'headers' => "User-Agent: Mozilla/5.0 (+Cold-Haze/1.1)\r\n"
         ]
     ]);
 }
 
 echo("Fetching...\n");
+sleep(1);
 $data = file_get_contents("https://pluralkit.equestria.dev/v2/systems/$system", false, $ctx);
+json_decode($data);
 
-if (trim($data) !== "" && $data !== false) {
+if (trim($data) !== "" && $data !== false && json_last_error() === JSON_ERROR_NONE) {
     echo("Data is valid, saved it\n");
     file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system/general.json", $data);
 } else {
diff --git a/includes/util/banner.inc b/includes/util/banner.inc
index 6c6b128..01362a0 100644
--- a/includes/util/banner.inc
+++ b/includes/util/banner.inc
@@ -144,6 +144,7 @@ function getMemberBannerData(string $id, string $system, bool $french = false) {
                 "batpony" => $metadata["robot"] ? "Robot bat pony" : (!$metadata["plush"] ? "Bat pony" : "Bat pony plush"),
                 "unicorn" => $metadata["robot"] ? "Robot unicorn" : (!$metadata["plush"] ? "Unicorn" : "Unicorn plush"),
                 "changeling" => "Changeling",
+                "human" => "Human",
                 "merpony" => "Merpony",
                 default => $species . "_" . $metadata["robot"]
             };
diff --git a/includes/util/functions.inc b/includes/util/functions.inc
index 3bc8091..e64bc5a 100644
--- a/includes/util/functions.inc
+++ b/includes/util/functions.inc
@@ -79,10 +79,20 @@ if (!function_exists("getAsset")) {
             }
 
             if ($type === "bodies" || $type === "heads") {
-                if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/" . $type . "/" . $id . ".png")) {
-                    return "/assets/" . $type . "/" . $id . ".png";
+                if (in_array("human", getSystemMember($systemID, $memberID)["_metadata"]["species"])) {
+                    $type = "avatars";
+
+                    if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/" . $type . "/" . $id . ".webp")) {
+                        return "/assets/" . $type . "/" . $id . ".webp";
+                    } else {
+                        return "/error/nofile/?s=$systemID&m=$memberID&t=$type";
+                    }
                 } else {
-                    return "/error/nofile/?s=$systemID&m=$memberID&t=$type";
+                    if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/" . $type . "/" . $id . ".png")) {
+                        return "/assets/" . $type . "/" . $id . ".png";
+                    } else {
+                        return "/error/nofile/?s=$systemID&m=$memberID&t=$type";
+                    }
                 }
             } else {
                 if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/" . $type . "/" . $id . ".webp")) {
@@ -257,6 +267,7 @@ if (!function_exists("getSystemMember")) {
         }
 
         $member["system"] = $member["_system"] = $system;
+        $member["_metadata"] = file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $id . ".json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/" . $id . ".json"), true) : null;
 
         return $member;
     }
diff --git a/includes/util/rainbow.inc b/includes/util/rainbow.inc
index 66ac2fc..dc4d687 100644
--- a/includes/util/rainbow.inc
+++ b/includes/util/rainbow.inc
@@ -40,8 +40,9 @@ function rainbow($hideCloudburst = false): array {
     return $data;
 }
 
-function getMembersByColor($hideCloudburst = false): array {
+function getMembersByColor($hideCloudburst = false, $ignoreHumans = false): array {
     $members = rainbow($hideCloudburst);
+
     uasort($members, function ($a, $b) {
         return $a['hsl'][0] - $b['hsl'][0];
     });
@@ -52,5 +53,11 @@ function getMembersByColor($hideCloudburst = false): array {
         $sorted[] = $data["_data"];
     }
 
-    return $sorted;
+    if ($ignoreHumans) {
+        return array_filter($sorted, function ($i) {
+            return !in_array("human", $i["_metadata"]["species"]);
+        });
+    } else {
+        return $sorted;
+    }
 }
\ No newline at end of file
-- 
cgit