make default avatar use the avatars table

This commit is contained in:
Lera Elvoé 2025-05-22 02:30:59 +03:00
parent 16127983ab
commit 9438d3704b
Signed by: yagich
SSH Key Fingerprint: SHA256:6xjGb6uA7lAVcULa7byPEN//rQ0wPoG+UzYVMfZnbvc
8 changed files with 47 additions and 7 deletions

3
.gitignore vendored
View File

@ -3,5 +3,6 @@ nginx.conf.compiled
db.*.sqlite db.*.sqlite
.vscode/ .vscode/
.local/ .local/
static/avatars/ static/avatars/*
!static/avatars/default.webp
secrets.lua secrets.lua

View File

@ -150,8 +150,10 @@ app:post("user_clear_avatar", "/:username/clear_avatar", function(self)
if me.id ~= target_user.id then if me.id ~= target_user.id then
return {redirect_to = self:url_for("user", {username = self.params.username})} return {redirect_to = self:url_for("user", {username = self.params.username})}
end end
local old_avatar_id = target_user.avatar_id
util.destroy_avatar(old_avatar_id)
target_user:update({ target_user:update({
avatar_id = db.NULL, avatar_id = 1,
}) })
util.inject_infobox(self, "Avatar cleared.") util.inject_infobox(self, "Avatar cleared.")
return {redirect_to = self:url_for("user_settings", {username = self.params.username})} return {redirect_to = self:url_for("user_settings", {username = self.params.username})}

View File

@ -4,6 +4,17 @@ local constants = require("constants")
local alphabet = "-_@0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVWXYZ" local alphabet = "-_@0123456789abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVWXYZ"
local function create_default_avatar()
if models.Avatars:count() > 0 then
print("default avatar must exist")
return
end
models.Avatars:create({
file_path = "/avatars/default.webp",
uploaded_at = os.time(),
})
end
local function create_admin() local function create_admin()
local username = "admin" local username = "admin"
local root_count = models.Users:count("username = ?", username) local root_count = models.Users:count("username = ?", username)
@ -44,5 +55,6 @@ local function create_deleted_user()
}) })
end end
create_default_avatar()
create_admin() create_admin()
create_deleted_user() create_deleted_user()

View File

@ -52,4 +52,10 @@ return {
[6] = function () [6] = function ()
schema.drop_column("post_history", "user_id") schema.drop_column("post_history", "user_id")
end, end,
[7] = function ()
db.query('DROP INDEX "idx_users_avatar"')
schema.drop_column("users", "avatar_id")
schema.add_column("users", "avatar_id", "REFERENCES avatars(id) DEFAULT 1")
end
} }

View File

@ -25,7 +25,7 @@ function Users_mt:is_logged_in_guest()
end end
function Users_mt:is_default_avatar() function Users_mt:is_default_avatar()
return self.avatar_id == nil return self.avatar_id == 1
end end
function Users_mt:is_logged_in() function Users_mt:is_logged_in()

BIN
static/avatars/default.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -34,9 +34,6 @@ util.TransientUser = {
} }
function util.get_user_avatar_url(req, user) function util.get_user_avatar_url(req, user)
if not user.avatar_id then
return "/avatars/default.webp"
end
return Avatars:find(user.avatar_id).file_path return Avatars:find(user.avatar_id).file_path
end end
@ -72,6 +69,28 @@ function util.validate_and_create_image(input_image, filename)
return true return true
end end
function util.destroy_avatar(avatar_id)
if avatar_id == 1 then
print("won't delete default avatar")
return
end
local avatar = Avatars:find(avatar_id)
if not avatar then
return
end
local file_path = "static" .. avatar.file_path
local f = io.open(file_path, "r")
if not f then
print("can't open avatar file")
else
f:close()
os.remove(file_path)
end
end
function util.get_logged_in_user(req) function util.get_logged_in_user(req)
if req.session.session_key == nil then if req.session.session_key == nil then
return nil return nil

View File

@ -1,7 +1,7 @@
<div class="post" id="post-<%= post.id %>"> <div class="post" id="post-<%= post.id %>">
<div class="usercard"> <div class="usercard">
<a href="<%= url_for("user", {username = post.username}) %>" style="display: contents;"> <a href="<%= url_for("user", {username = post.username}) %>" style="display: contents;">
<img src="<%= post.avatar_path or "/avatars/default.webp" %>" class="avatar"> <img src="<%= post.avatar_path %>" class="avatar">
</a> </a>
<a href="<%= url_for("user", {username = post.username}) %>" class="username-link"><%= post.username %></a> <a href="<%= url_for("user", {username = post.username}) %>" class="username-link"><%= post.username %></a>
<% if post.status ~= "" then %> <% if post.status ~= "" then %>