Updated 21 files and added 8 files (automated)

mane
Mia Raindrops 1 month ago
parent dc1de74470
commit 7da58b75da
Signed by: Mia Raindrops
GPG Key ID: EFBDC68435A574B7

3
.gitignore vendored

@ -4,4 +4,5 @@ includes/email.json
uploads
includes/fcm/firebase.json
includes/phone
includes/email
includes/email
includes/kiosk.json

@ -20,7 +20,7 @@ if (isset($id)) {
$data = json_decode(pf_utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles/" . $id . ".json")), true);
$title_pre = $data["title"];
$title_pre = getNameFromId($id);
$title = "lang_articles_title";
} else {
$title = "lang_articles_title";
@ -49,7 +49,7 @@ if (!isset($id)):
<div class="container">
<br><br>
<h1>
<span><?= $data["title"] ?></span>
<span><?= getNameFromId($id) ?></span>
<span style="float: right;"><a href="/request/?type=rename&id=<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_articles_rename") ?></a> <a href="/edit/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_people_edit") ?></a></span>
</h1>

@ -52,10 +52,10 @@ if (!isset($_PROFILE["requests"][$id])):
<br><br>
<h1>
<?php if ($id !== $_USER): ?>
<span><?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people/" . $id . ".json") ? $data["first_name"] . " " . $data["last_name"] : $data["title"] ?></span>
<span><?= getNameFromId($id) ?></span>
<span style="float: right;"><input id="form-btn" type="button" value="<?= l("lang_edit_save") ?>" class="btn btn-outline-primary" <?= $_PROFILE["blocked"] >= 2 ? "disabled" : "" ?>> <a href="/<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people/" . $id . ".json") ? "people" : "articles" ?>/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_edit_cancel") ?></a></span>
<?php else: ?>
<span><?= $data["nick_name"] ?? $data["first_name"] . " " . $data["last_name"] ?><?php if (isset($data["nick_name"]) && trim($data["nick_name"]) !== ""): ?> <small><small><small>(<?= $data["first_name"] . " " . $data["last_name"] ?>)</small></small></small><?php endif; ?><?php if ($data["plus"] && !$data["ultra"]): ?> <small><small><small><small><small><small><span class="badge badge-plus rounded-pill" style="vertical-align: middle; margin-top: -5px;">PLUS</span></small></small></small></small></small></small><?php elseif ($data["plus"] && $data["ultra"]): ?> <small><small><small><small><small><small><span class="badge badge-ultra rounded-pill" style="vertical-align: middle; margin-top: -5px;">ULTRA</span></small></small></small></small></small></small><?php endif; ?></span>
<span><?= $data["nick_name"] ?? $data["first_name"] . " " . $data["last_name"] ?><?php if (isset($data["nick_name"]) && trim($data["nick_name"]) !== ""): ?> <small><small><small>(<?= $data["first_name"] . " " . $data["last_name"] ?>)</small></small></small><?php endif; ?></span>
<span style="float: right;"><input id="form-btn" type="button" value="<?= l($id === $_USER ? "lang_profile_save" : "lang_edit_save") ?>" class="btn btn-outline-primary" <?= $_PROFILE["blocked"] >= 1 ? "disabled" : "" ?>> <a href="/<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people/" . $id . ".json") ? "people" : (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles/" . $id . ".json") ? "articles" : (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery/" . $id . ".json") ? "gallery" : "profile")) ?>/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_edit_cancel") ?></a></span>
<?php endif; ?>
</span>

@ -20,7 +20,7 @@ if (isset($id)) {
$data = json_decode(pf_utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery/" . $id . ".json")), true);
$title_pre = $data["title"];
$title_pre = getNameFromId($id);
$title = "lang_gallery_title";
} else {
$title = "lang_gallery_title";
@ -49,7 +49,7 @@ if (!isset($id)):
<div class="container">
<br><br>
<h1>
<span><?= $data["title"] ?></span>
<span><?= getNameFromId($id) ?></span>
<span style="float: right;"><a href="/upload/<?= $id ?>" class="btn btn-outline-primary"><?= l("lang_gallery_upload") ?></a> <a href="/request/?type=rename&id=<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_articles_rename") ?></a> <a href="/edit/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_people_edit") ?></a></span>
</h1>

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="m12.6 36.7-1.25-1.3L22.75 24l-11.4-11.45 1.25-1.3L24.05 22.7 35.4 11.25l1.25 1.3L25.3 24l11.35 11.4-1.25 1.3-11.35-11.45Z" fill="#000000"/></svg>

After

Width:  |  Height:  |  Size: 217 B

