id = $arr["id"];
$e->code = $arr["code"];
$e->ext = $arr["ext"] ?? "webp";
$e->uploaded_by = $arr["uploaded_by"];
$e->created_at = strtotime($arr["created_at"] ?? 0);
$e->is_in_user_set = $arr["is_in_user_set"] ?? false;
$e->visibility = $arr["visibility"];
$e->source = $arr["source"] ?? null;
$e->tags = $arr["tags"] ?? [];
if (isset($arr["total_rating"], $arr["average_rating"])) {
$e->rating = [
"total" => $arr["total_rating"],
"average" => $arr["average_rating"]
];
} else {
$e->rating = $arr["rating"] ?? null;
}
return $e;
}
public static function from_array_with_user(array $arr, PDO &$db): Emote
{
if ($arr["uploaded_by"]) {
$arr["uploaded_by"] = User::get_user_by_id($db, $arr["uploaded_by"]);
}
return Emote::from_array($arr);
}
function get_id()
{
return $this->id;
}
function get_code()
{
return $this->code;
}
function get_ext()
{
return $this->ext;
}
function get_created_at()
{
return $this->created_at;
}
function get_uploaded_by()
{
return $this->uploaded_by;
}
function is_added_by_user()
{
return $this->is_in_user_set;
}
function get_rating()
{
return $this->rating;
}
function get_visibility()
{
return $this->visibility;
}
function get_source()
{
return $this->source;
}
function get_tags(): array
{
return $this->tags;
}
}
class Emoteset
{
public string $id;
public string $name;
public User|null $owner;
public array $emotes, $editors;
public bool $is_default;
public static function from_array(array $arr): Emoteset
{
$s = new Emoteset();
$s->id = $arr["id"];
$s->name = $arr["name"];
$s->owner = $arr["owner_id"];
$s->emotes = $arr["emotes"] ?? [];
$s->editors = $arr["editors"] ?? [];
$s->is_default = $arr["is_default"] ?? false;
return $s;
}
public static function from_array_extended(array $arr, string $user_id, PDO &$db): Emoteset
{
if ($arr["owner_id"]) {
$arr["owner_id"] = User::get_user_by_id($db, $arr["owner_id"]);
}
$arr["emotes"] = fetch_all_emotes_from_emoteset($db, $arr["id"], $user_id);
$stmt = $db->prepare('SELECT u.id, u.username FROM users u
INNER JOIN emote_sets es ON es.id = ?
INNER JOIN acquired_emote_sets aes ON aes.emote_set_id = es.id
WHERE aes.user_id = u.id
');
$stmt->execute([$arr["id"]]);
$arr["editors"] = $stmt->fetchAll(PDO::FETCH_ASSOC);
return Emoteset::from_array($arr);
}
public static function get_all_user_emotesets(PDO &$db, string $user_id): array
{
$stmt = $db->prepare("SELECT es.*, aes.is_default FROM emote_sets es
INNER JOIN acquired_emote_sets aes ON aes.emote_set_id = es.id
WHERE aes.user_id = ?
");
$stmt->execute([$user_id]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$emote_sets = [];
foreach ($rows as $row) {
array_push($emote_sets, Emoteset::from_array_extended($row, $user_id, $db));
}
return $emote_sets;
}
}
function fetch_all_emotes_from_emoteset(PDO &$db, string $emote_set_id, string $user_id, int|null $limit = null): array
{
// fetching emotes
$sql = "SELECT
e.id, e.created_at, e.visibility,
CASE
WHEN esc.code IS NOT NULL THEN esc.code
ELSE e.code
END AS code,
CASE
WHEN esc.code IS NOT NULL THEN e.code
ELSE NULL
END AS original_code,
CASE WHEN up.private_profile = FALSE OR up.id = ? THEN e.uploaded_by ELSE NULL END AS uploaded_by
FROM emotes e
LEFT JOIN user_preferences up ON up.id = e.uploaded_by
INNER JOIN emote_set_contents AS esc
ON esc.emote_set_id = ?
WHERE esc.emote_id = e.id";
if ($limit) {
$sql .= " LIMIT $limit";
}
$stmt = $db->prepare($sql);
$stmt->execute([$user_id, $emote_set_id]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$emotes = [];
// fetching uploaders
foreach ($rows as $row) {
if ($row["uploaded_by"]) {
$row["uploaded_by"] = User::get_user_by_id($db, $row["uploaded_by"]);
}
array_push($emotes, Emote::from_array($row));
}
return $emotes;
}
function html_random_emote(PDO &$db)
{
$stmt = $db->prepare("SELECT id, code FROM emotes WHERE visibility = 1 ORDER BY RAND() LIMIT 1");
$stmt->execute();
if ($row = $stmt->fetch()) {
echo ''
?>
Random emote Featured emote
';
}
// icon
echo '
{$e->uploaded_by->username}
"; } echo '$es->name
"; echo '