From a2df9a69dcc14cb70118cda2ded499055e7ee358 Mon Sep 17 00:00:00 2001 From: Minteck Date: Sun, 21 Aug 2022 17:31:56 +0200 Subject: m. update --- includes/banner.php | 532 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 349 insertions(+), 183 deletions(-) (limited to 'includes/banner.php') 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 @@ 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; } -?> - - -
;background:rgba(255, 255, 255, .1);border-radius:10px;display:grid;grid-template-columns: 128px 1fr;"> -
- -
-
-

- -

-
- - Host - - - Fictive - - - Little - - - - , temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-secondary">Age regresses into "> - - Age regressor - - - - 0): ?> - instead of , temporarily behaving and feeling younger than the body is." class="badge rounded-pill bg-warning">Age regressed from "> - - , meaning they are not totally independent from ." class="badge rounded-pill bg-light">Facet of "> - - - - Not talking - - -   - -
-
54, 1fr);" id="member-card"> - - Prefixes: - - - - - - Pronouns: - - - - - Last fronted: - (started " . trim(timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-fronters.json"), true)["timestamp"])) . ")"); +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
-"); - } else { - echo('' . timeAgo($frontingEnd["timestamp"]) . ''); - - $seconds = (strtotime($frontingEnd["timestamp"]) - strtotime($frontingStart["timestamp"])); - if ($seconds > 60) { - if ($seconds > 3600) { - echo("
(for " . round($seconds / 3600) . " hours)"); - } else { - echo("
(for " . round($seconds / 60) . " minutes)"); - } - } else { - echo("
(for " . $seconds . " seconds)"); - } - } + $lastFronted['duration']['pretty'] = round($seconds / 60) . " minutes"; } - - ?> -
- - - Species: - - " style="width:32px;vertical-align: middle;position:relative;top:-5px;" src="/assets/species/.png" alt=""> - - - - System: - -
Subsystem: "> - -
-
-
- $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" => 'Host' + ]; + } + } + + if ($metadata["fictive"] ?? false) { + $badges[] = [ + "id" => "fictive", + "color" => "info", + "html" => 'Fictive' + ]; + } + + if ($metadata["protector"] ?? false) { + $badges[] = [ + "id" => "protector", + "color" => "black", + "html" => 'Protector' + ]; + } + + if (($metadata["little"] ?? 0) === 2) { + $badges[] = [ + "id" => "little", + "color" => "success", + "html" => 'Little' + ]; + } + + if (($metadata["little"] ?? 0) === 3) { + $badges[] = [ + "id" => "younger", + "color" => "dark", + "html" => 'Younger' + ]; + } + + 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" => 'Age regresses into '. (getMiniName($regression["display_name"] ?? $regression["name"])) . '' + ]; + } else { + $badges[] = [ + "id" => "regressor", + "color" => "secondary", + "html" => 'Age regressor' + ]; + } + } + + if ($metadata["median"] !== null && $metadata["median"] !== false) { + $source = _header_getMember($metadata["median"], $system); + if ($metadata["little"] > 0) { + $badges[] = [ + "id" => "regressed", + "color" => "warning", + "html" => 'Age regressed from ' . (getMiniName($source["display_name"] ?? $source["name"])) . '' + ]; + } else { + $badges[] = [ + "id" => "facet", + "color" => "light", + "html" => 'Facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . '' + ]; + } + } - ?> - - Marefriends: 1 ? '
' : '' ?> - - /">.png" style="width:24px;"> ,

'); ?> - - - - - - Sisters: 1 ? '
' : '' ?> - - /">.png" style="width:24px;"> ,

'); ?> - - - - -
-
-
\ 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"]) ?? "she/her", + 'pronouns_usage' => $prn, + 'last_fronted' => $lastFronted, + 'species' => $speciesList, + 'system' => $systemData, + 'relations' => [ + 'marefriends' => $marefriends, + 'sisters' => $sisters, + 'caretakers' => $caretakers + ] + ]; +} \ No newline at end of file -- cgit