@ -6,7 +6,7 @@ $palettes = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes
$userPalette = $palettes["list"][$palettes["default"]]["light"];
if (isset($_PROFILE)) {
if (isset($_PROFILE) && !isset($_COOKIE["DeltaKiosk"])) {
if (isset($_PROFILE["studio_settings"]) && isset($_PROFILE["studio_settings"]["theme"]) && isset($_PROFILE["ultra"]) && $_PROFILE["ultra"] && isset($palettes["list"][$_PROFILE["studio_settings"]["theme"]])) {
$userPalette = $palettes["list"][$_PROFILE["studio_settings"]["theme"]][$_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
}
@ -20,7 +20,7 @@ if (isset($_SERVER["HTTP_REFERER"]) && isset($_PROFILE)) {
$_ = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $id . ".json"), true);
if (isset($_["ultra"]) && $_["ultra"] && isset($_["studio_settings"]) && isset($_["studio_settings"]["profile"]["theme"]) && $_["studio_settings"]["profile"]["theme"] !== -1 && isset($palettes["list"][$_["studio_settings"]["profile"]["theme"]])) {
$userPalette = $palettes["list"][$_["studio_settings"]["profile"]["theme"]][$_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
$userPalette = $palettes["list"][$_["studio_settings"]["profile"]["theme"]][!isset($_COOKIE["DeltaKiosk"]) && $_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
}
}
}

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M6.85 34.65V32.9H41.2v1.75Zm0-9.8V23.1H41.2v1.75Zm0-9.75v-1.75H41.2v1.75Z" fill="#000000"/></svg>

After

Width:  |  Height:  |  Size: 169 B

@ -20,7 +20,7 @@ if (isset($id)) {
$data = json_decode(pf_utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people/" . $id . ".json")), true);
$title_pre = $data["first_name"] . " " . $data["last_name"];
$title_pre = getNameFromId($id);
$title = "lang_people_title";
} else {
$title = "lang_people_title";
@ -49,7 +49,7 @@ if (!isset($id)):
<div class="container">
<br><br>
<h1>
<span><?= $data["first_name"] . " " . $data["last_name"] ?><?php if (isset($data["born"]) && trim($data["born"]) !== ""): ?> <small><small><small>(<?= $data["first_name"] . " " . $data["born"] ?>)</small></small></small><?php endif; ?></span>
<span><?= getNameFromId($id) ?><?php if (isset($data["born"]) && trim($data["born"]) !== ""): ?> <small><small><small>(<?= $data["first_name"] . " " . $data["born"] ?>)</small></small></small><?php endif; ?></span>
<span style="float: right;"><a href="/edit/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_people_edit") ?></a></span>
</h1>

@ -30,6 +30,8 @@ if (isset($id)) {
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/header.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
$requests = array_reverse($data["requests"]);
?>
<div class="container">
@ -37,7 +39,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
<h1>
<span><?= $data["nick_name"] ?? $data["first_name"] . " " . $data["last_name"] ?><?php if (isset($data["nick_name"]) && trim($data["nick_name"]) !== ""): ?> <small><small><small>(<?= $data["first_name"] . " " . $data["last_name"] ?>)</small></small></small><?php endif; ?></span>
<span style="float: right;">
<div style="display: inline-block; margin-right: 10px;">
<div id="badges-desktop" style="display: inline-block; margin-right: 10px;">
<?php badges($data) ?>
</div>
<?php if ($id === $_USER): ?><a href="/edit/<?= $id ?>" class="btn btn-outline-dark"><?= l("lang_people_edit") ?></a><?php endif; ?>
@ -55,6 +57,9 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
</ul>
</div>
</span>
<div id="badges-mobile" style="display: none;">
<?php badges($data) ?>
</div>
</h1>
<div id="profile-grid" style="margin-top: 20px; display: grid; grid-template-columns: repeat(<?= hasProfileSetting("hide", false) ? "1" : "2" ?>, 1fr); grid-column-gap: 20px;">
@ -63,16 +68,16 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
<div class="card-body">
<table>
<tr>
<td><img alt="" src="/icons/time.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?= l("lang_profile_since") ?> <?= timeAgo($data["date"], false) ?></td>
<td class="ellipsis"><img alt="" src="/icons/time.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?= l("lang_profile_since") ?> <?= timeAgo($data["date"], false) ?></td>
</tr>
<tr>
<td><img alt="" src="/icons/clock.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?php if (isset($data["last_seen"])): ?><?= l("lang_profile_last") ?> <?= timeAgo($data["last_seen"], true, false, true) ?><?php else: ?><?= l("lang_profile_never") ?><?php endif; ?></td>
<td class="ellipsis"><img alt="" src="/icons/clock.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?php if (isset($data["last_seen"])): ?><?= l("lang_profile_last") ?> <?= timeAgo($data["last_seen"], true, false, true) ?><?php else: ?><?= l("lang_profile_never") ?><?php endif; ?></td>
</tr>
<tr>
<td><img alt="" src="/icons/pending.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?= count($data["requests"]) === 0 ? l("lang_profile_pending3") : count($data["requests"]) ?> <?= l(count($data["requests"]) > 1 || count($data["requests"]) === 0 ? "lang_profile_pending2" : "lang_profile_pending1") ?></td>
<td class="ellipsis"><img alt="" src="/icons/pending.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?= count($data["requests"]) === 0 ? l("lang_profile_pending3") : count($data["requests"]) ?> <?= l(count($data["requests"]) > 1 || count($data["requests"]) === 0 ? "lang_profile_pending2" : "lang_profile_pending1") ?></td>
</tr>
</table>
</div>
@ -88,8 +93,8 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
<?php endif; ?>
<table>
<tr>
<td style="width: 28px;"><img alt="" src="/icons/age.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?php
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/age.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?php
if (isset($data["birth"])):
@ -104,12 +109,12 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
$email = $data["email"];
?>
<td style="width: 28px;"><img alt="" src="/icons/email.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?php if (hasProfileSetting("email", true)): ?><a href="mailto:<?= $email ?>"><?= $email ?></a><?php else: ?><?= l("lang_studio_redacted") ?><?php endif; ?></td>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/email.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?php if (hasProfileSetting("email", true)): ?><a href="mailto:<?= $email ?>"><?= $email ?></a><?php else: ?><?= l("lang_studio_redacted") ?><?php endif; ?></td>
</tr>
<tr>
<td style="width: 28px;"><img alt="" src="/icons/phone.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><?php if (hasProfileSetting("phone", true)): ?><?php if (isset($data["phone"]) && $data["phone"] !== ""): ?><a href="tel:<?= str_replace(" ", "", $data["phone"]) ?>"><?= $data["phone"] ?></a><?php else: ?>-<?php endif; ?><?php else: ?><?= l("lang_studio_redacted") ?><?php endif; ?></td>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/phone.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><?php if (hasProfileSetting("phone", true)): ?><?php if (isset($data["phone"]) && $data["phone"] !== ""): ?><a href="tel:<?= str_replace(" ", "", $data["phone"]) ?>"><?= $data["phone"] ?></a><?php else: ?>-<?php endif; ?><?php else: ?><?= l("lang_studio_redacted") ?><?php endif; ?></td>
</tr>
</table>
</div>
@ -117,14 +122,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
</div>
</div>
<?php if (hasProfileSetting("detailed", false)): ?>
<?php if (hasProfileSetting("detailed", false, $data)): ?>
<div id="profile-grid-2" style="margin-top: 20px; display: grid; grid-template-columns: repeat(2, 1fr); grid-column-gap: 20px;">
<div class="card">
<div class="card-body">
<div style="height: 28px; display: flex; align-items: center;"><b><?= l("lang_studio_details_most") ?></b></div>
<?php
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/history/" . $_USER . ".json")) {
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/history/" . $id . ".json")) {
$history = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/history/" . $_USER . ".json"), true);
} else {
$history = [];
@ -138,14 +143,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
<table>
<?php if (isset(array_keys($history)[0])): ?>
<tr>
<td style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($history)[0]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><a href="<?= getUrlFromId(array_keys($history)[0]) ?>"><?= getNameFromId(array_keys($history)[0]) ?></a></td>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($history)[0]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><a href="<?= getUrlFromId(array_keys($history)[0]) ?>"><?= getNameFromId(array_keys($history)[0]) ?></a></td>
</tr>
<?php endif; ?>
<?php if (isset(array_keys($history)[1])): ?>
<tr>
<td style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($history)[1]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td><a href="<?= getUrlFromId(array_keys($history)[1]) ?>"><?= getNameFromId(array_keys($history)[1]) ?></a></td>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($history)[1]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><a href="<?= getUrlFromId(array_keys($history)[1]) ?>"><?= getNameFromId(array_keys($history)[1]) ?></a></td>
</tr>
<?php endif; ?>
</table>
@ -155,7 +160,24 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
<div class="card">
<div class="card-body">
<div style="height: 28px; display: flex; align-items: center;"><b><?= l("lang_studio_details_requests") ?></b></div>
<span class="text-muted">Not working as of M4</span>
<?php if (count($requests) === 0): ?>
<div style="height: 28px; display: flex; align-items: center;" class="text-muted"><?= l("lang_studio_details_none") ?></div>
<?php else: ?>
<table>
<?php if (isset(array_keys($requests)[0])): ?>
<tr>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($requests)[0]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><a href="<?= getUrlFromId(array_keys($requests)[0]) ?>"><?= getNameFromId(array_keys($requests)[0]) ?></a> · <?= timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/requests/" . array_values($requests)[0] . ".json"), true)["date"]) ?></td>
</tr>
<?php endif; ?>
<?php if (isset(array_keys($requests)[1])): ?>
<tr>
<td class="ellipsis" style="width: 28px;"><img alt="" src="/icons/<?= getTypeFromId(array_keys($requests)[1]) ?>.svg" style="vertical-align: middle; width: 29px; padding-right: 5px;"></td>
<td class="ellipsis"><a href="<?= getUrlFromId(array_keys($requests)[1]) ?>"><?= getNameFromId(array_keys($requests)[1]) ?></a> · <?= timeAgo(json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/requests/" . array_values($requests)[1] . ".json"), true)["date"]) ?></td>
</tr>
<?php endif; ?>
</table>
<?php endif; ?>
</div>
</div>
</div>

@ -12,7 +12,7 @@ foreach (array_filter(scandir($_SERVER["DOCUMENT_ROOT"] . "/includes/data/articl
$keys[] = [
"type" => "articles",
"id" => $id,
"name" => json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/articles/" . $_id)), true)["title"] ?? null
"name" => getNameFromId($id)
];
}
@ -21,7 +21,7 @@ foreach (array_filter(scandir($_SERVER["DOCUMENT_ROOT"] . "/includes/data/galler
$keys[] = [
"type" => "gallery",
"id" => $id,
"name" => json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/gallery/" . $_id)), true)["title"] ?? null
"name" => getNameFromId($id)
];
}
@ -30,7 +30,7 @@ foreach (array_filter(scandir($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people
$keys[] = [
"type" => "people",
"id" => $id,
"name" => json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $_id)), true)["nick_name"] ?? (isset(json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $_id)), true)["first_name"]) && isset(json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $_id)), true)["last_name"]) ? json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $_id)), true)["first_name"] . " " . json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $_id)), true)["last_name"] : null)
"name" => getNameFromId($id)
];
}

