liquid_feedback_frontend
diff model/draft.lua @ 1208:24f4c23f76ff
Moved code from draft add action to Draft model
author | bsw |
---|---|
date | Sat Jul 18 15:58:39 2015 +0200 (2015-07-18) |
parents | 23c98752e697 |
children | 32cc544d5a5b |
line diff
1.1 --- a/model/draft.lua Sun Jul 12 20:54:10 2015 +0200 1.2 +++ b/model/draft.lua Sat Jul 18 15:58:39 2015 +0200 1.3 @@ -24,3 +24,78 @@ 1.4 end 1.5 1.6 model.has_rendered_content(Draft, RenderedDraft) 1.7 + 1.8 +function Draft:update_content(member_id, initiative_id, p_formatting_engine, content, external_reference, preview) 1.9 + local initiative = Initiative:by_id(initiative_id) 1.10 + 1.11 + -- TODO important m1 selectors returning result _SET_! 1.12 + local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() 1.13 + 1.14 + if issue.closed then 1.15 + slot.put_into("error", _"This issue is already closed.") 1.16 + return false 1.17 + elseif issue.half_frozen then 1.18 + slot.put_into("error", _"This issue is already frozen.") 1.19 + return false 1.20 + elseif issue.phase_finished then 1.21 + slot.put_into("error", _"Current phase is already closed.") 1.22 + return false 1.23 + end 1.24 + 1.25 + local initiator = Initiator:by_pk(initiative.id, member_id) 1.26 + if not initiator or not initiator.accepted then 1.27 + error("access denied") 1.28 + end 1.29 + 1.30 + local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", member_id, initiative.polling }, "opt_object") 1.31 + if not tmp or tmp.text_entries_left < 1 then 1.32 + slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") 1.33 + return false 1.34 + end 1.35 + 1.36 + local formatting_engine 1.37 + if config.enforce_formatting_engine then 1.38 + formatting_engine = config.enforce_formatting_engine 1.39 + else 1.40 + formatting_engine = p_formatting_engine 1.41 + 1.42 + local formatting_engine_valid = false 1.43 + for i, fe in pairs(config.formatting_engines) do 1.44 + if formatting_engine == fe.id then 1.45 + formatting_engine_valid = true 1.46 + end 1.47 + end 1.48 + if not formatting_engine_valid then 1.49 + error("invalid formatting engine!") 1.50 + end 1.51 + end 1.52 + 1.53 + if preview then 1.54 + return false 1.55 + end 1.56 + 1.57 + local old_draft = initiative.current_draft 1.58 + 1.59 + local draft = Draft:new() 1.60 + draft.author_id = member_id 1.61 + draft.initiative_id = initiative.id 1.62 + draft.formatting_engine = formatting_engine or old_draft and old_draft.formatting_engine or nil 1.63 + draft.content = content or old_draft and old_draft.content or nil 1.64 + if external_reference == false then 1.65 + draft.external_reference = nil 1.66 + else 1.67 + draft.external_reference = external_reference or old_draft and old_draft.external_reference or nil 1.68 + end 1.69 + draft:save() 1.70 + 1.71 + local supporter = Supporter:by_pk(initiative.id, member_id) 1.72 + 1.73 + if supporter then 1.74 + supporter.draft_id = draft.id 1.75 + supporter:save() 1.76 + end 1.77 + 1.78 + draft:render_content() 1.79 + 1.80 + slot.put_into("notice", _"The initiative text has been updated") 1.81 +end