4196352,
"regression" => null,
"median" => null,
"marefriends" => [],
"sexfriends" => [],
"sisters" => [],
"caretakers" => []
]);
$prefixes = [];
foreach ($member['proxy_tags'] as $proxy) {
if ($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",
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",
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 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
$systemData = [];
$systemData['page'] = "/" . ($system === "gdapd" ? "raindrops" : ($system === $app["other"]["id"] ? $app["other"]["slug"] : "cloudburst"));
$systemData['icon'] = getAsset($system);
$systemData['name'] = $system === "gdapd" ? "Raindrops" : ($system === $app["other"]["id"] ? $app["other"]["short"] : "Cloudburst");
$systemData['full_name'] = $system === "gdapd" ? "Raindrops System" : ($system === $app["other"]["id"] ? $app["other"]["name"] : "Cloudburst System");
$systemData['temporary'] = false;
if ($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 ($travelling[$member['id']]["travelling"] && $travelling[$member['id']]["equestria"]) {
$systemData['page'] = null;
$systemData['icon'] = "../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];
$marefriends[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"name" => getMiniName($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];
$sexfriends[] = [
"id" => $marefriend,
"link" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"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" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"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" => "/" . ($mfMember["name"]),
"icon" => getAsset($mfSystem, $mfMemberID, "heads"),
"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" => "mcf",
"color" => "primary",
"html" => (
$french
?
'Fronteuse la plus présente'
:
'Most common fronter'
)
];
}
}
/*if (($metadata["age_spells"] ?? false) && !$french) {
$badges[] = [
"id" => "age_spells",
"color" => "#6f42c1",
"html" => 'Affected by age spells'
];
}*/
if ($metadata["fictive"] ?? false) {
$badges[] = [
"id" => "fictive",
"color" => "info",
"html" => (
$french
?
'Fictive'
:
'Fictive'
)
];
}
if ($metadata["persecutor"] ?? false) {
$badges[] = [
"id" => "persecutor",
"color" => "danger",
"html" => (
$french
?
'Persécutrice'
:
'Persecutor'
)
];
}
if ($metadata["less_frequent"] ?? false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#6610f2",
"html" => (
$french
?
'Fronte moins souvent'
:
'Fronts less often'
)
];
}
if ($metadata["nonverbal"] ?? false) {
$badges[] = [
"id" => "nonverbal",
"color" => "#20c997",
"html" => (
$french
?
'Non verbal IRL'
:
'Non verbal IRL'
)
];
}
if ($member["name"] === "fusion") {
$badges[] = [
"id" => "fusion",
"color" => "d63384",
"html" => 'Fusion'
];
}
if (($metadata["leader"] ?? false)) {
$badges[] = [
"id" => "leader",
"color" => "d6a833",
"html" => (
$french
?
'Dirigeante'
:
'Leader'
)
];
}
if ($metadata["protector"] ?? false) {
$badges[] = [
"id" => "protector",
"color" => "black",
"html" => (
$french
?
'
' . 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" : "Protectrice")) . ''
:
'Protector'
)
];
}
if (($metadata["little"] ?? 0) === 2) {
$badges[] = [
"id" => "little",
"color" => "success",
"html" => (
$french
?
'
' . 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")) . ''
:
'Little'
)
];
}
if (($metadata["little"] ?? 0) === 3) {
$badges[] = [
"id" => "younger",
"color" => "dark",
"html" => (
$french
?
'Plus jeune'
:
'Younger'
)
];
}
if (($metadata["age_regressor"] ?? false)) {
if ($metadata["regression"] !== null && $metadata["regression"] !== false) {
$regression = _header_getMember($metadata["regression"], $system);
$badges[] = [
"id" => "regressor_median",
"color" => "secondary",
"html" => (
$french
?
'Régresse en âge en '. (getMiniName($regression["display_name"] ?? $regression["name"])) . ''
:
'Age regresses into '. (getMiniName($regression["display_name"] ?? $regression["name"])) . ''
)
];
}
}
if ($metadata["median"] !== null && $metadata["median"] !== false) {
$source = _header_getMember($metadata["median"], $system);
if ($metadata["little"] > 0) {
$badges[] = [
"id" => "regressed",
"color" => "warning",
"html" => (
$french
?
'Régressé en âge de ' . (getMiniName($source["display_name"] ?? $source["name"])) . ''
:
'Age regressed from ' . (getMiniName($source["display_name"] ?? $source["name"])) . ''
)
];
} else {
$badges[] = [
"id" => "facet",
"color" => "light",
"html" => (
$french
?
'Facette de ' . getMiniName($source["display_name"] ?? $source["name"]) . ''
:
'Facet of ' . getMiniName($source["display_name"] ?? $source["name"]) . ''
)
];
}
}
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"],
'badges' => $badges,
'prefixes' => $prefixes,
'pronouns' => getTooltipsFromMark($member["pronouns"], $french) ?? "they/them",
'pronouns_usage' => getMemberPronouns($member['pronouns']),
'last_fronted' => $lastFronted,
'species' => $speciesList,
'system' => $systemData,
'relations' => [
'marefriends' => $marefriends ?? [],
'sexfriends' => $sexfriends ?? null,
'sisters' => $sisters ?? [],
'caretakers' => $caretakers ?? []
]
];
}