Binary file not shown.

Binary file not shown.

@ -1,11 +1,5 @@
</div></div>
<?php if (isset($_PROFILE) && $_SERVER['REQUEST_URI'] !== "/login/blocked/"): ?>
<br>
<div id="footer" class="container text-muted">
© 2019-<?= date('Y') ?> Delta Technologies, 2022-<?= date('Y') ?> Equestria.dev · v<?= trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version")) ?><br><a href="https://equestria.horse/legal/notices" target="_blank" class="text-muted"><?= l("lang_footer_legal") ?></a> · <a target="_blank" href="https://equestria.horse/legal/privacy" class="text-muted"><?= l("lang_footer_privacy") ?></a> · <a href="https://equestria.horse/legal/terms-of-service" target="_blank" class="text-muted"><?= l("lang_footer_terms") ?></a><!-- · <a href="/sales" class="text-muted"><?= l("lang_footer_sales") ?></a>-->
</div>
<?php endif; ?>
<br>
<script>

@ -10,11 +10,13 @@ function pf_utf8_encode(string $string): string {
return iconv("ISO-8859-1", "UTF-8", $string);
}
function hasProfileSetting($setting, $default) {
function hasProfileSetting($setting, $default, $target = null) {
global $_PROFILE;
if (isset($_PROFILE["ultra"]) && $_PROFILE["ultra"] && isset($_PROFILE["studio_settings"]) && isset($_PROFILE["studio_settings"]["profile"]) && isset($_PROFILE["studio_settings"]["profile"][$setting])) {
return $_PROFILE["studio_settings"]["profile"][$setting];
if ($target === null) $target = $_PROFILE;
if (isset($target["ultra"]) && $target["ultra"] && isset($target["studio_settings"]) && isset($target["studio_settings"]["profile"]) && isset($target["studio_settings"]["profile"][$setting])) {
return $target["studio_settings"]["profile"][$setting];
} else {
return $default;
}
@ -60,7 +62,7 @@ function search($query, $ignoreExact = false, $ignoreProfiles = false): array {
"id" => $id,
"type" => "articles",
"url" => "/articles/" . $id,
"name" => $data["title"],
"name" => getNameFromId($id),
"extract" => strip_tags($data["contents"] ?? "")
];
}, array_values(array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles"), function ($i) { return str_ends_with($i, ".json"); }))),
@ -73,7 +75,7 @@ function search($query, $ignoreExact = false, $ignoreProfiles = false): array {
"id" => $id,
"type" => "gallery",
"url" => "/gallery/" . $id,
"name" => $data["title"],
"name" => getNameFromId($id),
"extract" => strip_tags($data["contents"] ?? "")
];
}, array_values(array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery"), function ($i) { return str_ends_with($i, ".json"); }))),
@ -199,8 +201,8 @@ function listArticles() {
?>
<div class="list-group">
<?php foreach ($articles as $person): $data = json_decode(pf_utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles/" . $person)), true); ?>
<a href="/articles/<?= explode(".", $person)[0] ?>" class="list-group-item list-group-item-action <?= $_SERVER['REQUEST_URI'] === "/articles/" . explode(".", $person)[0] ? "list-group-item-primary" : "" ?>"><?= $data["title"] ?></a>
<?php foreach ($articles as $person): ?>
<a href="/articles/<?= explode(".", $person)[0] ?>" class="list-group-item list-group-item-action <?= $_SERVER['REQUEST_URI'] === "/articles/" . explode(".", $person)[0] ? "list-group-item-primary" : "" ?>"><?= getNameFromId(explode(".", $person)[0]) ?></a>
<?php endforeach; ?>
</div>
<?php }
@ -216,7 +218,7 @@ function listAlbums() {
?>
<div class="list-group">
<?php foreach ($articles as $person): $data = json_decode(pf_utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery/" . $person)), true); ?>
<a href="/gallery/<?= explode(".", $person)[0] ?>" class="list-group-item list-group-item-action <?= $_SERVER['REQUEST_URI'] === "/gallery/" . explode(".", $person)[0] ? "list-group-item-primary" : "" ?>"><?= $data["title"] ?></a>
<a href="/gallery/<?= explode(".", $person)[0] ?>" class="list-group-item list-group-item-action <?= $_SERVER['REQUEST_URI'] === "/gallery/" . explode(".", $person)[0] ? "list-group-item-primary" : "" ?>"><?= getNameFromId(explode(".", $person)[0]) ?></a>
<?php endforeach; ?>
</div>
<?php }
@ -356,9 +358,13 @@ function getNameFromId($id) {
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $id . ".json")) {
return json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $id . ".json")), true)["first_name"] . " " . json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/people/" . $id . ".json")), true)["last_name"];
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"] . "/includes/data/gallery/" . $id . ".json")) {
return json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/gallery/" . $id . ".json")), true)["title"];
$data = json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/gallery/" . $id . ".json")), true);
return $data["title"][l("lang__name")] ?? $data["title"]["en"] ?? $data["title"][array_keys($data["title"])[0]] ?? "-";
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"] . "/includes/data/articles/" . $id . ".json")) {
return json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/articles/" . $id . ".json")), true)["title"];
$data = json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/articles/" . $id . ".json")), true);
return $data["title"][l("lang__name")] ?? $data["title"]["en"] ?? $data["title"][array_keys($data["title"])[0]] ?? "-";
} elseif (file_exists($_SERVER["DOCUMENT_ROOT"] . "/includes/data/profiles/" . $id . ".json")) {
$d = json_decode(pf_utf8_decode(file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/includes/data/profiles/" . $id . ".json")), true);
return $d["nick_name"] ?? $d["first_name"] . " " . $d["last_name"];

@ -49,7 +49,7 @@ if (isset($_PROFILE)) {
$userPalette = $palettes["list"][$palettes["default"]]["light"];
if (isset($_PROFILE)) {
if (isset($_PROFILE) && !isset($_COOKIE["DeltaKiosk"])) {
if (isset($_PROFILE["studio_settings"]) && isset($_PROFILE["studio_settings"]["theme"]) && isset($_PROFILE["ultra"]) && $_PROFILE["ultra"] && isset($palettes["list"][$_PROFILE["studio_settings"]["theme"]])) {
$userPalette = $palettes["list"][$_PROFILE["studio_settings"]["theme"]][$_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
}
@ -61,7 +61,7 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id .
$_ = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id . ".json"), true);
if (isset($_["ultra"]) && $_["ultra"] && isset($_["studio_settings"]) && isset($_["studio_settings"]["profile"]["theme"]) && $_["studio_settings"]["profile"]["theme"] !== -1 && isset($palettes["list"][$_["studio_settings"]["profile"]["theme"]])) {
$userPalette = $palettes["list"][$_["studio_settings"]["profile"]["theme"]][$_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
$userPalette = $palettes["list"][$_["studio_settings"]["profile"]["theme"]][!isset($_COOKIE["DeltaKiosk"]) && $_PROFILE["studio_settings"]["dark"] === true ? "dark" : "light"];
}
}
@ -295,10 +295,13 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id .
}
}
@media (max-width: 767px) {
#profile-grid, #profile-grid-2 {
grid-template-columns: 1fr !important;
grid-row-gap: 20px;
@media (max-width: 1250px) {
#badges-desktop {
display: none !important;
}
#badges-mobile {
display: block !important;
}
}
@ -308,6 +311,47 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id .
}
}
@media (max-width: 986px) {
#badges-desktop {
display: inline-block !important;
}
#badges-mobile {
display: none !important;
}
}
@media (max-width: 767px) {
#profile-grid, #profile-grid-2 {
grid-template-columns: 1fr !important;
grid-row-gap: 20px;
}
#badges-desktop {
display: none !important;
}
#badges-mobile {
display: block !important;
}
}
.ellipsis {
max-width: 100%;
white-space: nowrap;
overflow: hidden !important;
text-overflow: ellipsis;
}
.ck-balloon-rotator, .ck-balloon-rotator__navigation, .ck-balloon-rotator__content {
z-index: 9999 !important;
}
.ck-body-wrapper {
top: 0;
position: fixed;
}
@media (max-width: 387px) {
#profile-grid-user {
grid-template-columns: 1fr !important;
@ -352,6 +396,23 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id .
font-family: "Josefin Sans";
}
@font-face {
src: url("/font-regular.ttf");
font-family: "Nunito";
font-style: normal;
}
@font-face {
src: url("/font-italic.ttf");
font-family: "Nunito";
font-style: italic;
}
@font-face {
src: url("/title.ttf");
font-family: "Josefin Sans";
}
.newnav-link:hover {
opacity: .75;
}
@ -380,7 +441,15 @@ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $_id .
font-weight: bold !important;
}
* {
font-family: "Nunito",system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
}
<?php if (isset($_COOKIE["DeltaHandoffPalette"])): ?>
* {
font-family: system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
}
#desktop-navigation {
display: none;
}

