summaryrefslogtreecommitdiff
path: root/includes/banner.php
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-08-21 17:31:56 +0200
committerMinteck <contact@minteck.org>2022-08-21 17:31:56 +0200
commita2df9a69dcc14cb70118cda2ded499055e7ee358 (patch)
tree6dd283e4e9452d38bce81ddaaae49b5335755842 /includes/banner.php
parent84dd0735820b16b60f600284d35183d76547a71f (diff)
downloadpluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.tar.gz
pluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.tar.bz2
pluralconnect-a2df9a69dcc14cb70118cda2ded499055e7ee358.zip
m. update
Diffstat (limited to 'includes/banner.php')
-rw-r--r--includes/banner.php532
1 files changed, 349 insertions, 183 deletions
diff --git a/includes/banner.php b/includes/banner.php
index 8501a61..48bba83 100644
--- a/includes/banner.php
+++ b/includes/banner.php
@@ -1,18 +1,72 @@
<?php
-global $memberData;
-global $memberCommonName;
-global $memberID;
-global $systemCommonName;
-global $systemID;
-global $system;
+require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/pronouns.php";
-$subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystems.json"), true) ?? [];
+$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling.json"), true);
+if (!function_exists("getMiniName")) {
+ function getMiniName(string $name) {
+ $parts = explode(" ", $name);
-function getMember(string $id) {
- global $systemID;
+ if (strlen($parts[0]) > 3 && !str_ends_with($parts[0], "e") && $parts[0] !== "Filly") {
+ if (str_contains($parts[0], "/")) {
+ return explode("/", $parts[0])[0];
+ } else {
+ return $parts[0];
+ }
+ } else {
+ return $name;
+ }
+ }
+}
+
+if (!function_exists("getSystemMember")) {
+ function getSystemMember(string $system, string $id) {
+ $systemID = $system;
+
+ $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true);
+ $member = null;
+
+ foreach ($members as $m) {
+ if ($m["id"] === $id) $member = $m;
+ }
+
+ return $member;
+ }
+}
+
+if (!function_exists("timeAgo")) {
+ function timeAgo($time): string {
+ if (!is_numeric($time)) {
+ $time = strtotime($time);
+ }
+
+ $periods = ["second", "minute", "hour", "day", "week", "month", "year", "age"];
+ $lengths = array("60", "60", "24", "7", "4.35", "12", "100");
+
+ $now = time();
+
+ $difference = $now - $time;
+ if ($difference <= 10 && $difference >= 0) {
+ return $tense = "now";
+ } elseif ($difference > 0) {
+ $tense = "ago";
+ } else {
+ $tense = "later";
+ }
+
+ for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
+ $difference /= $lengths[$j];
+ }
+
+ $difference = round($difference);
- $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true);
+ $period = $periods[$j] . ($difference >1 ? "s" :'');
+ return "{$difference} {$period} {$tense}";
+ }
+}
+
+function _header_getMember(string $id, $system) {
+ $members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-members.json"), true);
$member = null;
foreach ($members as $m) {
@@ -22,7 +76,7 @@ function getMember(string $id) {
return $member;
}
-function memberPartOfSubsystem(array $member) {
+function _header_memberPartOfSubsystem(array $member) {
global $subsystems;
$is = false;
@@ -35,7 +89,7 @@ function memberPartOfSubsystem(array $member) {
return $is;
}
-function getSubsystemFromMember(array $member) {
+function _header_getSubsystemFromMember(array $member) {
global $subsystems;
$ss = false;
@@ -48,179 +102,291 @@ function getSubsystemFromMember(array $member) {
return $ss;
}
-?>
-
-<style>
- .bg-light, .bg-light * {
- color: black !important;
- }
-</style>
-<div id="system-info" style="border:1px solid #<?= $memberData["color"] ?>;background:rgba(255, 255, 255, .1);border-radius:10px;display:grid;grid-template-columns: 128px 1fr;">
- <div style="margin:10px;width:100%;display:flex;align-items: center;justify-content: center;">
- <img id="member-icon" src="<?= $memberData['avatar_url'] ?>" alt="" style="height:128px;border-radius:5px;">
- </div>
- <div style="padding:10px 10px 10px 20px;text-align:center;">
- <h3 style="margin-bottom:0;">
- <?= $memberCommonName ?>
- </h3>
- <div style="margin-bottom:0.5rem;">
- <?php if ($metadata["host"] ?? false): ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>This pony is the one who fronts the most often in their system." class="badge rounded-pill bg-primary">Host</span>
- <?php endif; ?>
- <?php if ($metadata["fictive"] ?? false): ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>This pony is based on the personality, look and behavior of a character that is fictional in this world." class="badge rounded-pill bg-info">Fictive</span>
- <?php endif; ?>
- <?php if (($metadata["little"] ?? 0) === 2): ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Little</b><br>This pony is mental younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Little</span>
- <?php endif; ?>
- <?php if (($metadata["little"] ?? 0) === 1): ?>
- <?php if ($metadata["regression"] !== null && $metadata["regression"] !== false): $regression = getMember($metadata["regression"]); ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>This pony is capable of regressing their mental age, which causes them to become <?= getMiniName($regression["display_name"] ?? $regression["name"]) ?>, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regresses into <a href="/<?= $system ?>/<?= $regression["name"] ?>"><?= getMiniName($regression["display_name"] ?? $regression["name"]) ?></a></span>
- <?php else: ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>This pony is capable of regressing their mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regressor</span>
- <?php endif; ?>
- <?php endif; ?>
- <?php if ($metadata["median"] !== null && $metadata["median"] !== false): $source = getMember($metadata["median"]) ?>
- <?php if ($metadata["little"] > 0): ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressed</b><br>This pony has regressed their mental age, making them <?= getMiniName($memberData["display_name"] ?? $memberData["name"]) ?> instead of <?= getMiniName($source["display_name"] ?? $source["name"]) ?>, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-warning">Age regressed from <a href="/<?= $system ?>/<?= $source["name"] ?>"><?= getMiniName($source["display_name"] ?? $source["name"]) ?></a></span>
- <?php else: ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facet</b><br>This pony is a facet of <?= getMiniName($source["display_name"] ?? $source["name"]) ?>, meaning they are not totally independent from <?= getMiniName($source["display_name"] ?? $source["name"]) ?>." class="badge rounded-pill bg-light">Facet of <a href="/<?= $system ?>/<?= $source["name"] ?>"><?= getMiniName($source["display_name"] ?? $source["name"]) ?></a></span>
- <?php endif; ?>
- <?php endif; ?>
- <?php if ($metadata["not_talking"] ?? false): ?>
- <span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Not talking</b><br>Although they are present in the system, this pony does not want to communicate with other members." class="badge rounded-pill bg-danger">Not talking</span>
- <?php endif; ?>
- <?php if (!($metadata["fictive"] ?? false) && !($metadata["host"] ?? false) && !($metadata["little"] ?? false) && !($metadata["not_talking"] ?? false)): ?>
- &nbsp;
- <?php endif; ?>
- </div>
- <div style="display:grid;grid-template-columns: repeat(<?php if (!$metadata["median"]): ?>5<?php else: ?>4<?php endif; ?>, 1fr);" id="member-card">
- <span>
- <b>Prefixes: </b>
- <?php $index = 0; foreach ($memberData['proxy_tags'] as $proxy): ?>
- <code style="color: white;"><?= $proxy["prefix"] ?><?= $proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : "" ?></code><?php if ($index + 2 <= count($memberData["proxy_tags"])) echo(", "); ?>
- <?php $index++; endforeach; ?>
- </span>
- <span>
- <b>Pronouns: </b>
- <?= $memberData["pronouns"] ?>
- </span>
- <?php if (!$metadata["median"]): ?>
- <span>
- <b>Last fronted: </b>
- <?php
-
- $fronters = array_map(function ($item) {
- return $item["id"];
- }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["members"]);
-
- if (in_array($memberID, $fronters)) {
- echo("Right now<br>(started <span data-bs-toggle=\"tooltip\" title=\"" . date("D j M Y, G:i:s (e)", strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) . "\">" . trim(timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) . "</span>)");
+function getMemberBannerData(string $id, string $system) {
+ global $subsystems;
+ global $travelling;
+
+ $subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystems.json"), true) ?? [];
+
+ $member = getSystemMember($system, $id);
+ $metadata = parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-$id-metadata.json"), true));
+
+ $prn = getMemberPronouns($member['pronouns']);
+
+ $prefixes = [];
+ foreach ($member['proxy_tags'] as $proxy) {
+ if ($travelling[$member['id']]["travelling"]) {
+ $prefixes[] = "+" . $proxy["prefix"] . ($proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : "");
+ } else {
+ $prefixes[] = $proxy["prefix"] . ($proxy["suffix"] !== "" && $proxy["suffix"] !== null ? "..." . $proxy["suffix"] : "");
+ }
+ }
+
+ $lastFronted = null;
+ if (!$metadata["median"]) {
+ $fronters = array_map(function ($item) {
+ return $item["id"];
+ }, json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["members"]);
+
+ if (in_array($id, $fronters)) {
+ $lastFronted = [
+ 'now' => true,
+ 'relative' => timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"]),
+ 'absolute' => date("D j M Y, G:i:s (e)", strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"])),
+ 'timestamp' => strtotime(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-fronters.json"), true)["timestamp"]),
+ 'duration' => [
+ 'seconds' => null,
+ 'pretty' => null
+ ]
+ ];
+ } else {
+ $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-switches.json"), true);
+
+ $thisMember = array_filter($switches, function ($item) {
+ global $memberData;
+ return in_array($memberData["id"], $item["members"]);
+ });
+
+ $thisMember = array_values($thisMember);
+ $frontingEnd = null;
+
+ if (count($thisMember) > 0) {
+ $thisIndex = array_search($thisMember[0], $switches);
+
+ $frontingStart = $thisMember[0];
+ $frontingEnd = $switches[$thisIndex - 1];
+ }
+
+ if ($frontingEnd !== null && isset($frontingStart)) {
+ $seconds = (strtotime($frontingEnd["timestamp"]) - strtotime($frontingStart["timestamp"]));
+
+ $lastFronted = [
+ 'now' => false,
+ 'relative' => timeAgo($frontingEnd["timestamp"]),
+ 'absolute' => date("D j M Y, G:i:s (e)", strtotime($frontingEnd["timestamp"])),
+ 'timestamp' => strtotime($frontingEnd["timestamp"]),
+ 'duration' => [
+ 'seconds' => $seconds,
+ 'pretty' => $seconds . " seconds"
+ ]
+ ];
+ if ($seconds > 60) {
+ if ($seconds > 3600) {
+ $lastFronted['duration']['pretty'] = round($seconds / 3600) . " hours";
} else {
- $switches = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-switches.json"), true);
-
- $thisMember = array_filter($switches, function ($item) {
- global $memberData;
- return in_array($memberData["id"], $item["members"]);
- });
- $thisMember = array_values($thisMember);
- $thisIndex = array_search($thisMember[0], $switches);
-
- $frontingStart = $thisMember[0];
- $frontingEnd = $switches[$thisIndex - 1];
-
- if ($frontingEnd === null) {
- echo("A long time ago<br>-");
- } else {
- echo('<span data-bs-toggle="tooltip" title="' . date("D j M Y, G:i:s (e)", strtotime($frontingEnd["timestamp"])) . '">' . timeAgo($frontingEnd["timestamp"]) . '</span>');
-
- $seconds = (strtotime($frontingEnd["timestamp"]) - strtotime($frontingStart["timestamp"]));
- if ($seconds > 60) {
- if ($seconds > 3600) {
- echo("<br>(for " . round($seconds / 3600) . " hours)");
- } else {
- echo("<br>(for " . round($seconds / 60) . " minutes)");
- }
- } else {
- echo("<br>(for " . $seconds . " seconds)");
- }
- }
+ $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes";
}
-
- ?>
- </span>
- <?php endif; ?>
- <span>
- <span style="vertical-align: middle;position:relative;top:-5px;"><b>Species: </b></span>
- <?php foreach ($metadata["species"] ?? [] as $species): ?>
- <img data-bs-toggle="tooltip" title="<?php switch ($species) {
- case "earth":
- echo "Earth pony";
- break;
-
- case "alicorn":
- echo "Alicorn";
- break;
-
- case "crystal":
- echo "Crystal pony";
- break;
-
- case "pegasus":
- echo "Pegasus";
- break;
-
- case "batpony":
- echo "Bat pony";
- break;
-
- case "unicorn":
- echo "Unicorn";
- break;
-
- default:
- echo $species;
- break;
- } ?>" style="width:32px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/<?= $species ?>.png" alt="<?= $species ?>">
- <?php endforeach; ?>
- </span>
- <span>
- <b>System: </b><a class="member-link" href="/<?= $system ?>"><img style="width:24px;border-radius:5px;" src="/assets/uploads/<?= $system ?>.png"> <?= getMiniName($systemCommonName) ?></a>
- <?php if (memberPartOfSubsystem($memberData) && getSubsystemFromMember($memberData)["source_type"] !== "member"): $subsystem = getSubsystemFromMember($memberData); ?>
- <br><b>Subsystem: </b><a class="member-link" href="/<?= $system ?>/-/subsystem/<?= $subsystem["source"] ?>"><img style="width:24px;border-radius:5px;" src="/assets/uploads/ss-<?= $subsystem['source'] ?>.png"> <?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json"), true)["name"] : $subsystem["source"] ?></a>
- <?php endif; ?>
- </span>
- </div>
- <div style="display:grid;grid-template-columns: repeat(2, 1fr);margin-top:5px;">
- <?php
-
- if ($memberData["name"] === "scootaloo") {
- if ((int)date('j') % 2 === 0) {
- $metadata["marefriends"] = array_reverse($metadata["marefriends"]);
}
}
+ }
+ }
+
+ $speciesList = [];
+ foreach ($metadata["species"] ?? [] as $species) {
+ $name = match ($species) {
+ "earth" => $metadata["robot"] ? "Robot earth pony" : "Earth pony",
+ "alicorn" => $metadata["robot"] ? "Robot alicorn" : "Alicorn",
+ "crystal" => $metadata["robot"] ? "Robot crystal pony" : "Crystal pony",
+ "pegasus" => $metadata["robot"] ? "Robot pegasus" : "Pegasus",
+ "batpony" => $metadata["robot"] ? "Robot bat pony" : "Bat pony",
+ "unicorn" => $metadata["robot"] ? "Robot unicorn" : "Unicorn",
+ default => $species . "_" . $metadata["robot"]
+ };
+
+ $speciesList[] = [
+ "id" => $species,
+ "name" => $name,
+ "robot" => $metadata["robot"],
+ "icon" => $species . ($metadata["robot"] ? "-robot" : "") . ".png"
+ ];
+ }
+
+ $systemData = [];
+ $systemData['page'] = "/" . ($system === "gdapd" ? "raindrops" : "cloudburst");
+ $systemData['icon'] = ($system === "gdapd" ? "raindrops" : "cloudburst") . ".png";
+ $systemData['name'] = $system === "gdapd" ? "Raindrops" : "Cloudburst";
+ $systemData['full_name'] = $system === "gdapd" ? "Raindrops System" : "Cloudburst System";
+ $systemData['subsystem'] = null;
+ $systemData['temporary'] = false;
+
+ if (_header_memberPartOfSubsystem($member) && _header_getSubsystemFromMember($member)["source_type"] !== "member") {
+ $subsystem = _header_getSubsystemFromMember($member);
+ $systemData['subsystem'] = [
+ "page" => $systemData['page'] . "/-/subsystem/" . $subsystem["source"],
+ "icon" => "ss-$subsystem[source].png",
+ "name" => file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystem-$subsystem[source].json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$system-subsystem-$subsystem[source].json"), true)["name"] : $subsystem["source"]
+ ];
+ }
+
+ if ($travelling[$member['id']]["travelling"]) {
+ $systemData['page'] = "/" . ($system === "gdapd" ? "cloudburst" : "raindrops");
+ $systemData['icon'] = ($system === "gdapd" ? "cloudburst" : "raindrops") . ".png";
+ $systemData['name'] = $system === "gdapd" ? "Cloudburst" : "Raindrops";
+ $systemData['full_name'] = $system === "gdapd" ? "Cloudburst System" : "Raindrops System";
+ $systemData['subsystem'] = null;
+ $systemData['temporary'] = true;
+ }
+
+ $marefriends = [];
+ foreach ($metadata["marefriends"] as $marefriend) {
+ $mfSystem = explode("/", $marefriend)[0];
+ $mfMemberID = explode("/", $marefriend)[1];
+ $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) {
+ return $item["id"] === $mfMemberID;
+ });
+ sort($mfMember);
+ $mfMember = $mfMember[0];
+
+ $marefriends[] = [
+ "id" => $marefriend,
+ "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]),
+ "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png",
+ "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]),
+ "full_name" => $mfMember["display_name"] ?? $mfMember["name"]
+ ];
+ }
+
+ $sisters = [];
+ foreach ($metadata["sisters"] as $marefriend) {
+ $mfSystem = explode("/", $marefriend)[0];
+ $mfMemberID = explode("/", $marefriend)[1];
+ $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) {
+ return $item["id"] === $mfMemberID;
+ });
+ sort($mfMember);
+ $mfMember = $mfMember[0];
+
+ $sisters[] = [
+ "id" => $marefriend,
+ "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]),
+ "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png",
+ "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]),
+ "full_name" => $mfMember["display_name"] ?? $mfMember["name"]
+ ];
+ }
+
+ $caretakers = null;
+
+ if ($metadata["little"] === 2) {
+ $caretakers = [];
+ foreach ($metadata["caretakers"] as $marefriend) {
+ $mfSystem = explode("/", $marefriend)[0];
+ $mfMemberID = explode("/", $marefriend)[1];
+ $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) use ($mfMemberID) {
+ return $item["id"] === $mfMemberID;
+ });
+ sort($mfMember);
+ $mfMember = $mfMember[0];
+
+ $caretakers[] = [
+ "id" => $marefriend,
+ "link" => "/" . ($mfSystem === "gdapd" ? "raindrops" : "cloudburst") . "/" . ($mfMember["name"]),
+ "icon" => "pt" . (file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "") . ".png",
+ "name" => getMiniName($mfMember["display_name"] ?? $mfMember["name"]),
+ "full_name" => $mfMember["display_name"] ?? $mfMember["name"]
+ ];
+ }
+ }
+
+ $badges = [];
+
+ if ($metadata["host"] ?? false) {
+ if (!$travelling[$member['id']]["travelling"]) {
+ $badges[] = [
+ "id" => "host",
+ "color" => "primary",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Host</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' the one who fronts the most often in ' . $prn["possessive_det"] . ' system." class="badge rounded-pill bg-primary">Host</span>'
+ ];
+ }
+ }
+
+ if ($metadata["fictive"] ?? false) {
+ $badges[] = [
+ "id" => "fictive",
+ "color" => "info",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Fictive</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' based on the personality, look and behavior of a character that is fictional in this world." class="badge rounded-pill bg-info">Fictive</span>'
+ ];
+ }
+
+ if ($metadata["protector"] ?? false) {
+ $badges[] = [
+ "id" => "protector",
+ "color" => "black",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Protector</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' a protector in the system and will front when somepony cannot handle it anymore." class="badge rounded-pill bg-black">Protector</span>'
+ ];
+ }
+
+ if (($metadata["little"] ?? 0) === 2) {
+ $badges[] = [
+ "id" => "little",
+ "color" => "success",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Little</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' mentally younger, and therefore behaves and feels younger than the body is." class="badge rounded-pill bg-success">Little</span>'
+ ];
+ }
+
+ if (($metadata["little"] ?? 0) === 3) {
+ $badges[] = [
+ "id" => "younger",
+ "color" => "dark",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Younger</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' younger than the body, but not young enough to be classified as a little." class="badge rounded-pill bg-dark">Younger</span>'
+ ];
+ }
+
+ if (($metadata["little"] ?? 0) === 1) {
+ if ($metadata["regression"] !== null && $metadata["regression"] !== false) {
+ $regression = _header_getMember($metadata["regression"], $system);
+ $badges[] = [
+ "id" => "regressor_median",
+ "color" => "secondary",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' capable of regressing ' . $prn["possessive_det"] . ' mental age, which causes ' . $prn["object"] . ' to become ' . (getMiniName($regression["display_name"] ?? $regression["name"])) . ', temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regresses into <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $regression["name"] . '">'. (getMiniName($regression["display_name"] ?? $regression["name"])) . '</a></span>'
+ ];
+ } else {
+ $badges[] = [
+ "id" => "regressor",
+ "color" => "secondary",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressor</b><br>' . ucfirst($prn["subjective"]) . ' ' . ($prn["third"] ? "is" : "are") . ' capable of regressing ' . $prn["possessive_det"] . ' mental age, temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regressor</span>'
+ ];
+ }
+ }
+
+ if ($metadata["median"] !== null && $metadata["median"] !== false) {
+ $source = _header_getMember($metadata["median"], $system);
+ if ($metadata["little"] > 0) {
+ $badges[] = [
+ "id" => "regressed",
+ "color" => "warning",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Age regressed</b><br>' . ucfirst($prn["subjective"]) . ' has regressed ' . $prn["possessive_det"] . ' mental age, making ' . $prn["object"] . ' ' . getMiniName($member["display_name"] ?? $member["name"]) . ' instead of ' . (getMiniName($source["display_name"] ?? $source["name"])) . ', temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-warning">Age regressed from <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $source["name"] . '">' . (getMiniName($source["display_name"] ?? $source["name"])) . '</a></span>'
+ ];
+ } else {
+ $badges[] = [
+ "id" => "facet",
+ "color" => "light",
+ "html" => '<span data-bs-toggle="tooltip" data-bs-html="true" title="<b>Facet</b><br>' . ucfirst($prn["subjective"]) . ' is a facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . ', meaning ' . $prn["subjective"] . ' ' . ($prn["third"] ? "is" : "are") . ' not totally independent of ' . getMiniName($source["display_name"] ?? $source["name"]) . '." class="badge rounded-pill bg-light">Facet of <a href="/' . ($system === "gdapd" ? "raindrops" : "cloudburst") . '/' . $source["name"] . '">' . getMiniName($source["display_name"] ?? $source["name"]) . '</a></span>'
+ ];
+ }
+ }
- ?>
- <span>
- <b>Marefriends: </b><?= count($metadata["marefriends"]) > 1 ? '<span class="list-separator-mobile"><br></span>' : '' ?>
- <?php $index = 0; foreach ($metadata["marefriends"] as $marefriend): $mfSystem = explode("/", $marefriend)[0]; $mfMemberID = explode("/", $marefriend)[1]; $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) {
- global $mfMemberID;
- return $item["id"] === $mfMemberID;
- }); sort($mfMember); $mfMember = $mfMember[0]; ?>
- <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($mfMember["display_name"] ?? $mfMember["name"]) ?></a><?php if ($index + 2 <= count($metadata["marefriends"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); ?>
- <?php $index++; endforeach; ?>
- <?php if (count($metadata["marefriends"]) === 0): ?>-<?php endif; ?>
- </span>
- <span>
- <b>Sisters: </b><?= count($metadata["sisters"]) > 1 ? '<span class="list-separator-mobile"><br></span>' : '' ?>
- <?php $index = 0; foreach ($metadata["sisters"] as $marefriend): $mfSystem = explode("/", $marefriend)[0]; $mfMemberID = explode("/", $marefriend)[1]; $mfMember = array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$mfSystem-members.json"), true), function ($item) {
- global $mfMemberID;
- return $item["id"] === $mfMemberID;
- }); sort($mfMember); $mfMember = $mfMember[0]; ?>
- <a class="member-link" href="/<?= $mfSystem === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $mfMember["name"] ?>"><img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $mfMember['name'] . ".png") ? "-" . $mfMember['name'] : "" ?>.png" style="width:24px;"> <?= getMiniName($mfMember["display_name"] ?? $mfMember["name"]) ?></a><?php if ($index + 2 <= count($metadata["sisters"])) echo('<span class="list-separator-desktop">, </span><span class="list-separator-mobile"><br></span>'); ?>
- <?php $index++; endforeach; ?>
- <?php if (count($metadata["sisters"]) === 0): ?>-<?php endif; ?>
- </span>
- </div>
- </div>
-</div> \ No newline at end of file
+ return [
+ 'id' => $member['name'],
+ 'color' => $member["color"] ?? "000000",
+ 'icon' => [
+ "online" => $member['avatar_url'],
+ "offline" => "pf-$system-$id.webp"
+ ],
+ 'median' => $metadata["median"],
+ 'little' => $metadata["little"] === 2,
+ 'name' => $member["display_name"] ?? $member["name"],
+ 'badges' => $badges,
+ 'prefixes' => $prefixes,
+ 'pronouns' => getTooltipsFromMark($member["pronouns"]) ?? "<span data-bs-toggle='tooltip' title='Pronouns not specified' class='text-muted'>she/her</span>",
+ 'pronouns_usage' => $prn,
+ 'last_fronted' => $lastFronted,
+ 'species' => $speciesList,
+ 'system' => $systemData,
+ 'relations' => [
+ 'marefriends' => $marefriends,
+ 'sisters' => $sisters,
+ 'caretakers' => $caretakers
+ ]
+ ];
+} \ No newline at end of file