liquid_feedback_frontend

annotate model/draft.lua @ 1668:6d75df24e66e

Updated German translation
author bsw
date Sun Mar 07 09:52:36 2021 +0100 (2021-03-07)
parents 17e7082c377a
children
rev   line source
bsw/jbe@0 1 Draft = mondelefant.new_class()
bsw/jbe@0 2 Draft.table = 'draft'
bsw/jbe@0 3
bsw@81 4 -- Many drafts belonging to an initiative
bsw/jbe@0 5 Draft:add_reference{
bsw/jbe@0 6 mode = 'm1',
bsw/jbe@0 7 to = "Initiative",
bsw/jbe@0 8 this_key = 'initiative_id',
bsw/jbe@0 9 that_key = 'id',
bsw/jbe@0 10 ref = 'initiative',
bsw/jbe@0 11 }
bsw/jbe@0 12
bsw@81 13 -- Many drafts are authored by a member
bsw/jbe@0 14 Draft:add_reference{
bsw/jbe@0 15 mode = 'm1',
bsw/jbe@0 16 to = "Member",
bsw/jbe@0 17 this_key = 'author_id',
bsw/jbe@0 18 that_key = 'id',
bsw/jbe@0 19 ref = 'author',
bsw/jbe@0 20 }
bsw/jbe@0 21
bsw/jbe@0 22 function Draft.object_get:author_name()
bsw/jbe@0 23 return self.author and self.author.name or _"Unknown author"
bsw/jbe@0 24 end
bsw@81 25
bsw/jbe@1309 26 model.has_rendered_content(Draft, RenderedDraft, "content", "draft_id")
bsw@1208 27
bsw@1208 28 function Draft:update_content(member_id, initiative_id, p_formatting_engine, content, external_reference, preview)
bsw@1208 29 local initiative = Initiative:by_id(initiative_id)
bsw@1208 30
bsw@1208 31 -- TODO important m1 selectors returning result _SET_!
bsw@1208 32 local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
bsw@1208 33
bsw@1208 34 if issue.closed then
bsw@1208 35 slot.put_into("error", _"This issue is already closed.")
bsw@1208 36 return false
bsw@1208 37 elseif issue.half_frozen then
bsw@1208 38 slot.put_into("error", _"This issue is already frozen.")
bsw@1208 39 return false
bsw@1208 40 elseif issue.phase_finished then
bsw@1208 41 slot.put_into("error", _"Current phase is already closed.")
bsw@1208 42 return false
bsw@1208 43 end
bsw@1208 44
bsw@1208 45 local initiator = Initiator:by_pk(initiative.id, member_id)
bsw@1208 46 if not initiator or not initiator.accepted then
bsw/jbe@1309 47 return false
bsw@1208 48 end
bsw@1208 49
bsw@1208 50 local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", member_id, initiative.polling }, "opt_object")
bsw@1208 51 if not tmp or tmp.text_entries_left < 1 then
bsw@1208 52 slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
bsw@1208 53 return false
bsw@1208 54 end
bsw@1208 55
bsw@1208 56 local formatting_engine
bsw@1208 57 if config.enforce_formatting_engine then
bsw@1208 58 formatting_engine = config.enforce_formatting_engine
bsw@1208 59 else
bsw@1208 60 formatting_engine = p_formatting_engine
bsw@1208 61
bsw@1208 62 local formatting_engine_valid = false
bsw@1208 63 for i, fe in pairs(config.formatting_engines) do
bsw@1208 64 if formatting_engine == fe.id then
bsw@1208 65 formatting_engine_valid = true
bsw@1208 66 end
bsw@1208 67 end
bsw@1208 68 if not formatting_engine_valid then
bsw@1208 69 error("invalid formatting engine!")
bsw@1208 70 end
bsw@1208 71 end
bsw@1208 72
bsw@1208 73 if preview then
bsw@1208 74 return false
bsw@1208 75 end
bsw@1208 76
bsw@1208 77 local old_draft = initiative.current_draft
bsw@1208 78
bsw@1208 79 local draft = Draft:new()
bsw@1208 80 draft.author_id = member_id
bsw@1208 81 draft.initiative_id = initiative.id
bsw@1208 82 draft.formatting_engine = formatting_engine or old_draft and old_draft.formatting_engine or nil
bsw@1208 83 draft.content = content or old_draft and old_draft.content or nil
bsw@1208 84 if external_reference == false then
bsw@1208 85 draft.external_reference = nil
bsw@1208 86 else
bsw@1208 87 draft.external_reference = external_reference or old_draft and old_draft.external_reference or nil
bsw@1208 88 end
bsw@1208 89 draft:save()
bsw@1208 90
bsw@1208 91 local supporter = Supporter:by_pk(initiative.id, member_id)
bsw@1208 92
bsw@1208 93 if supporter then
bsw@1208 94 supporter.draft_id = draft.id
bsw@1208 95 supporter:save()
bsw@1208 96 end
bsw@1208 97
bsw@1208 98 draft:render_content()
bsw@1208 99
bsw@1495 100 local draft_attachments = DraftAttachment:new_selector()
bsw@1495 101 :add_where{ "draft_id = ?", old_draft.id }
bsw@1495 102 :exec()
bsw@1495 103
bsw@1495 104 for i, draft_attachment in ipairs(draft_attachments) do
bsw@1495 105 local new_draft_attachment = DraftAttachment:new()
bsw@1495 106 new_draft_attachment.draft_id = draft.id
bsw@1495 107 new_draft_attachment.file_id = draft_attachment.file_id
bsw@1495 108 new_draft_attachment.title = draft_attachment.title
bsw@1495 109 new_draft_attachment.description = draft_attachment.description
bsw@1495 110 new_draft_attachment:save()
bsw@1495 111 end
bsw@1495 112
bsw@1208 113 slot.put_into("notice", _"The initiative text has been updated")
bsw@1495 114 return draft.id
bsw@1208 115 end

Impressum / About Us