@ -0,0 +1,32 @@
<?php
header("Content-Type: application/json");
$requests = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json"), true);
$data = [
"success" => false
];
function encode($string) {
return preg_replace("/[^a-zA-Z0-9.]/m", "", base64_encode($string));
}
if (isset($_GET["id"]) && isset($_GET["key"]) && in_array($_GET["id"], array_map(function ($i) { return $i["id"]; }, $requests))) {
foreach ($requests as $index => $request) {
if ($request["id"] === $_GET["id"] && $request["key"] === $_GET["key"] && time() - strtotime($request["date"]) < 60) {
$data["success"] = true;
$token = encode(openssl_random_pseudo_bytes(128));
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/../tokens/" . $token, json_encode([
"user" => $request["user"],
"date" => date('c')
]));
$requests[$index]["token"] = $token;
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json", json_encode($requests, JSON_PRETTY_PRINT));
break;
}
}
}
die(json_encode($data, JSON_PRETTY_PRINT));

@ -0,0 +1,21 @@
<?php
header("Content-Type: application/json");
$requests = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json"), true);
$data = [
"token" => null
];
if (isset($_GET["id"]) && in_array($_GET["id"], array_map(function ($i) { return $i["id"]; }, $requests))) {
foreach ($requests as $index => $request) {
if ($request["id"] === $_GET["id"] && isset($request["token"]) && time() - strtotime($request["date"]) < 90) {
$data["token"] = $request["token"];
unset($requests[$index]["token"]);
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json", json_encode($requests, JSON_PRETTY_PRINT));
break;
}
}
}
die(json_encode($data, JSON_PRETTY_PRINT));

