Work on bio editing
This commit is contained in:
parent
49d0b0a397
commit
223cfb9e46
|
@ -20,86 +20,26 @@ function configure(...)
|
|||
return oldconfigure(...)
|
||||
end
|
||||
|
||||
local function edit_post(req)
|
||||
local function edit_bio(req)
|
||||
local host = http_request_get_host(req)
|
||||
local path = http_request_get_path(req)
|
||||
local author, author_id = session.get(req)
|
||||
|
||||
http_request_populate_post(req)
|
||||
local storyid = tonumber(assert(http_argument_get_string(req,"story")))
|
||||
local title = assert(http_argument_get_string(req,"title"))
|
||||
local text = assert(http_argument_get_string(req,"text"))
|
||||
local pasteas = assert(http_argument_get_string(req,"pasteas"))
|
||||
local markup = assert(http_argument_get_string(req,"markup"))
|
||||
local unlisted = http_argument_get_string(req,"unlisted") == "on"
|
||||
local tags_str = http_argument_get_string(req,"tags")
|
||||
stmnt_author_of:bind_names{
|
||||
id = storyid
|
||||
}
|
||||
local err = util.do_sql(stmnt_author_of)
|
||||
if err ~= sql.ROW then
|
||||
stmnt_author_of:reset()
|
||||
local msg = string.format("No author found for story: %d", storyid)
|
||||
log(LOG_ERR,msg)
|
||||
local response = pages.error{
|
||||
errcode = 404,
|
||||
errcodemsg = "Not Found",
|
||||
explanation = msg,
|
||||
should_traceback = true,
|
||||
}
|
||||
http_response(req,404,response)
|
||||
return
|
||||
end
|
||||
local data = stmnt_author_of:get_values()
|
||||
stmnt_author_of:reset()
|
||||
local realauthor = data[1]
|
||||
assert(realauthor == author_id) --Make sure the author of the story is the currently logged in user
|
||||
|
||||
local parsed = parsers[markup](text)
|
||||
local compr_raw = zlib.compress(text)
|
||||
local compr = zlib.compress(parsed)
|
||||
local tags = {}
|
||||
if tags_str then
|
||||
tags = util.parse_tags(tags_str)
|
||||
end
|
||||
assert(stmnt_update_raw:bind_blob(1,compr_raw) == sql.OK)
|
||||
assert(stmnt_update_raw:bind(2,markup) == sql.OK)
|
||||
assert(stmnt_update_raw:bind(3,storyid) == sql.OK)
|
||||
assert(util.do_sql(stmnt_update_raw) == sql.DONE, "Failed to update raw")
|
||||
stmnt_update_raw:reset()
|
||||
assert(stmnt_update:bind(1,title) == sql.OK)
|
||||
assert(stmnt_update:bind_blob(2,compr) == sql.OK)
|
||||
assert(stmnt_update:bind(3,pasteas == "anonymous" and 1 or 0) == sql.OK)
|
||||
assert(stmnt_update:bind(4,unlisted) == sql.OK)
|
||||
assert(stmnt_update:bind(5,storyid) == sql.OK)
|
||||
assert(util.do_sql(stmnt_update) == sql.DONE, "Failed to update text")
|
||||
stmnt_update:reset()
|
||||
tagslib.set(storyid,tags)
|
||||
local id_enc = util.encode_id(storyid)
|
||||
local hash
|
||||
local loc = string.format("https://%s/%s",config.domain,id_enc)
|
||||
if unlisted then
|
||||
stmnt_hash:bind_names{id=storyid}
|
||||
local err = util.do_sql(stmnt_hash)
|
||||
if err ~= sql.ROW then
|
||||
error("Failed to get a post's hash while trying to make it unlisted")
|
||||
end
|
||||
local hash = stmnt_hash:get_value(0)
|
||||
-- TODO: Remove this
|
||||
-- Posts added before the unlisted feature will throw errors
|
||||
-- when their hash is used to display them, or their url's.
|
||||
-- when proper database migration tools are in place, remove
|
||||
-- this bit of code.
|
||||
if hash == -1 then
|
||||
error("This post was created before the unlisting feature was added. Temporarily, this breaks. You will be able to unlist it in the future.")
|
||||
end
|
||||
loc = loc .. "?pwd=" .. util.encode_unlisted(hash)
|
||||
end
|
||||
--Turning something from not unlisted to unlisted should dirty all these
|
||||
--places anyway, so the post can now be hidden.
|
||||
cache.dirty(string.format("%s/%s",config.domain,id_enc)) -- This place to read this post
|
||||
cache.dirty(string.format("%s",config.domain)) -- The site index (ex, if the author changed the paste from their's to "Anonymous", the cache should reflect that).
|
||||
cache.dirty(string.format("%s.%s",author,config.domain)) -- The author's index, same reasoning as above.
|
||||
cache.dirty(string.format("%s-logout",config.domain))
|
||||
|
||||
assert(stmnt_update_bio:bind_blob(1,compr_raw) == sql.OK)
|
||||
assert(stmnt_update_bio:bind(2, author_id) == sql.OK)
|
||||
assert(util.do_sql(stmnt_update_bio) == sql.DONE, "Failed to update biography")
|
||||
stmnt_update_bio:reset()
|
||||
local loc = string.format("https://%s.%s",author,config.domain)
|
||||
-- Dirty the cache for the author's index, the only place where the bio is displayed.
|
||||
cache.dirty(string.format("%s.%s",author,config.domain))
|
||||
http_response_header(req,"Location",loc)
|
||||
http_response(req,303,"")
|
||||
return
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<% if author then %>
|
||||
<meta name="author" content="<%= author %>">
|
||||
<% end %>
|
||||
<% if title then %>
|
||||
<title><%- title %></title>
|
||||
<% else %>
|
||||
<title>🍑</title>
|
||||
<% end %>
|
||||
<link href="/_css/milligram.css" rel="stylesheet">
|
||||
<link href="/_css/style.css" rel="stylesheet">
|
||||
<% if extra_load then %>
|
||||
<% for _,load in ipairs(extra_load) do %>
|
||||
<%- load %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</head>
|
||||
<body class="container">
|
||||
<main class="wrapper">
|
||||
|
||||
<h1 class="title">
|
||||
Edit Biography for <%= user %>
|
||||
</h1>
|
||||
<% if err then %><em class="error"><%= err %></em><% end %>
|
||||
<form action="https://<%= user %>.<%= domain %>/_bio" method="post" class="container">
|
||||
<fieldset>
|
||||
<input type="hidden" name="author" value="<%= user %>">
|
||||
<div class="row">
|
||||
<textarea name="text" cols=80 rows=24 class="column"><%= text %></textarea><br/>
|
||||
</div>
|
||||
<input type="submit">
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
|
Loading…
Reference in New Issue