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",

Impressum / About Us