@ -0,0 +1,23 @@
<?php
header("Content-Type: application/json");
$users = array_map(function ($i) { return substr($i, 0, -5); }, array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles"), function ($i) { return !str_starts_with($i, "."); }));
$users = array_filter($users, function ($id) {
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles/" . $id . ".json"), true);
return $data["kiosk"] && $data["blocked"] < 3;
});
$data = [];
foreach ($users as $user) {
$userData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles/" . $user . ".json"), true);
$data[] = [
"id" => $user,
"name" => strtoupper($userData["last_name"]) . " " . ucwords($userData["first_name"])
];
}
die(json_encode($data, JSON_PRETTY_PRINT));

@ -0,0 +1,64 @@
<?php
header("Content-Type: application/json");
$config = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../email.json"), true);
$users = array_map(function ($i) { return substr($i, 0, -5); }, array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles"), function ($i) { return !str_starts_with($i, "."); }));
$users = array_filter($users, function ($id) {
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles/" . $id . ".json"), true);
return $data["kiosk"];
});
function uuid() {
$data = openssl_random_pseudo_bytes(16);
assert(strlen($data) == 16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function token() {
$data = openssl_random_pseudo_bytes(64);
return bin2hex($data);
}
$data = [
"id" => uuid(),
"ok" => false
];
$key = token();
if (isset($_GET["id"]) && in_array($_GET["id"], $users)) {
$userData = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../data/profiles/" . $_GET["id"] . ".json"), true);
$requests = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json"), true);
$requests[] = [
"id" => $data["id"],
"user" => $_GET["id"],
"key" => $key,
"date" => date('c')
];
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/../kiosk.json", json_encode($requests, JSON_PRETTY_PRINT));
file_get_contents('https://notifications.equestria.dev/delta', false, stream_context_create([
'http' => [
'method' => 'POST',
'header' =>
"Content-Type: text/plain\r\n" .
"Title: Approve log in request?\r\n" .
"Priority: default\r\n" .
"Tags: delta\r\n" .
"Actions: http, Approve, http://192.168.1.121:8081/dev.equestria.delta.kiosk.ApproveLogin/?id=" . $data["id"] . "&key=" . $key . ", clear=true\r\n" .
"Authorization: Basic " . base64_encode($config["ntfyuser"] . ":" . $config["ntfypass"]),
'content' => $userData["first_name"] . " " . $userData["last_name"] . " (" . $_GET["id"] . ") is trying to log in to Delta from a kiosk, do you want to approve it?"
]
]));
$data["ok"] = true;
}
die(json_encode($data, JSON_PRETTY_PRINT));

@ -1 +1,4 @@
kiosk
<?php
header("HTTP/1.1 400 Bad Request");
die();

@ -1,9 +1,13 @@
<?php global $unreadAlerts; global $_USER; global $_PROFILE; global $betaEligible; ?>
<style>
<?php if (!isset($_COOKIE["DeltaHandoffPalette"]) && !isset($_GET["frameless"])): ?>
#desktop-navigation-mobile {
display: none;
}
@media (max-width: 990px) {
#mobile-navigation {
display: flex;
display: block;
}
#desktop-navigation {
@ -13,6 +17,26 @@
#footer {
display: block;
}
#page {
padding-top: 35px;
}
#desktop-navigation.mobile-show {
display: grid;
position: fixed;
top: 0;
bottom 0;
left: 0;
right: 0;
background-color: var(--bs-body-bg);
z-index: 9999;
grid-template-rows: 36px 57px 1fr 60px;
}
#desktop-navigation.mobile-show #desktop-navigation-mobile {
display: block;
}
}
@media (min-width: 990px) {
@ -63,6 +87,14 @@
</style>
<div id="desktop-navigation" style="overflow: auto; height: 100vh;">
<div id="desktop-navigation-mobile" style="border-bottom: 1px solid rgba(0, 0, 0, .1);background-color: var(--bs-light);">
<a onclick="hideNav();" style="display: block; cursor: pointer; padding: 5px 10px;">
<div>
<img src="/icons/close.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_hide") ?></span>
</div>
</a>
</div>
<div style="background-color: var(--bs-light); padding: 10px;">
<div class="dropdown" style="display:inline-block;">
<span class="user-nav nav-link no-opacity" data-bs-toggle="dropdown"><div style="margin-top: <?= $_PROFILE["plus"] ? "0" : "2px" ?>;" class="profile-border <?= $_PROFILE["ultra"] ? "profile-border-ultra" : ($_PROFILE["plus"] ? "profile-border-plus" : "") ?>"><div class="profile-border-inner <?= $_PROFILE["plus"] ? "profile-border-inner-active" : "" ?>"><img src="<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_USER . ".jpg") ? "/uploads/" . $_USER . ".jpg" : "/icons/defaultuser.svg" ?>" style="width: 32px;border-radius: 999px;"></div></div></span>
@ -263,105 +295,23 @@
</div>
</div>
<nav id="mobile-navigation" class="navbar navbar-expand-lg bg-light navbar-light">
<div class="container-fluid">
<a class="navbar-brand" href="/">
<img src="/logo.svg" style="width: 24px;margin-top: -5px;">
<span style="font-family: 'Josefin Sans', sans-serif; font-weight: bold; vertical-align: middle;">Delta</span>
<span style="vertical-align: middle;">
<?php $v = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version")); ?>
<?php if (str_contains($v, "-beta")): ?>
<span class="badge bg-success rounded-pill" style="font-size:12px; vertical-align: middle; margin-top: -7px;">Beta</span>
<?php endif; ?>
</span>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav" style="width: 100%;">
<li class="nav-item">
<a class="nav-link" href="/people"><img class="icon" src="/icons/people.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_people") ?></span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/articles"><img class="icon" src="/icons/articles.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_articles") ?></span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/gallery"><img class="icon" src="/icons/gallery.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_gallery") ?></span></a>
</li>
<!--<li class="nav-item">
<a class="nav-link" href="/events"><img src="/icons/events.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_events") ?></span></a>
</li>-->
<li class="nav-item">
<a class="nav-link" href="/search"><img class="icon" src="/icons/search.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_search") ?></span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/profile"><img class="icon" src="/icons/profiles.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_profile") ?></span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="/alerts"><img class="icon" src="/icons/messages.svg"><span style="vertical-align: middle; margin-left: 5px;"><?= l("lang_navigation_messages") ?><?php if ($unreadAlerts > 0): ?> <span class="badge rounded-pill bg-danger"><?= $unreadAlerts ?></span><?php endif; ?></span></a>
</li>
<?php if (isset($_PROFILE["admin"]) && $_PROFILE["admin"]): ?>
<li class="nav-item">
<a class="nav-link" href="/admin"><img class="icon" src="/icons/admin.svg"><span style="vertical-align: middle; margin-left: 5px;">Admin</span></a>
</li>
<?php endif; ?>
<?php if (!$_PROFILE["plus"]): ?>
<li class="nav-item" style="margin-left: auto; margin-top: 2px;">
<a class="nav-link" href="/plus"><img style="width: 24px; height: 24px;" src="/icons/upgrade.svg"></a>
</li>
<?php endif; ?>
<li class="nav-item" style="<?= $_PROFILE["plus"] ? "margin-left: auto;" : "" ?>">
<div class="dropdown">
<span class="user-nav nav-link no-opacity" data-bs-toggle="dropdown"><div class="profile-border <?= $_PROFILE["ultra"] ? "profile-border-ultra" : ($_PROFILE["plus"] ? "profile-border-plus" : "") ?>"><div class="profile-border-inner <?= $_PROFILE["plus"] ? "profile-border-inner-active" : "" ?>"><img src="<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_USER . ".jpg") ? "/uploads/" . $_USER . ".jpg" : "/icons/defaultuser.svg" ?>" style="width: 32px;border-radius: 999px;"></div></div></span>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="/profile/<?= $_USER ?>"><b><?= $_PROFILE["nick_name"] ?? $_PROFILE["first_name"] . " " . $_PROFILE["last_name"] ?> <?php if ($_PROFILE["plus"] && !$_PROFILE["ultra"]): ?> <span class="badge badge-plus rounded-pill" style="vertical-align: middle;">PLUS</span><?php elseif ($_PROFILE["plus"] && $_PROFILE["ultra"]): ?> <span class="badge badge-ultra rounded-pill" style="vertical-align: middle;">ULTRA</span><?php endif; ?></b></a></li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item" href="/edit/<?= $_USER ?>">
<img src="/icons/edit.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_user_edit") ?></span>
</a>
</li>
<li>
<a class="dropdown-item" href="/plus">
<img src="/icons/subscription.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_user_subscriptions") ?></span>
</a>
</li>
<li>
<a class="dropdown-item" href="/requests">
<img src="/icons/requests.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_user_requests") ?></span>
</a>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item" href="/support">
<img src="/icons/help.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_user_help") ?></span>
</a>
</li>
<li>
<a class="dropdown-item" href="/logout">
<img src="/icons/logout.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_user_logout") ?></span>
</a>
</li>
</ul>
</div>
</li>
</ul>
<nav id="mobile-navigation" class="bg-light" style="height: 35px; position: fixed;left: 0; right: 0;">
<a onclick="showNav();" style="display: block; cursor: pointer; padding: 5px 10px;">
<div>
<img src="/icons/menu.svg" class="icon">
<span style="vertical-align: middle;"><?= l("lang_navigation_show") ?></span>
</div>
</div>
</a>
</nav>
<script>
function showNav() {
document.getElementById("desktop-navigation").classList.add("mobile-show");
}
function hideNav() {
document.getElementById("desktop-navigation").classList.remove("mobile-show");
}
</script>
<div id="page">

