Work on bio editing
This commit is contained in:
parent
49d0b0a397
commit
223cfb9e46
|
@ -20,86 +20,26 @@ function configure(...)
|
||||||
return oldconfigure(...)
|
return oldconfigure(...)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function edit_post(req)
|
local function edit_bio(req)
|
||||||
local host = http_request_get_host(req)
|
local host = http_request_get_host(req)
|
||||||
local path = http_request_get_path(req)
|
local path = http_request_get_path(req)
|
||||||
local author, author_id = session.get(req)
|
local author, author_id = session.get(req)
|
||||||
|
|
||||||
http_request_populate_post(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 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 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 parsed = parsers[markup](text)
|
||||||
local compr_raw = zlib.compress(text)
|
local compr_raw = zlib.compress(text)
|
||||||
local compr = zlib.compress(parsed)
|
local compr = zlib.compress(parsed)
|
||||||
local tags = {}
|
|
||||||
if tags_str then
|
assert(stmnt_update_bio:bind_blob(1,compr_raw) == sql.OK)
|
||||||
tags = util.parse_tags(tags_str)
|
assert(stmnt_update_bio:bind(2, author_id) == sql.OK)
|
||||||
end
|
assert(util.do_sql(stmnt_update_bio) == sql.DONE, "Failed to update biography")
|
||||||
assert(stmnt_update_raw:bind_blob(1,compr_raw) == sql.OK)
|
stmnt_update_bio:reset()
|
||||||
assert(stmnt_update_raw:bind(2,markup) == sql.OK)
|
local loc = string.format("https://%s.%s",author,config.domain)
|
||||||
assert(stmnt_update_raw:bind(3,storyid) == sql.OK)
|
-- Dirty the cache for the author's index, the only place where the bio is displayed.
|
||||||
assert(util.do_sql(stmnt_update_raw) == sql.DONE, "Failed to update raw")
|
cache.dirty(string.format("%s.%s",author,config.domain))
|
||||||
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))
|
|
||||||
http_response_header(req,"Location",loc)
|
http_response_header(req,"Location",loc)
|
||||||
http_response(req,303,"")
|
http_response(req,303,"")
|
||||||
return
|
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