0 || $metadata["birth"]["age"] === -1) {
if ($metadata["birth"]["age"] === -1) {
return "Eternal";
} elseif ($metadata["birth"]["age"] <= 0) {
return "-";
} elseif (is_numeric($metadata["birth"]["age"])) {
return $metadata["birth"]["age"] . "* years old";
}
} else {
if ($metadata["birth"]["year"] <= 1900) {
return "-";
} else {
$age = (int)date('Y') - $metadata["birth"]["year"] + (strtotime(date('Y') . "-" . $metadata["birth"]["date"]) <= time() ? 0 : -1);
return $age . " years old";
}
}
return "-";
}
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/session.inc"; global $isLoggedIn; global $lang; global $pages; global $isLowerLoggedIn;
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/functions.inc";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/util/Parsedown.php"; $Parsedown = new Parsedown();
$travelling = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/travelling/travelling.json"), true);
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) {
if ($m["id"] === $id) $member = $m;
}
return $member;
}
function getMemberBannerData(string $id, string $system, bool $french = false) {
global $travelling;
global $isLoggedIn;
global $isLowerLoggedIn;
global $lang;
global $Parsedown;
global $use2023UI;
$french = $lang["_french"];
$member = getSystemMember($system, $id);
$metadata = file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$id.json") ? parseMetadata(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/metadata/$id.json"), true)) : parseMetadata([
// FIXME: This doesn't work now that bitset functionality is removed
"bitset" => 4196352,
"regression" => null,
"median" => null,
"marefriends" => [],
"sexfriends" => [],
"sisters" => [],
"caretakers" => []
]);
$prefixes = [];
foreach ($member['proxy_tags'] as $proxy) {
if (isset($travelling[$member['id']]) && $travelling[$member['id']]["travelling"]) {
if (isset($travelling[$member['id']]['equestria']) && $travelling[$member['id']]['equestria']) {
$prefixes[] = null;
} else {
$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 . ($french ? " secondes" : " seconds")
]
];
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";
}
}
}
}
}
}
$speciesList = [];
foreach ($metadata["species"] ?? [] as $species) {
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"),
"changeling" => "Changelin",
"merpony" => "Poney sirène",
"kirin" => "Kirin",
"deer" => "Deer",
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"),
"changeling" => "Changeling",
"human" => "Human",
"merpony" => "Merpony",
"kirin" => "Kirin",
"deer" => "Deer",
default => $species . "_" . $metadata["robot"]
};
}
$speciesList[] = [
"id" => $species,
"name" => $name,
"robot" => $metadata["robot"],
"plush" => $metadata["plush"],
"icon" => $species . ($metadata["robot"] ? "-robot" : ($metadata["plush"] ? "-plush" : "")) . ".png"
];
}
$app = $GLOBALS["ColdHazeApp"];
$systemData = [];
$systemData['page'] = "/" . ($system === "gdapd" ? "raindrops" : ($system === $app["other"]["id"] ? $app["other"]["slug"] : ($system === "hrbom" ? "moonglow" : "cloudburst")));
$systemData['icon'] = getAsset($system);
$systemData['name'] = $system === "gdapd" ? "Raindrops" : ($system === $app["other"]["id"] ? $app["other"]["short"] : ($system === "hrbom" ? "Moonglow" : "Cloudburst"));
$systemData['full_name'] = $system === "gdapd" ? "Raindrops System" : ($system === $app["other"]["id"] ? $app["other"]["name"] : ($system === "hrbom" ? "Moonglow" : "Cloudburst System"));
$systemData['temporary'] = false;
if (isset($travelling[$member['id']]) && $travelling[$member['id']]["travelling"] && !$travelling[$member['id']]["equestria"]) {
$systemData['page'] = "/" . ($system === "gdapd" ? "cloudburst" : "raindrops");
$systemData['icon'] = getAsset($system === "gdapd" ? "ynmuc" : "gdapd");
$systemData['name'] = $system === "gdapd" ? "Cloudburst" : "Raindrops";
$systemData['full_name'] = $system === "gdapd" ? "Cloudburst System" : "Raindrops System";
$systemData['temporary'] = true;
}
if (isset($travelling[$member['id']]) && $travelling[$member['id']]["travelling"] && $travelling[$member['id']]["equestria"]) {
$systemData['page'] = null;
$systemData['icon'] = "/assets/logo/equestria.png";
$systemData['name'] = "Equestria";
$systemData['full_name'] = "Equestria";
$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];
if (!($mfSystem === $app["other"]["id"] && !$isLoggedIn && !$isLowerLoggedIn)) $marefriends[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => $mfMember["display_name"] ?? $mfMember["name"],
"full_name" => $mfMember["display_name"] ?? $mfMember["name"]
];
}
$sexfriends = null;
if ($isLoggedIn) {
$sexfriends = [];
foreach ($metadata["sexfriends"] 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];
if (!($mfSystem === $app["other"]["id"] && !$isLoggedIn && !$isLowerLoggedIn)) $sexfriends[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => $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];
if (!($mfSystem === $app["other"]["id"] && !$isLoggedIn && !$isLowerLoggedIn)) $sisters[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => $mfMember["display_name"] ?? $mfMember["name"],
"full_name" => $mfMember["display_name"] ?? $mfMember["name"]
];
}
$friends = [];
foreach ($metadata["friends"] ?? [] 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];
if (!($mfSystem === $app["other"]["id"] && !$isLoggedIn && !$isLowerLoggedIn)) $friends[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => $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];
if (!($mfSystem === $app["other"]["id"] && !$isLoggedIn && !$isLowerLoggedIn)) $caretakers[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => $mfMember["display_name"] ?? $mfMember["name"],
"full_name" => $mfMember["display_name"] ?? $mfMember["name"]
];
}
}
$badges = [];
if ($metadata["fictive"] ?? false) {
$badges[] = [
"id" => "fictive",
"color" => "info",
"html" => ' Equestrian'
];
}
if ($metadata["fictive2"] ?? false) {
$badges[] = [
"id" => "fictive2",
"color" => "d63384",
"html" => ' Fictive'
];
}
if ($metadata["persecutor"] ?? false) {
$badges[] = [
"id" => "persecutor",
"color" => "danger",
"html" => 'Persecutor'
];
}
if ($metadata["less_frequent"] ?? false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#6610f2",
"html" => 'Fronts less often'
];
}
if ($metadata["nonverbal"] ?? false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#20c997",
"html" => 'Non verbal IRL'
];
}
if ($member["name"] === "fusion") {
$badges[] = [
"id" => "fusion",
"color" => "333333",
"html" => 'Fusion'
];
}
if (($metadata["host"] ?? false)) {
$badges[] = [
"id" => "host",
"color" => "fc6735",
"html" => 'Host'
];
}
if (($metadata["leader"] ?? false)) {
$badges[] = [
"id" => "leader",
"color" => "d6a833",
"html" => 'Leader'
];
}
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 (($isLoggedIn || $isLowerLoggedIn) && isset($metadata["alcohol"]) && $metadata["alcohol"] !== false) {
$badges[] = [
"id" => "alcohol",
"color" => "secondary",
"html" => 'Alcohol'
];
}
return [
'id' => $member['name'],
'color' => $member["color"] ?? "000000",
'icon' => [
"online" => getAsset($system, $member["id"]),
"offline" => "pf-$system-$id.webp"
],
'median' => $metadata["median"],
'little' => $metadata["little"] >= 2,
'name' => $member["display_name"] ?? $member["name"],
'gender' => isset($metadata["show_gender"]) && $metadata["show_gender"] ? (isset($metadata["gender"]) && trim($metadata["gender"]) !== "" ? $Parsedown->text($metadata["gender"]) : "Agender") : null,
'badges' => $badges,
'prefixes' => $prefixes,
'pronouns' => isset($member["pronouns"]) && trim($member["pronouns"]) !== "" ? $member["pronouns"] : "they/them",
'pronouns_usage' => getMemberPronouns($member['pronouns']),
'last_fronted' => $lastFronted,
'species' => $speciesList,
'system' => $systemData,
'age' => getAge($metadata),
'relations' => [
'marefriends' => $marefriends ?? [],
'sexfriends' => $sexfriends ?? null,
'sisters' => $sisters ?? [],
'caretakers' => $caretakers ?? [],
'friends' => $friends ?? []
]
];
}