liquid_feedback_frontend
diff app/main/draft/new.lua @ 1495:17e7082c377a
Added image attachments for initiatives
author | bsw |
---|---|
date | Mon Feb 10 21:10:49 2020 +0100 (2020-02-10) |
parents | 32cc544d5a5b |
children | ed3c40911ae1 |
line diff
1.1 --- a/app/main/draft/new.lua Mon Dec 09 15:54:57 2019 +0100 1.2 +++ b/app/main/draft/new.lua Mon Feb 10 21:10:49 2020 +0100 1.3 @@ -23,7 +23,7 @@ 1.4 1.5 ui.form{ 1.6 record = draft, 1.7 - attr = { class = "vertical section" }, 1.8 + attr = { class = "vertical section", enctype = 'multipart/form-data' }, 1.9 module = "draft", 1.10 action = "add", 1.11 params = { initiative_id = initiative.id }, 1.12 @@ -65,6 +65,54 @@ 1.13 } 1.14 slot.put("<br />") 1.15 1.16 + if config.attachments then 1.17 + local file_upload_session = param.get("file_upload_session") or multirand.string( 1.18 + 32, 1.19 + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 1.20 + ) 1.21 + file_upload_session = string.gsub(file_upload_session, "[^A-Za-z0-9]", "") 1.22 + ui.field.hidden{ name = "file_upload_session", value = file_upload_session } 1.23 + local files = File:new_selector() 1.24 + :left_join("draft_attachment", nil, "draft_attachment.file_id = file.id") 1.25 + :add_where{ "draft_attachment.draft_id = ?", initiative.current_draft.id } 1.26 + :reset_fields() 1.27 + :add_field("file.id") 1.28 + :add_field("draft_attachment.title") 1.29 + :add_field("draft_attachment.description") 1.30 + :add_order_by("draft_attachment.id") 1.31 + :exec() 1.32 + 1.33 + if #files > 0 then 1.34 + ui.container { 1.35 + content = function() 1.36 + for i, file in ipairs(files) do 1.37 + if param.get("file_delete_" .. file.id, atom.boolean) then 1.38 + ui.field.hidden{ name = "file_delete_" .. file.id, value = "1" } 1.39 + else 1.40 + ui.image{ module = "file", view = "show.jpg", id = file.id, params = { preview = true } } 1.41 + ui.container{ content = file.title or "" } 1.42 + ui.container{ content = file.description or "" } 1.43 + slot.put("<br /><br />") 1.44 + end 1.45 + end 1.46 + end 1.47 + } 1.48 + end 1.49 + local filename = encode.file_path(WEBMCP_BASE_PATH, 'tmp', "file_upload-" .. file_upload_session .. ".json") 1.50 + local fh = io.open(filename, "r") 1.51 + if fh then 1.52 + local file_uploads = json.import(fh:read("*a")) 1.53 + for i, file_upload in ipairs(file_uploads) do 1.54 + ui.image{ module = "draft", view = "show_file_upload", params = { 1.55 + file_upload_session = file_upload_session, file_id = file_upload.id, preview = true 1.56 + } } 1.57 + ui.container{ content = file_upload.title or "" } 1.58 + ui.container{ content = file_upload.description or "" } 1.59 + slot.put("<br />") 1.60 + end 1.61 + end 1.62 + end 1.63 + 1.64 ui.tag{ 1.65 tag = "input", 1.66 attr = { 1.67 @@ -123,7 +171,71 @@ 1.68 else 1.69 ui.container { content = _"You cannot change your text again later, because this issue is already in verfication phase!" } 1.70 end 1.71 + 1.72 slot.put("<br />") 1.73 + if config.attachments then 1.74 + local file_upload_session = param.get("file_upload_session") or multirand.string( 1.75 + 32, 1.76 + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 1.77 + ) 1.78 + file_upload_session = string.gsub(file_upload_session, "[^A-Za-z0-9]", "") 1.79 + ui.field.hidden{ name = "file_upload_session", value = file_upload_session } 1.80 + local files = File:new_selector() 1.81 + :left_join("draft_attachment", nil, "draft_attachment.file_id = file.id") 1.82 + :add_where{ "draft_attachment.draft_id = ?", initiative.current_draft.id } 1.83 + :reset_fields() 1.84 + :add_field("file.id") 1.85 + :add_field("draft_attachment.title") 1.86 + :add_field("draft_attachment.description") 1.87 + :add_order_by("draft_attachment.id") 1.88 + :exec() 1.89 + 1.90 + if #files > 0 then 1.91 + ui.container { 1.92 + content = function() 1.93 + for i, file in ipairs(files) do 1.94 + ui.image{ module = "file", view = "show.jpg", id = file.id, params = { preview = true } } 1.95 + ui.container{ content = file.title or "" } 1.96 + ui.container{ content = file.description or "" } 1.97 + ui.field.boolean{ label = _"delete", name = "file_delete_" .. file.id, value = param.get("file_delete_" .. file.id) and true or false } 1.98 + slot.put("<br /><br />") 1.99 + end 1.100 + end 1.101 + } 1.102 + end 1.103 + 1.104 + local filename = encode.file_path(WEBMCP_BASE_PATH, 'tmp', "file_upload-" .. file_upload_session .. ".json") 1.105 + local fh = io.open(filename, "r") 1.106 + if fh then 1.107 + local file_uploads = json.import(fh:read("*a")) 1.108 + for i, file_upload in ipairs(file_uploads) do 1.109 + ui.image{ module = "draft", view = "show_file_upload", params = { 1.110 + file_upload_session = file_upload_session, file_id = file_upload.id, preview = true 1.111 + } } 1.112 + ui.container{ content = file_upload.title or "" } 1.113 + ui.container{ content = file_upload.description or "" } 1.114 + ui.field.boolean{ label = _"delete", name = "file_upload_delete_" .. file_upload.id } 1.115 + slot.put("<br />") 1.116 + end 1.117 + end 1.118 + ui.container{ attr = { id = "file_upload_template", style = "display: none;" }, content = function() 1.119 + ui.field.text{ label = _"Title", name = "__ID_title__" } 1.120 + ui.field.text{ label = _"Description", name = "__ID_description__" } 1.121 + ui.field.image{ field_name = "__ID_file__" } 1.122 + end } 1.123 + ui.container{ attr = { id = "file_upload" }, content = function() 1.124 + end } 1.125 + ui.field.hidden{ attr = { id = "file_upload_last_id" }, name = "file_upload_last_id" } 1.126 + ui.script{ script = [[ var file_upload_id = 1; ]] } 1.127 + ui.tag{ tag = "a", content = _"Attach image", attr = { 1.128 + href = "#", 1.129 + onclick = "var html = document.getElementById('file_upload_template').innerHTML; html = html.replace('__ID_file__', 'file_' + file_upload_id); html = html.replace('__ID_title__', 'title_' + file_upload_id); html = html.replace('__ID_description__', 'description_' + file_upload_id); var el = document.createElement('div'); el.innerHTML = html; document.getElementById('file_upload').appendChild(el); document.getElementById('file_upload_last_id').value = file_upload_id; file_upload_id++; return false;" 1.130 + } } 1.131 + slot.put("<br />") 1.132 + 1.133 + slot.put("<br />") 1.134 + 1.135 + end 1.136 1.137 ui.tag{ 1.138 tag = "input",