"invalid",
"gender:fr" => "invalide",
"object" => "this pony",
"person" => "pony",
"possessive_det" => "this pony's",
"possessive_pro" => "this pony's",
"reflexive" => "this pony",
"subjective" => "this pony",
"third" => true,
"color" => "success"
];
}
}
if (!function_exists("parseMetadata")) {
function parseMetadata ($metadata) {
$metadata["little"] = 0;
$age = -1;
if (isset($metadata["birth"]["age"]) && $metadata["birth"]["age"] !== 0) {
$age = $metadata["birth"]["age"];
} else if (isset($metadata["birth"]["year"]) && $metadata["birth"]["year"] > 1990) {
$age = (int)date('Y') - $metadata["birth"]["year"] + (strtotime(date('Y') . "-" . $metadata["birth"]["date"]) <= time() ? 0 : -1);
}
if (is_string($age) && isset(explode("-", $age)[1]) && is_numeric(explode("-", $age)[1])) {
$age = (int)explode("-", $age)[1];
}
if ($age > 0 && $age <= 10) {
$metadata["little"] = 2;
} else if ($age > 0 && $age <= 15) {
$metadata["little"] = 3;
}
return $metadata;
}
}
if (!function_exists("pf_utf8_decode")) {
function pf_utf8_decode(string $string): string {
return iconv("UTF-8", "ISO-8859-1", $string);
}
}
if (!function_exists("pf_utf8_encode")) {
function pf_utf8_encode(string $string): string {
return iconv("ISO-8859-1", "UTF-8", $string);
}
}
if (!function_exists("getLastFronted")) {
function getLastFronted($members, $id) {
foreach ($members as $member) {
if ($member["id"] === $id) {
return $member["_lastFronted"];
}
}
return -1;
}
}
if (!function_exists("createJob")) {
function createJob($title, $options): void {
$job = [
"name" => $title,
"options" => $options,
"date" => date('c')
];
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/jobs/" . round(microtime(true) * 1000000) . "-" . random() . ".json", json_encode($job));
}
}
if (!function_exists("formatPonypush")) {
function formatPonypush($message): string {
return "Update to Ponypush 3.1.0 or later — (\$PA1$\$" . base64_encode($message) . "\$\$)";
}
}
if (!function_exists("generateToken")) {
function generateToken(): string {
return "peh" . str_replace("/", ".", base64_encode(random_bytes(96)));
}
}
if (!function_exists("peh_error")) {
#[NoReturn] function peh_error($message, $code = 500): void {
header("Location: /?em=" . urlencode(base64_encode($message)) . "&ec=" . $code);
die();
}
}
if (!function_exists("getAsset")) {
function getAsset($systemID, $memberID = null, $type = "avatars"): string {
$app = $GLOBALS["ColdHazeApp"] ?? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
$systemFile = (isset($app["other"]) && $systemID === $app["other"]["id"]) ? "other" : $systemID;
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemFile/general.json")) {
$id1 = preg_replace("/^([\da-f]{8})-([\da-f]{4})-([\da-f]{4})-([\da-f]{4})-([\da-f]{12})$/", "$1$2$3$4$5", json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemFile/general.json"), true)["uuid"]);
if (isset($memberID)) {
$members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemFile/members.json"), true);
$list = array_map(function ($i) {
return $i["id"];
}, $members);
if (in_array($memberID, $list)) {
$id2 = preg_replace("/^([\da-f]{8})-([\da-f]{4})-([\da-f]{4})-([\da-f]{4})-([\da-f]{12})$/", "$1$2$3$4$5", (getMemberWithoutSystem($memberID) ?? ['uuid' => ''])["uuid"]);
} else {
return "/error/nomember/?s=$systemID&m=$memberID&t=$type";
}
$id = $id1 . $id2;
if (str_ends_with((getMemberWithoutSystem($memberID) ?? ['name' => ''])["name"], "-travelling")) {
$id1 = preg_replace("/^([\da-f]{8})-([\da-f]{4})-([\da-f]{4})-([\da-f]{4})-([\da-f]{12})$/", "$1$2$3$4$5", json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "hrbom" : "gdapd") . "/general.json"), true)["uuid"]);
$members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === "gdapd" ? "hrbom" : "gdapd") . "/members.json"), true);
$list = array_map(function ($i) {
return $i["name"];
}, $members);
if (in_array(substr(getMemberWithoutSystem($memberID)["name"], 0, -11), $list)) {
$id2 = preg_replace("/^([\da-f]{8})-([\da-f]{4})-([\da-f]{4})-([\da-f]{4})-([\da-f]{12})$/", "$1$2$3$4$5", getMemberFromName(substr(getMemberWithoutSystem($memberID)["name"], 0, -11))["uuid"]);
} else {
return "/error/nomember/?s=$systemID&m=$memberID&t=$type";
}
$id = $id1 . $id2;
}
} else {
$id = $id1;
}
if ($type === "bodies" || $type === "heads") {
if (getSystemMember($systemID, $memberID) !== null && getSystemMember($systemID, $memberID)["_metadata"] !== null && getSystemMember($systemID, $memberID)["_metadata"]["species"] !== null && 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 {
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")) {
return "/assets/" . $type . "/" . $id . ".webp";
} else {
return "/error/nofile/?s=$systemID&m=$memberID&t=$type";
}
}
} else {
return "/error/nosys/?s=$systemID&m=$memberID&t=$type";
}
}
}
if (!function_exists("rgbToHsl")) {
function rgbToHsl($r, $g, $b): array {
$r /= 255;
$g /= 255;
$b /= 255;
$max = max($r, $g, $b);
$min = min($r, $g, $b);
$l = ($max + $min) / 2;
$d = $max - $min;
if ($d == 0) {
$h = $s = 0;
} else {
$s = $d / (1 - abs(2 * $l - 1));
switch ($max) {
case $r:
$h = 60 * fmod((($g - $b) / $d), 6);
if ($b > $g) {
$h += 360;
}
break;
case $g:
$h = 60 * (($b - $r) / $d + 2);
break;
case $b:
$h = 60 * (($r - $g) / $d + 4);
break;
}
}
return array(round($h, 2), round($s, 2), round($l, 2));
}
}
if (!function_exists("imageCreateCorners")) {
function imageCreateCorners($sourceImageFile, $radius) {
if (file_exists($sourceImageFile)) {
$res = is_array($info = getimagesize($sourceImageFile));
}
else $res = false;
if ($res) {
$w = $info[0];
$h = $info[1];
switch ($info['mime']) {
case 'image/jpeg': $src = imagecreatefromjpeg($sourceImageFile);
break;
case 'image/gif': $src = imagecreatefromgif($sourceImageFile);
break;
case 'image/png': $src = imagecreatefrompng($sourceImageFile);
break;
default:
$res = false;
}
}
if ($res) {
$q = 10;
$radius *= $q;
do {
$r = rand(0, 255);
$g = rand(0, 255);
$b = rand(0, 255);
}
while (imagecolorexact($src, $r, $g, $b) < 0);
$nw = $w*$q;
$nh = $h*$q;
$img = imagecreatetruecolor($nw, $nh);
$alphacolor = imagecolorallocatealpha($img, $r, $g, $b, 127);
imagealphablending($img, false);
imagesavealpha($img, true);
imagefilledrectangle($img, 0, 0, $nw, $nh, $alphacolor);
imagefill($img, 0, 0, $alphacolor);
imagecopyresampled($img, $src, 0, 0, 0, 0, $nw, $nh, $w, $h);
imagearc($img, $radius-1, $radius-1, $radius*2, $radius*2, 180, 270, $alphacolor);
imagefilltoborder($img, 0, 0, $alphacolor, $alphacolor);
imagearc($img, $nw-$radius, $radius-1, $radius*2, $radius*2, 270, 0, $alphacolor);
imagefilltoborder($img, $nw-1, 0, $alphacolor, $alphacolor);
imagearc($img, $radius-1, $nh-$radius, $radius*2, $radius*2, 90, 180, $alphacolor);
imagefilltoborder($img, 0, $nh-1, $alphacolor, $alphacolor);
imagearc($img, $nw-$radius, $nh-$radius, $radius*2, $radius*2, 0, 90, $alphacolor);
imagefilltoborder($img, $nw-1, $nh-1, $alphacolor, $alphacolor);
imagealphablending($img, true);
imagecolortransparent($img, $alphacolor);
$dest = imagecreatetruecolor($w, $h);
imagealphablending($dest, false);
imagesavealpha($dest, true);
imagefilledrectangle($dest, 0, 0, $w, $h, $alphacolor);
imagecopyresampled($dest, $img, 0, 0, 0, 0, $w, $h, $nw, $nh);
$res = $dest;
imagedestroy($src);
imagedestroy($img);
}
return $res;
}
}
if (!function_exists("getMiniName")) {
function getMiniName(string $name): string {
return $name;
}
}
if (!function_exists("withCaretakersDown")) {
function withCaretakersDown(array $ordered): array {
return $ordered;
}
}
if (!function_exists("getSystemMember")) {
function getSystemMember(string $system, string $id) {
$app = $GLOBALS["ColdHazeApp"] ?? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
$systemID = $system;
$members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($systemID === $app["other"]["id"] ? "other" : $systemID) . "/members.json"), true);
$member = null;
foreach ($members as $m) {
if ($m["id"] === $id) $member = $m;
}
$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;
}
}
if (!function_exists("getMemberWithoutSystem")) {
function getMemberWithoutSystem(string $id) {
global $isLowerLoggedIn; global $isLoggedIn;
$member = null;
$members2 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd/members.json"), true);
foreach ($members2 as $m) {
$m["_system"] = "gdapd";
$m["system"] = "gdapd";
if ($m["id"] === $id) $member = $m;
}
$members3 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/hrbom/members.json"), true);
foreach ($members3 as $m) {
$m["_system"] = "hrbom";
$m["system"] = "hrbom";
if ($m["id"] === $id) $member = $m;
}
if ($isLowerLoggedIn || $isLoggedIn) {
$app = $GLOBALS["ColdHazeApp"] ?? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
$members4 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/other/members.json"), true);
foreach ($members4 as $m) {
$m["_system"] = $app["other"]["id"];
$m["system"] = $app["other"]["id"];
if ($m["id"] === $id) $member = $m;
}
}
return $member;
}
}
if (!function_exists("showMembersFromList")) {
function showMembersFromList(array $list): void {
foreach ($list as $member) { if ($member['name'] !== "unknown" && $member['name'] !== "fusion") {
echo('' . (isset($member['travelling']) && $member['travelling'] ? "+" . ($member['proxy_tags'][0]['prefix'] ?? " ") : ($member['proxy_tags'][0]['prefix'] ?? " ")) . '