$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) {
# test source image
if (file_exists($sourceImageFile)) {
$res = is_array($info = getimagesize($sourceImageFile));
}
else $res = false;
# open image
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;
}
}
# create corners
if ($res) {
$q = 10; # change this if you want
$radius *= $q;
# find unique color
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);
# resize image down
$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);
# output image
$res = $dest;
imagedestroy($src);
imagedestroy($img);
}
return $res;
}
}
if (!function_exists("getMiniName")) {
function getMiniName(string $name) {
$parts = explode(" ", $name);
if (strlen($parts[0]) > 3 && !str_ends_with($parts[0], "e") && $parts[0] !== "Filly" && $parts[0] !== "Windy" && (isset($parts[1]) && $parts[1] !== "Brightdawn" && $parts[1] !== "Fizz")) {
if ($parts[0] === "Princess") {
array_shift($parts);
}
if (str_contains($parts[0], "/")) {
return explode("/", $parts[0])[0];
} else {
return $parts[0];
}
} else {
return $name;
}
}
}
if (!function_exists("withCaretakersDown")) {
function withCaretakersDown(array $ordered): array {
return $ordered;
}
}
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;
}
$member["system"] = $member["_system"] = $system;
return $member;
}
}
if (!function_exists("getMemberWithoutSystem")) {
function getMemberWithoutSystem(string $id) {
$member = null;
$members1 = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc/members.json"), true);
foreach ($members1 as $m) {
$m["_system"] = "ynmuc";
$m["system"] = "ynmuc";
if ($m["id"] === $id) $member = $m;
}
$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;
}
return $member;
}
}
if (!function_exists("showMembersFromList")) {
function showMembersFromList(array $list) {
foreach ($list as $member) { if ($member['name'] !== "unknown" && $member['name'] !== "fusion") {
echo('
' . ($member['display_name'] ?? $member['name']) . '
' . (isset($member['travelling']) && $member['travelling'] ? "+" . ($member['proxy_tags'][0]['prefix'] ?? " ") : ($member['proxy_tags'][0]['prefix'] ?? " ")) . '
');
}}
}
}
if (!function_exists("showSubsystem")) {
function showSubsystem(array $data, string $parentSystem) {
$subsystemData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/subsystems/$parentSystem-$data[source].json"), true);
echo('
');
echo('
');
showMembersFromList(scoreOrder(array_map(function ($i) use ($parentSystem) {
return getSystemMember($parentSystem, $i);
}, $data["members"]), $parentSystem));
echo('
');
}
}
if (!function_exists("showSystem")) {
function showSystem(string $id, string $name, string $color, bool $hideTitle) {
$app = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
global $travelling;
$global = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . (isset($app["other"]) && $id === $app["other"]["id"] ? "other" : $id) . "/general.json"), true);
if ($hideTitle) {
echo('
');
} else {
echo('
');
}
if (!$hideTitle) echo('
' . $name . '
');
if ($hideTitle) {
echo('
');
} else {
echo('
');
}
showMembersFromList(scoreOrder([...array_map(function ($i) use ($id, $travelling) {
$i["travelling"] = false;
$i["system"] = $id;
$i["equestria"] = $travelling[$i['id']]['travelling'] && $travelling[$i['id']]['equestria'];
return $i;
}, array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . (isset($app["other"]) && $id === $app["other"]["id"] ? "other" : $id) . "/members.json"), true), function ($i) use ($travelling) {
return !(isset($travelling[$i['id']]) && $travelling[$i['id']]['travelling'] && (!isset($travelling[$i['id']]['equestria']) || !$travelling[$i['id']]['equestria']));
})), ...array_map(function ($i) use ($id) {
$i["travelling"] = true;
$i["system"] = ($id === "gdapd" ? "ynmuc" : "gdapd");
return $i;
}, array_filter(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/" . ($id === "gdapd" ? "ynmuc" : "gdapd") . "/members.json"), true), function ($i) use ($travelling) {
return isset($travelling[$i['id']]) && $travelling[$i['id']]['travelling'] && (!isset($travelling[$i['id']]['equestria']) || !$travelling[$i['id']]['equestria']);
}))], $id));
echo('
');
}
}
if (!function_exists("cloudburst")) {
function cloudburst(bool $hideTitle): void {
showSystem("ynmuc", "Cloudburst System", "#5f08a9a6", $hideTitle);
}
}
if (!function_exists("raindrops")) {
function raindrops(bool $hideTitle): void {
showSystem("gdapd", "Raindrops System", "#a95f08a6", $hideTitle);
}
}
if (!function_exists("other")) {
function other(bool $hideTitle): void {
$app = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/app.json"), true);
showSystem($app["other"]["id"], $app["other"]["name"], "#" . $app["other"]["color"] . "a6", $hideTitle);
}
}
if (!function_exists("getMember")) {
function getMember(string $id) {
global $systemID;
$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, $french = false): string {
if (!is_numeric($time)) {
$time = strtotime($time);
}
$periods = ["sec.", "mn.", "hr.", "d.", "wk.", "mo.", "y.", "ages"];
$periods_fr = ["sec.", "mn.", "hr.", "j.", "sem.", "m.", "a.", "des années"];
$lengths = array("60", "60", "24", "7", "4.35", "12", "100");
$now = time();
$difference = $now - $time;
if ($difference <= 10 && $difference >= 0) {
if ($french) {
return $tense_fr = "à l'instant";
} else {
return $tense = "now";
}
} elseif ($difference > 0) {
$tense = "ago";
$tense_fr = "il y a";
} else {
$tense = "later";
$tense_fr = "dans";
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($french) {
$period = $periods_fr[$j];
return "{$tense_fr} {$difference} {$period}";
} else {
$period = $periods[$j];
return "{$difference} {$period} {$tense}";
}
}
}
if (!function_exists("timeIn")) {
function timeIn($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 = $time - $now;
if ($difference <= 10 && $difference >= 0) {
return $tense = "now";
} elseif ($difference > 0) {
$tense = "in";
} else {
$tense = "ago";
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
$period = $periods[$j] . ($difference >1 ? "s" :'');
return "{$tense} {$difference} {$period}";
}
}
if (!function_exists("duration")) {
function duration($seconds) {
global $lang; global $pages;
if ($seconds >= 60) {
if (floor($seconds / 60) >= 60) {
if (floor($seconds / 3600) >= 24) {
$days = floor($seconds / 86400);
if ($lang["_french"]) {
return $days . " jour" . ($days > 1 ? "s" : "");
} else {
return $days . " day" . ($days > 1 ? "s" : "");
}
} else {
$hours = floor($seconds / 3600);
if ($lang["_french"]) {
return $hours . " heure" . ($hours > 1 ? "s" : "");
} else {
return $hours . " hour" . ($hours > 1 ? "s" : "");
}
}
} else {
$minutes = floor($seconds / 60);
return $minutes . " minute" . ($minutes > 1 ? "s" : "");
}
} else {
if ($lang["_french"]) {
return $seconds . " secondes";
} else {
return $seconds . " seconds";
}
}
}
}
if (!function_exists("relativeDate")) {
function relativeDate($date, $showTime = true) {
if (!is_numeric($date)) $date = strtotime($date);
if (!$showTime) {
if (date('Y-m-d', $date) === date('Y-m-d')) {
return "today";
} elseif (date('Y-m-d', $date) === date('Y-m-d', time() + 86400)) {
return "tomorrow";
} elseif ($date < time() + 518400) {
return date('l', $date);
} else {
return date('D j M', $date);
}
} else {
if (date('Y-m-d', $date) === date('Y-m-d')) {
return "today,
" . date('H:i', $date) . "";
} elseif (date('Y-m-d', $date) === date('Y-m-d', time() + 86400)) {
return "tomorrow,
" . date('H:i', $date) . "";
} elseif ($date < time() + 518400) {
return date('l', $date) . ",
" . date('H:i', $date) . "";
} else {
return date('D j M', $date) . ",
" . date('H:i', $date) . "";
}
}
}
}
if (!function_exists("getMemberSystem")) {
function getMemberSystem(string $id) {
$list = scoreOrderGlobal();
foreach ($list as $item) {
if ($item["id"] === $id) return $item["_system"];
}
}
}
if (!function_exists("getMemberFromName")) {
function getMemberFromName(string $name) {
$list = [...json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gdapd/members.json"), true), ...json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/ynmuc/members.json"), true)];
foreach ($list as $item) {
if ($item["name"] === $name) return getMemberWithoutSystem($item["id"]);
}
}
}
if (!function_exists("resolveMember")) {
function resolveMember(mixed $name) {
if (is_string($name)) {
if (str_ends_with($name, "-travelling")) {
return substr($name, 0, strlen($name) - 11);
} else {
return $name;
}
} else {
return $name;
}
}
}