@ -1,5 +1,7 @@
{
"title": "[insert here]",
"title": {
"en": "[insert here]"
},
"contents": null,
"update": null,
"update_user": null

@ -1,5 +1,7 @@
{
"title": "[insert here]",
"title": {
"en": "[insert here]"
},
"contents": null,
"update": null,
"update_user": null,

@ -1,5 +1,6 @@
{
"language": "fr",
"kiosk": false,
"blocked": 0,
"last_blocked": 0,
"first_name": "[insert here]",

@ -9,7 +9,7 @@ global $_PROFILE; global $_USER;
function showPage($item) { ?>
<a href="/<?= $item["_type"] ?>/<?= $item["_id"] ?>" class="list-group-item list-group-item-action">
<p style="margin-bottom: 10px;"><img class="icon" src="/icons/<?= $item["_type"] ?>.svg" style="margin-right:5px;"><span style="vertical-align: middle;"><b><?= $item["title"] ?? $item["first_name"] . " " . $item["last_name"] ?></b> <?= l("lang_home_update") ?> <b><?= timeAgo($item["update"]) ?></b></span></p><?= trim(strip_tags($item["contents"])) !== "" ? substr(trim(strip_tags($item["contents"])), 0, 150) . (strlen(trim(strip_tags($item["contents"]))) > 150 ? "…" : "") : "-" ?>
<p style="margin-bottom: 10px;"><img class="icon" src="/icons/<?= $item["_type"] ?>.svg" style="margin-right:5px;"><span style="vertical-align: middle;"><b><?= getNameFromId($item["_id"]) ?></b> <?= l("lang_home_update") ?> <b><?= timeAgo($item["update"]) ?></b></span></p><?= trim(strip_tags($item["contents"])) !== "" ? substr(trim(strip_tags($item["contents"])), 0, 150) . (strlen(trim(strip_tags($item["contents"]))) > 150 ? "…" : "") : "-" ?>
</a>
<?php } ?>
@ -38,7 +38,7 @@ function showPage($item) { ?>
$r["_id"] = substr($i, 0, -5);
return $r;
}, array_values(array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles"), function ($i) { return str_ends_with($i, ".json"); }))), function ($i) {
return substr($i["birth"], 5) === date('m-d');
return hasProfileSetting("birth", true, $i) && substr($i["birth"], 5) === date('m-d');
}));
?>

@ -65,6 +65,8 @@
"dec": "December"
},
"navigation": {
"show": "Menu",
"hide": "Close",
"people": "People",
"articles": "Articles",
"gallery": "Gallery",
@ -214,6 +216,7 @@
"never": "Never logged in"
},
"plus": {
"kiosk": "For security reasons, you cannot update your Delta subscription from a Delta kiosk. Open this page on your own device to update your subscription.",
"coins": "coins",
"intro": "Get exclusive perks for Delta and unique features while supporting the developers",
"buy": "Get it now%1 (starting %2 coins/month)",
@ -734,8 +737,10 @@
},
"details": {
"most": "Most viewed pages:",
"requests": "Latest change requests:"
}
"requests": "Latest change requests:",
"none": "No pending requests."
},
"kiosk": "Delta Studio theming options are not available when using a Delta kiosk. Open this page on your own device to change these settings."
},
"badges": {
"admin": "Delta staff",

@ -65,6 +65,8 @@
"dec": "décembre"
},
"navigation": {
"show": "Menu",
"close": "Fermer",
"people": "Personnes",
"articles": "Articles",
"gallery": "Galerie",
@ -214,6 +216,7 @@
"never": "Ne s'est jamais connecté(e)"
},
"plus": {
"kiosk": "Pour des raisons de sécurité, vous ne pouvez pas changer d'abonnement Delta depuis un kiosque Delta. Ouvrez cette page sur votre propre appareil pour mettre à jour votre abonnement.",
"coins": "pièces",
"intro": "Obtenez des options exclusives pour Delta tout en soutenant les développeurs",
"buy": "Acheter maintenant%1 (à partir de %2 pièces/mois)",
@ -472,7 +475,7 @@
"message": [
"Bonjour,",
"Les choses ont changé sur Delta depuis votre dernière visite. Voici ce qu'il s'est passé :",
"Vous trouverez ces messages sur la page « Alertes » de Delta, où vous pouvez les marquer comme lues. You will only get this email once."
"Vous trouverez ces messages sur la page « Alertes » de Delta, où vous pouvez les marquer comme lues. Vous ne recevrez ce courriel qu'une seule fois."
]
},
"login": {
@ -569,10 +572,10 @@
"types": [
[
"Je ne parviens pas à me connecter à Delta",
"Je ne reçois pas d'emails de Delta",
"Je souhaite changer mon adresse email",
"Je veux empêcher les emails de Delta d'aller dans mon dossier de spam",
"Je ne reçois pas d'emails pour les nouvelles alertes",
"Je ne reçois pas de courriels de Delta",
"Je souhaite changer mon adresse courriel",
"Je veux empêcher les courriels de Delta d'aller dans mon dossier de spam",
"Je ne reçois pas de courriels pour les nouvelles alertes",
"Mon problème n'est pas dans la liste ci-dessus"
],
[
@ -617,7 +620,7 @@
[
"Je ne peux pas marquer une alerte comme (non) lue",
"Je ne reçois aucune alerte",
"Je ne reçois pas d'emails pour les nouvelles alertes",
"Je ne reçois pas de courriels pour les nouvelles alertes",
"Je ne reçois pas de notifications pour les nouvelles alertes (abonnés Delta Ultra)",
"Je ne vois aucune alerte",
"Mon problème n'est pas dans la liste ci-dessus"
@ -665,10 +668,10 @@
"warning": "Ne donnez jamais de code de connexion aux administrateurs et ne changez aucun paramètre, même lorsqu'un(e) administrateur(ice) le demande. À la place, vous pourriez avoir besoin de donner ce code : %1.",
"phone": [
"Vous pouvez contacter les administrateurs en envoyant des messages SMS et/ou des messages Signal (en utilisant l'application Signal sur votre téléphone) au %1. Assurez-vous de mentionner que vous êtes un utilisateur Delta.",
"Notze que vous devez envoyer un message et ne pas appeler le numéro ci-dessus, car les administrateurs ne répondent pas aux appels de personnes non-enregistrées. Toute tentative d'appel n'obtiendra pas de réponse."
"Notez que vous devez envoyer un message et ne pas appeler le numéro ci-dessus, car les administrateurs ne répondent pas aux appels de personnes non-enregistrées. Toute tentative d'appel n'obtiendra pas de réponse."
],
"email": [
"Vous pouvez contacter les administrateurs par courriel à %1. Assurez-vous de mentionner que vous êtes un utilisateur Delta, et ajoutez des détails précis sur le problème que vous rencontrez pour qu'il soit réglé rapidement.",
"Vous pouvez contacter les administrateurs par courriel à %1. Assurez-vous de mentionner que vous êtes un utilisateur Delta, et ajoutez des détails précis sur le problème que vous rencontrez pour qu'il soit réglé rapidement.",
"Votre demande par courriel peut prendre jusqu'à une semaine avant de recevoir une réponse initiale. Utilisez l'aide par courriel uniquement si vous ne pouvez pas utiliser l'aide par SMS/Signal. Toute demande qui ne donne pas suffisament d'information sera ignorée."
]
}
@ -692,5 +695,56 @@
"root": "Installé à",
"network": "Routage réseau",
"new": "Nouveau"
},
"studio": {
"title": "Delta Studio",
"theme": "Thème",
"dark": "Thème sombre",
"light": "Thème clair",
"profile": "Profil",
"on": "Oui",
"off": "Non",
"redacted": "[caviardé]",
"settings": {
"badge": {
"title": "Montrer le badge d'abonnement",
"description": "Afficher le badge Delta Ultra à côté de votre nom"
},
"detailed": {
"title": "Informations statistiques détaillées",
"description": "Afficher plus d'informations sur vous, telles que vos pages les plus visitées"
},
"photo": {
"title": "Montrer la photo de profil",
"description": "Afficher votre photo de profil à côté des autres informations personnelles"
},
"hide": {
"title": "Cacher les informations statistiques",
"description": "Masquer toutes les statistiques (dates et demandes en attente)"
},
"birth": {
"title": "Montrer la date de naissance complète",
"description": "Afficher votre date de naissance à côté de votre age"
},
"phone": {
"title": "Montrer le numéro de téléphone",
"description": "Afficher votre numéro de téléphone sur votre profil"
},
"email": {
"title": "Montrer l'adresse courriel",
"description": "Afficher votre adresse courriel sur votre profil"
}
},
"details": {
"most": "Les plus visitées :",
"requests": "Dernières demandes :",
"none": "Pas de demandes en attente."
},
"kiosk": "Les options de thème Delta Studio ne sont pas disponibles sur les kiosques Delta. Ouvrez cette page sur votre propre appareil pour modifier ces paramètres."
},
"badges": {
"admin": "Personnel Delta",
"eap": "Accès anticipé",
"hunter": "Chasseurs de bugs Delta"
}
}

@ -122,8 +122,14 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
</div>
<?php endif; ?>
<?php if (isset($_COOKIE["DeltaKiosk"])): ?>
<div class="alert alert-secondary">
<?= l("lang_plus_kiosk") ?>
</div>
<?php else: ?>
<a class="btn btn-primary" href="/plus/subscribe/?plan=<?= $_GET["plan"] ?>&confirm"><?= str_replace("%1", l($planTarget > $currentPlan ? "lang_plus_confirm_up2" : "lang_plus_confirm_down2"), l("lang_plus_confirm_proceed")) ?></a><br>
<small class="text-muted"><?= l("lang_plus_confirm_email") ?></small>
<?php endif; ?>
<?php else: ?>
<div class="alert alert-danger">
<?= str_replace("%3", $planTargetName, str_replace("%2", $updateCost, str_replace("%1", $_PROFILE["balance"], l("lang_plus_confirm_missing")))) ?>

@ -46,6 +46,11 @@ function check($name, $description, $checked, $actionOn, $actionOff, $disable =
<h3><?= l("lang_studio_theme") ?></h3>
<?php if (isset($_COOKIE["DeltaKiosk"])): ?>
<div class="alert alert-secondary">
<?= l("lang_studio_kiosk") ?>
</div>
<?php else: ?>
<div style="margin-top: 20px; display: grid; grid-gap: 15px; grid-template-columns: repeat(<?= count($palettes["list"]) ?>, 1fr);">
<?php foreach ($palettes["list"] as $index => $palette): ?>
<a class="studio-theme" href="/studio/theme/?id=<?= $index ?>">
@ -58,6 +63,7 @@ function check($name, $description, $checked, $actionOn, $actionOff, $disable =
<a href="/studio/light/?dark" type="button" class="btn <?= $_PROFILE["studio_settings"]["dark"] ? "btn-primary" : "btn-outline-primary" ?>"><?= l("lang_studio_dark") ?></a>
<a href="/studio/light/?light" type="button" class="btn <?= !$_PROFILE["studio_settings"]["dark"] ? "btn-primary" : "btn-outline-primary" ?>"><?= l("lang_studio_light") ?></a>
</div>
<?php endif; ?>
<h3 style="margin-top: 20px;"><?= l("lang_studio_profile") ?></h3>
<div style="margin-top: 20px; display: grid; grid-gap: 15px; grid-template-columns: repeat(<?= count($palettes["list"]) + 1 ?>, 1fr);">
@ -82,7 +88,7 @@ function check($name, $description, $checked, $actionOn, $actionOff, $disable =
<?php check(l("lang_studio_settings_email_title"), l("lang_studio_settings_email_description"), $_PROFILE["studio_settings"]["profile"]["email"], "/studio/profile/?id=email&value=1", "/studio/profile/?id=email&value=0") ?>
<?php check(l("lang_studio_settings_detailed_title"), l("lang_studio_settings_detailed_description"), $_PROFILE["studio_settings"]["profile"]["detailed"], "/studio/profile/?id=detailed&value=1", "/studio/profile/?id=detailed&value=0", true) ?>
<?php check(l("lang_studio_settings_detailed_title"), l("lang_studio_settings_detailed_description"), $_PROFILE["studio_settings"]["profile"]["detailed"], "/studio/profile/?id=detailed&value=1", "/studio/profile/?id=detailed&value=0") ?>
<?php check(l("lang_studio_settings_hide_title"), l("lang_studio_settings_hide_description"), $_PROFILE["studio_settings"]["profile"]["hide"], "/studio/profile/?id=hide&value=1", "/studio/profile/?id=hide&value=0") ?>
</div>

Loading…
Cancel
Save