diff options
Diffstat (limited to 'initial/index.php')
-rw-r--r-- | initial/index.php | 395 |
1 files changed, 395 insertions, 0 deletions
diff --git a/initial/index.php b/initial/index.php new file mode 100644 index 0000000..e7c3fb1 --- /dev/null +++ b/initial/index.php @@ -0,0 +1,395 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.locked.initial.php"; global $_PROFILE; + +if (isset($_GET['s']) && is_numeric($_GET['s']) && $_GET['s'] > -1 && $_GET['s'] < 6) { + $step = (int)$_GET['s']; +} else { + header("Location: ?s=0"); + die(); +} + +switch ($_GET['s']) { + case "0": + $title = "initial"; + break; + case "1": + $title = "initial.1"; + break; + case "2": + $title = "initial.2"; + break; + case "3": + $title = "initial.3"; + break; + case "4": + $title = "initial.4"; + break; + default: + break; +} + +if ($step >= 3) { + if (!isset($_GET['s2-display']) || !is_string($_GET['s2-display']) || trim($_GET['s2-display']) === "") header("Location: ?s=2") and die; + if (!isset($_GET['s2-username']) || !is_string($_GET['s2-username']) || trim($_GET['s2-username']) === "") header("Location: ?s=2") and die; + if (!isset($_GET['s2-plural']) || trim($_GET['s2-plural']) === "" || !is_numeric($_GET['s2-plural'])) header("Location: ?s=2") and die; + + $display = substr(str_replace("\"", "''", strip_tags($_GET['s2-display'])), 0, 30); + $username = preg_replace("/\.+/mi", ".", preg_replace("/[^a-z\d]+/mi", ".", substr(str_replace("\"", "''", strip_tags($_GET['s2-username'])), 0, 30))); + $plural = (int)$_GET['s2-plural']; + + if ($username === ".") header("Location: ?s=2") and die; + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username) || $username === "system" || $username === "users.json" || str_contains($username, "multisocial")) header("Location: ?s=2&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s3-taken" . ($plural === 1 ? "&s2-plural=1" : "")) and die; + + if ($plural === 0 && $step === 3) { + header("Location: ?s=4&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=0&s3-members[0]=&s3-pluralkit=&s2-plural=0") and die; + } + + if ($step >= 4) { + if (!isset($_GET['s3-members']) || !is_array($_GET['s3-members'])) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . ($plural === 1 ? "&s2-plural=1" : "")) and die; + if (!isset($_GET['s3-pluralkit']) || !is_string($_GET['s3-pluralkit'])) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . ($plural === 1 ? "&s2-plural=1" : "")) and die; + + if ($plural === 1) { + if (trim($_GET['s3-members'][0]) === "" && strlen(trim($_GET['s3-pluralkit'])) !== 5 && strlen(trim($_GET['s3-pluralkit'])) !== 18) header("Location: ?s=3&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=1") and die; + } + } + + if ($step === 5) { + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username)) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username); + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/posts")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/posts"); + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings")) mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings"); + + $members = []; + foreach ($_GET['s3-members'] as $member) { + $members[] = [ + 'fronting' => false, + 'name' => substr(str_replace("\"", "''", strip_tags($member)), 0, 30), + 'picture' => null, + 'proxy' => [] + ]; + } + + if (trim($_GET['s3-pluralkit']) !== "") { + $system = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit']), true); + $sysmembers = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit'] . "/members"), true); + $sysfronters = json_decode(file_get_contents("https://api.pluralkit.me/v2/systems/" . $_GET['s3-pluralkit'] . "/fronters"), true); + + $fronters = []; + foreach ($sysfronters['members'] as $fronter) { + $fronters[] = $fronter['id']; + } + + $members = []; + foreach ($sysmembers as $member) { + $members[] = [ + 'fronting' => in_array($member['id'], $fronters), + 'name' => substr(str_replace("\"", "''", strip_tags($member["display_name"] ?? $member["name"])), 0, 30), + 'picture' => $member["avatar_url"], + 'proxy' => $member["proxy_tags"] + ]; + } + } + + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/" . $username . "/settings/plurality.json", json_encode([ + "plural" => $plural === 1, + "picture" => trim($_GET['s3-pluralkit']) !== "" ? ($system['avatar_url'] ?? null) : null, + "displayname" => trim($_GET['s3-pluralkit']) !== "" ? ($system['name'] ?? $display) : $display, + "pluralkit" => trim($_GET['s3-pluralkit']) !== "" ? $_GET['s3-pluralkit'] : null, + "members" => count($members) > 0 ? $members : null + ])); + $users = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json"), true); + $users[$_PROFILE['id']] = $username; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json", json_encode($users)); + header("Location: /") and die(); + } +} + +require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/gui/header.initial.php"; global $lang; global $_PROFILE; global $Parsedown; + +?> + +<?php if ($step === 0): ?> +<div class="container text-center"> + <br> + <h1><?= $lang["intro"]["s0"]["title"] ?></h1> + <h3><?= $lang["intro"]["s0"]["tagline"] ?></h3> + + <?php $users = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/users.json"), true); + if (in_array($_PROFILE['id'], array_keys($users)) && file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/" . $users[$_PROFILE['id']])): ?> + <div class="alert alert-warning"> + <?= $lang['intro']['already'] ?> + </div> + <?php endif; ?> + + <p><?= $lang["intro"]["s0"]["step"] ?></p> + <p> + <a href="?s=1" class="btn btn-primary"><?= $lang["intro"]["s0"]["start"] ?></a> + </p> + <p class="small text-muted"><?= $lang["intro"]["s0"]["disclaimer"] ?></p> +</div> +<?php elseif ($step === 1): ?> + <div class="container text-center"> + <br> + <h1><?= $lang["intro"]["s1"]["title"] ?></h1> + <p><?= $lang["intro"]["s1"]["step"] ?></p> + <div class="tos text-left"> + <?php + + global $langp; + global $Parsedown; + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/includes/terms' . $langp . '.md')) { + echo($Parsedown->text(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/includes/terms/' . $langp . '.md'))); + } else { + echo($Parsedown->text(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/includes/terms/en.md'))); + } + + ?> + </div> + <br> + <p> + <a href="?s=2" class="btn btn-primary"><?= $lang["intro"]["s1"]["start"] ?></a> + </p> + <p class="small text-muted"><?= $lang["intro"]["s1"]["disclaimer"] ?></p> + </div> +<?php elseif ($step === 2): ?> + <div class="container text-center"> + <br> + <h1><?= $lang["intro"]["s2"]["title"] ?></h1> + <p><?= $lang["intro"]["s2"]["step"] ?></p> + + <div class="plural-on"> + <div class="alert alert-warning text-left"> + <b><?= $lang["intro"]["s2"]["plural-disclaimer"] ?></b><br> + <?= str_replace("%1", "<a target='_blank' href='https://pluralkit.me'>PluralKit</a>", $lang["intro"]["s2"]["system"]) ?> + </div> + </div> + + <?php if (isset($_GET['s3-taken']) && isset($_GET['s2-username'])): ?> + <div class="alert alert-danger text-left"> + <?= str_replace("%1", strip_tags($_GET['s2-username']), $lang["intro"]["s2"]["taken"]) ?> + </div> + <?php endif; ?> + + <form action=""> + <input maxlength="30" class="form-control" type="text" autocomplete="off" name="s2-display" onblur="autofillUsername();" onchange="autofillUsername();" placeholder="<?= $lang["intro"]["s2"]["display"] ?>" + <?php if (isset($_GET['s2-display'])): ?> + value="<?= str_replace('"', "\\\"", strip_tags($_GET['s2-display'])) ?>" + <?php endif; ?>><br> + <input maxlength="30" type="text" autocomplete="off" name="s2-username" onclick="correctUsername();" onkeyup="correctUsername();" onkeydown="correctUsername();" class="form-control" placeholder="<?= $lang["intro"]["s2"]["username"] ?>" + <?php if (isset($_GET['s2-username'])): ?> + value="<?= str_replace('"', "\\\"", strip_tags($_GET['s2-username'])) ?>" + <?php endif; ?>> + <input type="hidden" autocomplete="off" name="s2-plural" value="0"> + <input type="hidden" autocomplete="off" name="s" value="3"> + + <br> + <p> + <input type="submit" id="submit" class="btn btn-primary disabled" value="<?= $lang["intro"]["s2"]["start"] ?>"> + </p> + </form> + <p class="small text-muted"> + <span class="plural-off"><a href="#" onclick="enablePlural();"><?= $lang["intro"]["s2"]["plural1"] ?></a> <?= $lang["intro"]["s2"]["plural2"] ?></span> + <a href="#" class="plural-on" onclick="disablePlural();"><?= $lang["intro"]["s2"]["plural3"] ?></a><br> + <?= str_replace("%1", $_PROFILE['profile']['email']['email'], $lang["intro"]["s2"]["disclaimer"]) ?> + </p> + </div> + + <script> + function autofillUsername() { + if (document.getElementsByName("s2-username")[0].value.trim() === "") { + disp = document.getElementsByName("s2-display")[0].value; + document.getElementsByName("s2-username")[0].value = disp.toLowerCase().replace(/[^a-z0-9]+/gmi, ".").replace(/\.+/gmi, ".").replace(/([a-z.]+)\.$/gmi, "$1"); + } + checkIfButtonCanBeEnabled(); + } + + function correctUsername() { + document.getElementsByName("s2-username")[0].value = document.getElementsByName("s2-username")[0].value.toLowerCase().replace(/[^a-z0-9]+/gmi, ".").replace(/\.+/gmi, "."); + checkIfButtonCanBeEnabled(); + } + + function enablePlural() { + document.getElementsByName("s2-plural")[0].value = "1"; + Array.from(document.getElementsByClassName("plural-off")).forEach((i) => { + i.style.display = "none"; + }); + Array.from(document.getElementsByClassName("plural-on")).forEach((i) => { + i.style.display = "initial"; + }); + } + + function checkIfButtonCanBeEnabled() { + if (document.getElementsByName("s2-username")[0].value.trim().length > 0 && document.getElementsByName("s2-display")[0].value.trim().length > 0) { + document.getElementById("submit").classList.remove("disabled"); + } else { + document.getElementById("submit").classList.add("disabled"); + } + } + + function disablePlural() { + document.getElementsByName("s2-plural")[0].value = "0"; + Array.from(document.getElementsByClassName("plural-off")).forEach((i) => { + i.style.display = "initial"; + }); + Array.from(document.getElementsByClassName("plural-on")).forEach((i) => { + i.style.display = "none"; + }); + } + + checkIfButtonCanBeEnabled(); + <?php if (isset($_GET['s2-plural']) && $_GET['s2-plural'] === "1"): ?> + enablePlural(); + <?php endif; ?> + </script> +<?php elseif ($step === 3): ?> + <div class="container text-center"> + <br> + <h1><?= $lang["intro"]["s3"]["title"] ?></h1> + <p><?= $lang["intro"]["s3"]["step"] ?></p> + <p class="text-muted small"> + <?= str_replace("%1", '<a href="' . "?s=4&s2-display=" . urlencode($display) . "&s2-username=" . urlencode($username) . "&s2-plural=0&s3-members[0]=&s3-pluralkit=&s2-plural=0" . '">' . $lang['intro']['s3']['back-action'] . '</a>', $lang['intro']['s3']['back']) ?> + </p> + <form action=""> + <h3><?= $lang["intro"]["s3"]["pluralkit"] ?></h3> + <p><?= $lang["intro"]["s3"]["pk-instructions"] ?></p> + <input maxlength="18" type="text" autocomplete="off" onchange="displayPluralKit();" onkeydown="pluralkitIdCheck();" onkeyup="pluralkitIdCheck();" name="s3-pluralkit" class="form-control" placeholder="<?= $lang["intro"]["s3"]["pk-system"] ?>" + <?php if (isset($_GET['s3-pluralkit'])): ?> + value="<?= str_replace('"', "\\\"", strip_tags($_GET['s3-pluralkit'])) ?>" + <?php endif; ?>> + <div id="pk-system-info" class="small text-left" style="text-align:left !important;"><?= $lang["intro"]["s3"]["pk-refresh-intro"] ?></div> + <br> + + <h3><?= $lang["intro"]["s3"]["manual"] ?></h3> + <p><?= $lang["intro"]["s3"]["manual-or-pk"] ?></p> + <div id="system-members"> + <input onkeydown="systemMembersList();" onkeyup="systemMembersList();" maxlength="30" type="text" autocomplete="off" name="s3-members[0]" data-system-member="0" class="form-control" placeholder="<?= $lang["intro"]["s3"]["manual-system"] ?>"> + </div> + <br> + + <input type="hidden" autocomplete="off" name="s" value="4"> + <input type="hidden" autocomplete="off" name="s2-username" value="<?= $_GET['s2-username'] ?>"> + <input type="hidden" autocomplete="off" name="s2-display" value="<?= $_GET['s2-display'] ?>"> + <input type="hidden" autocomplete="off" name="s2-plural" value="1"> + + <p> + <input type="submit" id="submit" class="btn btn-primary disabled" value="<?= $lang["intro"]["s2"]["start"] ?>"> + </p> + </form> + </div> + +<script> + pluralkitOkay = false; + + function pluralkitIdCheck() { + let el = document.getElementsByName("s3-pluralkit")[0]; + el.value = el.value.toLowerCase().replace(/(([a-z]{1,5}).*|(\d{1,18}).*)/gm, "$2$3") + } + + function systemMembersList() { + try { + if (document.querySelector("#system-members *:nth-last-child(1)").value === "") { + if (document.querySelector("#system-members *:nth-last-child(2)").value === "") { + document.querySelector("#system-members *:nth-last-child(1)").outerHTML = ""; + } + } else { + let id = document.querySelector("#system-members *:nth-last-child(1)").getAttribute("data-system-member") - 1 + 2; + document.querySelector("#system-members").insertAdjacentHTML('beforeend', '<input onkeydown="systemMembersList();" onkeyup="systemMembersList();" maxlength="30" type="text" autocomplete="off" name="s3-members[' + id + ']" data-system-member="' + id + '" class="form-control" placeholder="<?= $lang["intro"]["s3"]["manual-system"] ?>">'); + } + checkIfButtonCanBeEnabled(); + } catch (e) {} + } + + function checkIfButtonCanBeEnabled() { + if (document.getElementsByName("s3-members[0]")[0].value.trim().length > 0 || pluralkitOkay) { + document.getElementById("submit").classList.remove("disabled"); + } else { + document.getElementById("submit").classList.add("disabled"); + } + } + + function displayPluralKit() { + pluralkitOkay = false; + + if (document.getElementsByName("s3-pluralkit")[0].value.trim().length === 5 || document.getElementsByName("s3-pluralkit")[0].value.trim().length === 18) { + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + document.getElementById("pk-system-info").classList.add("text-muted"); + document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-loading"] ?>"; + window.fetch("https://api.pluralkit.me/v2/systems/" + document.getElementsByName("s3-pluralkit")[0].value).then((a) => { + a.text().then((b) => { + data = JSON.parse(b); + window.fetch("https://api.pluralkit.me/v2/systems/" + document.getElementsByName("s3-pluralkit")[0].value + "/members").then((a) => { + a.text().then((b) => { + members = JSON.parse(b); + if (data.code) { + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + document.getElementById("pk-system-info").classList.add("text-danger"); + document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-notfound"] ?>"; + } else { + name = data.name !== null ? data.name.replaceAll("<", "<").replaceAll(">", ">") : ""; + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + pluralkitOkay = true; + checkIfButtonCanBeEnabled(); + if (name.trim() !== "") { + if (members.length > 1) { + document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> " + name + " (<code>" + data.id + "</code>), " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>"; + } else { + document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> " + name + " (<code>" + data.id + "</code>), " + members.length + " <?= $lang['intro']['s3']['pk-refresh-single'] ?>"; + } + } else { + if (members.length > 1) { + document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> <code>" + data.id + "</code>, " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>"; + } else { + document.getElementById("pk-system-info").innerHTML = "<?= $lang["intro"]["s3"]["pk-refresh-found"] ?> <code>" + data.id + "</code>, " + members.length + " <?= $lang['intro']['s3']['pk-refresh-multiple'] ?>"; + } + } + } + }) + }).catch(() => { + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + document.getElementById("pk-system-info").classList.add("text-danger"); + document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-error"] ?>"; + }); + }); + }).catch(() => { + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + document.getElementById("pk-system-info").classList.add("text-danger"); + document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-error"] ?>"; + }); + } else { + document.getElementById("pk-system-info").classList.remove("text-danger"); + document.getElementById("pk-system-info").classList.remove("text-muted"); + document.getElementById("pk-system-info").innerText = "<?= $lang["intro"]["s3"]["pk-refresh-intro"] ?>"; + } + + checkIfButtonCanBeEnabled(); + } + + checkIfButtonCanBeEnabled(); + pluralkitIdCheck(); + displayPluralKit(); +</script> +<?php elseif ($step === 4): ?> + <div class="container text-center"> + <br> + <h1><?= $lang["intro"]["s4"]["title"] ?></h1> + <p><?= $lang["intro"]["s4"]["step"] ?></p> + <p> + <?php + + $sys = ""; + foreach ($_GET['s3-members'] as $id => $member) { + $sys .= "&s3-members[$id]=$member"; + } + + ?> + <a href="?s=5&s2-username=<?= $_GET['s2-username'] ?>&s2-display=<?= $_GET['s2-display'] ?>&s2-plural=<?= $_GET['s2-plural'] ?>&s3-pluralkit=<?= $_GET['s3-pluralkit'] . $sys ?>" class="btn btn-primary"><?= $lang["intro"]["s4"]["start"] ?></a> + </p> + <p class="small text-muted"><?= $lang["intro"]["s4"]["disclaimer"] ?></p> + </div> +<?php endif; ?>
\ No newline at end of file |