diff options
| author | ilotterytea <iltsu@alright.party> | 2025-12-09 16:50:07 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2025-12-09 16:50:07 +0500 |
| commit | 8925a9526a1d3eac914030b3069713f56c37e55a (patch) | |
| tree | 2811f088ab13168658d8ac8ba9f15d01ffb49249 /emotesets | |
| parent | 77c7d534f46392f62b56305ec8b71eecff3b9221 (diff) | |
feat: emoteset editors
Diffstat (limited to 'emotesets')
| -rw-r--r-- | emotesets/addeditor.php | 54 | ||||
| -rw-r--r-- | emotesets/deleditor.php | 59 | ||||
| -rw-r--r-- | emotesets/index.php | 206 |
3 files changed, 319 insertions, 0 deletions
diff --git a/emotesets/addeditor.php b/emotesets/addeditor.php new file mode 100644 index 0000000..08d1e41 --- /dev/null +++ b/emotesets/addeditor.php @@ -0,0 +1,54 @@ +<?php +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/config.php"; +include "{$_SERVER['DOCUMENT_ROOT']}/lib/accounts.php"; +include "{$_SERVER['DOCUMENT_ROOT']}/lib/alert.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/utils.php"; + +if (!authorize_user(true)) { + return; +} + +if (isset($_SESSION["user_role"]) && !$_SESSION["user_role"]["permission_emoteset_own"]) { + generate_alert("/404.php", "Not enough permissions", 403); + exit; +} + +if (!isset($_POST["id"], $_POST["username"])) { + generate_alert("/emotesets/", "Not enough POST fields"); + exit; +} + +$db = new PDO(CONFIG['database']['url'], CONFIG['database']['user'], CONFIG['database']['pass']); + +// checking emoteset +$emote_set_id = $_POST["id"]; +$stmt = $db->prepare("SELECT id FROM emote_sets WHERE id = ? AND owner_id = ?"); +$stmt->execute([$emote_set_id, $_SESSION['user_id']]); +if ($stmt->rowCount() == 0) { + generate_alert("/emotes", "Emoteset not found", 404); + exit; +} +$emote_set = $stmt->fetch(PDO::FETCH_ASSOC); + +// get user by username +$user_name = $_POST['username']; +$stmt = $db->prepare("SELECT id FROM users WHERE username = ?"); +$stmt->execute([$user_name]); +if ($stmt->rowCount() == 0) { + generate_alert("/404.php", "Username $user_name does not exist", 403); + exit; +} +$user_id = $stmt->fetch(PDO::FETCH_ASSOC)['id']; + +// checking if user has already acquired emote set +$stmt = $db->prepare("SELECT id FROM acquired_emote_sets WHERE user_id = ? AND emote_set_id = ?"); +$stmt->execute([$user_id, $emote_set_id]); +if ($stmt->rowCount() > 0) { + generate_alert("/404.php", "User $user_name has acquired this emoteset.", 409); + exit; +} + +$db->prepare('INSERT INTO acquired_emote_sets(user_id, emote_set_id) VALUES (?, ?)') + ->execute([$user_id, $emote_set_id]); + +generate_alert("/emotesets/?id=$emote_set_id", "This emoteset has been acquired by $user_name.", 200);
\ No newline at end of file diff --git a/emotesets/deleditor.php b/emotesets/deleditor.php new file mode 100644 index 0000000..0476f37 --- /dev/null +++ b/emotesets/deleditor.php @@ -0,0 +1,59 @@ +<?php +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/config.php"; +include "{$_SERVER['DOCUMENT_ROOT']}/lib/accounts.php"; +include "{$_SERVER['DOCUMENT_ROOT']}/lib/alert.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/utils.php"; + +if (!authorize_user(true)) { + return; +} + +$d = $_POST; +if ($_SERVER['REQUEST_METHOD'] === 'GET') { + $d = $_GET; +} + +if (isset($_SESSION["user_role"]) && !$_SESSION["user_role"]["permission_emoteset_own"]) { + generate_alert("/404.php", "Not enough permissions", 403); + exit; +} + +if (!isset($d["id"], $d["username"])) { + generate_alert("/emotesets/", "Not enough POST fields"); + exit; +} + +$db = new PDO(CONFIG['database']['url'], CONFIG['database']['user'], CONFIG['database']['pass']); + +// checking emoteset +$emote_set_id = $d["id"]; +$stmt = $db->prepare("SELECT id FROM emote_sets WHERE id = ? AND owner_id = ?"); +$stmt->execute([$emote_set_id, $_SESSION['user_id']]); +if ($stmt->rowCount() == 0) { + generate_alert("/emotes", "Emoteset not found", 404); + exit; +} +$emote_set = $stmt->fetch(PDO::FETCH_ASSOC); + +// get user by username +$user_name = $d['username']; +$stmt = $db->prepare("SELECT id FROM users WHERE username = ?"); +$stmt->execute([$user_name]); +if ($stmt->rowCount() == 0) { + generate_alert("/404.php", "Username $user_name does not exist", 403); + exit; +} +$user_id = $stmt->fetch(PDO::FETCH_ASSOC)['id']; + +// checking if user has already acquired emote set +$stmt = $db->prepare("SELECT id FROM acquired_emote_sets WHERE user_id = ? AND emote_set_id = ?"); +$stmt->execute([$user_id, $emote_set_id]); +if ($stmt->rowCount() == 0) { + generate_alert("/404.php", "User $user_name has not acquired this emoteset.", 404); + exit; +} + +$db->prepare('DELETE FROM acquired_emote_sets WHERE user_id = ? AND emote_set_id = ?') + ->execute([$user_id, $emote_set_id]); + +generate_alert("/emotesets/?id=$emote_set_id", "User $user_name can not edit this emoteset anymore.", 200);
\ No newline at end of file diff --git a/emotesets/index.php b/emotesets/index.php new file mode 100644 index 0000000..5be3bda --- /dev/null +++ b/emotesets/index.php @@ -0,0 +1,206 @@ +<?php +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/utils.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/config.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/accounts.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/partials.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/alert.php"; +include_once "{$_SERVER['DOCUMENT_ROOT']}/lib/emote.php"; + +authorize_user(); + +$id = $_GET["id"] ?? ""; + +$db = new PDO(CONFIG['database']['url'], CONFIG['database']['user'], CONFIG['database']['pass']); + +// searching requested emoteset +$emote_set = null; + +// global emoteset +if ($id == "global") { + $rows = $db->query("SELECT * FROM emote_sets WHERE is_global = TRUE LIMIT 1", PDO::FETCH_ASSOC); + + if ($rows->rowCount()) { + $emote_set = $rows->fetch(); + } else { + generate_alert("/404.php", "Global emoteset is not found", 404); + exit; + } +} +// featured emoteset +else if ($id == "featured") { + $rows = $db->query("SELECT * FROM emote_sets WHERE is_featured = TRUE LIMIT 1", PDO::FETCH_ASSOC); + + if ($rows->rowCount()) { + $emote_set = $rows->fetch(); + } else { + generate_alert("/404.php", "Featured emoteset is not found", 404); + exit; + } +} +// connected emoteset +else if (isset($_GET["alias_id"])) { + $alias_id = $_GET["alias_id"]; + $platform = $_GET["platform"] ?? "twitch"; + + $stmt = $db->prepare("SELECT es.* FROM emote_sets es + INNER JOIN connections co ON co.alias_id = ? AND co.platform = ? + INNER JOIN acquired_emote_sets aes ON aes.user_id = co.user_id + WHERE aes.is_default = TRUE + "); + $stmt->execute([$alias_id, $platform]); + + if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $emote_set = $row; + } else { + generate_alert("/404.php", "Emoteset is not found for alias ID $alias_id ($platform)", 404); + exit; + } +} +// specified emoteset +else if (!empty($id)) { + $stmt = $db->prepare("SELECT es.* FROM emote_sets es WHERE es.id = ?"); + $stmt->execute([$id]); + + if ($row = $stmt->fetch()) { + $emote_set = $row; + } else { + generate_alert("/404.php", "Emoteset ID $id is not found", 404); + exit; + } +} + +$user_id = $_SESSION["user_id"] ?? ""; +$emote_sets = null; + +// fetching emotes +if ($emote_set) { + $emote_set = Emoteset::from_array_extended($emote_set, $user_id, $db); +} elseif (!CONFIG['emoteset']['public']) { + generate_alert("/404.php", "The public list of emotesets is disabled", 403); + exit; +} else { + $emote_sets = []; + foreach ($db->query("SELECT * FROM emote_sets", PDO::FETCH_ASSOC) as $row) { + array_push($emote_sets, Emoteset::from_array_extended($row, $user_id, $db)); + } +} + +if (CLIENT_REQUIRES_JSON) { + if ($emote_sets != null) { + json_response([ + "status_code" => 200, + "message" => null, + "data" => $emote_sets + ]); + exit; + } else if ($emote_set != null) { + json_response([ + "status_code" => 200, + "message" => null, + "data" => $emote_set + ]); + exit; + } else { + json_response([ + "status_code" => 404, + "message" => "Emoteset(s) not found", + "data" => null + ], 404); + exit; + } +} +?> +<html> + +<head> + <title> + <?php + $title = match ($emote_set == null) { + true => count($emote_sets) . ' emotesets', + false => "Emoteset - {$emote_set->name}", + }; + + echo "$title - " . CONFIG['instance']['name']; + ?> + </title> + <link rel="stylesheet" href="/static/style.css"> + <link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon"> +</head> + +<body> + <div class="container"> + <div class="wrapper"> + <?php html_navigation_bar() ?> + <section class="content row"> + <section class="content"> + <?php display_alert() ?> + + <section class="box"> + <div class="box navtab row"> + <div class="grow"> + <?= $title ?> + </div> + <?php + if (!empty($emote_set)) { + html_emotelist_mode(); + } + ?> + </div> + <div class="box content small-gap items"> + <?php + if (!empty($emote_sets)) { + html_display_emoteset($emote_sets); + } else if (!empty($emote_set)) { + html_display_emotes($emote_set->emotes); + } else { + echo 'Nothing found...'; + } + ?> + </section> + + <?php if (!empty($emote_set)): ?> + <section class="box"> + <?php if (empty($emote_set->editors)): ?> + <p>This emoteset does not have any editors.</p> + <?php else: ?> + <p> + Editors: + <?php foreach ($emote_set->editors as $e): ?> + <a href="/users.php?id=<?= $e['id'] ?>"> + <?= $e['username'] ?> + </a> + <?php if (isset($emote_set->owner, $_SESSION['user_id']) && $emote_set->owner->id == $_SESSION['user_id'] && $e['id'] !== $emote_set->owner->id): ?> + <button> + <a + href="/emotesets/deleditor.php?id=<?= $emote_set->id ?>&username=<?= $e['username'] ?>"> + <img src="/static/img/icons/no.png" alt="X"> + </a> + </button> + <?php endif; ?> + <?php endforeach; ?> + </p> + <?php endif; ?> + </section> + <?php if (isset($_SESSION['user_id'], $emote_set->owner) && $emote_set->owner->id === $_SESSION['user_id']): ?> + <section class="box"> + <div class="navtab box"> + <p>Actions</p> + </div> + <div class="content box"> + <form action="/emotesets/addeditor.php" method="post" class="row small-gap"> + <p>Add editor:</p> + <input type="text" name="id" value="<?= $emote_set->id ?>" style="display:none"> + <input type="text" name="username" placeholder="TinyEmotes username"> + <button type="submit"><img src="/static/img/icons/yes.png" alt="Add"></button> + </form> + </div> + </section> + <?php endif; ?> + <?php endif; ?> + </section> + </section> + </div> + </div> +</body> + +</html>
\ No newline at end of file |
