liquid_feedback_frontend
changeset 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 | d361a7a03ac1 |
children | fede09736f2b |
files | app/main/draft/_action/add.lua model/draft.lua |
line diff
1.1 --- a/app/main/draft/_action/add.lua Sun Jul 12 20:54:10 2015 +0200 1.2 +++ b/app/main/draft/_action/add.lua Sat Jul 18 15:58:39 2015 +0200 1.3 @@ -1,66 +1,8 @@ 1.4 -local initiative = Initiative:by_id(param.get("initiative_id", atom.integer)) 1.5 - 1.6 --- TODO important m1 selectors returning result _SET_! 1.7 -local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() 1.8 - 1.9 -if issue.closed then 1.10 - slot.put_into("error", _"This issue is already closed.") 1.11 - return false 1.12 -elseif issue.half_frozen then 1.13 - slot.put_into("error", _"This issue is already frozen.") 1.14 - return false 1.15 -elseif issue.phase_finished then 1.16 - slot.put_into("error", _"Current phase is already closed.") 1.17 - return false 1.18 -end 1.19 - 1.20 -local initiator = Initiator:by_pk(initiative.id, app.session.member.id) 1.21 -if not initiator or not initiator.accepted then 1.22 - error("access denied") 1.23 -end 1.24 - 1.25 -local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", app.session.member.id, initiative.polling }, "opt_object") 1.26 -if not tmp or tmp.text_entries_left < 1 then 1.27 - slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") 1.28 - return false 1.29 -end 1.30 - 1.31 -local formatting_engine 1.32 -if config.enforce_formatting_engine then 1.33 - formatting_engine = config.enforce_formatting_engine 1.34 -else 1.35 - formatting_engine = param.get("formatting_engine") 1.36 - 1.37 - local formatting_engine_valid = false 1.38 - for i, fe in pairs(config.formatting_engines) do 1.39 - if formatting_engine == fe.id then 1.40 - formatting_engine_valid = true 1.41 - end 1.42 - end 1.43 - if not formatting_engine_valid then 1.44 - error("invalid formatting engine!") 1.45 - end 1.46 -end 1.47 - 1.48 -if param.get("preview") or param.get("edit") then 1.49 - return false 1.50 -end 1.51 - 1.52 -local draft = Draft:new() 1.53 -draft.author_id = app.session.member.id 1.54 -draft.initiative_id = initiative.id 1.55 -draft.formatting_engine = formatting_engine 1.56 -draft.content = param.get("content") 1.57 -draft:save() 1.58 - 1.59 -local supporter = Supporter:by_pk(initiative.id, app.session.member.id) 1.60 - 1.61 -if supporter then 1.62 - supporter.draft_id = draft.id 1.63 - supporter:save() 1.64 -end 1.65 - 1.66 -draft:render_content() 1.67 - 1.68 -slot.put_into("notice", _"The initiative text has been updated") 1.69 - 1.70 +return Draft:update_content( 1.71 + app.session.member.id, 1.72 + param.get("initiative_id", atom.integer), 1.73 + param.get("formatting_engine"), 1.74 + param.get("content"), 1.75 + nil, 1.76 + param.get("preview") or param.get("edit") 1.77 +)
2.1 --- a/model/draft.lua Sun Jul 12 20:54:10 2015 +0200 2.2 +++ b/model/draft.lua Sat Jul 18 15:58:39 2015 +0200 2.3 @@ -24,3 +24,78 @@ 2.4 end 2.5 2.6 model.has_rendered_content(Draft, RenderedDraft) 2.7 + 2.8 +function Draft:update_content(member_id, initiative_id, p_formatting_engine, content, external_reference, preview) 2.9 + local initiative = Initiative:by_id(initiative_id) 2.10 + 2.11 + -- TODO important m1 selectors returning result _SET_! 2.12 + local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() 2.13 + 2.14 + if issue.closed then 2.15 + slot.put_into("error", _"This issue is already closed.") 2.16 + return false 2.17 + elseif issue.half_frozen then 2.18 + slot.put_into("error", _"This issue is already frozen.") 2.19 + return false 2.20 + elseif issue.phase_finished then 2.21 + slot.put_into("error", _"Current phase is already closed.") 2.22 + return false 2.23 + end 2.24 + 2.25 + local initiator = Initiator:by_pk(initiative.id, member_id) 2.26 + if not initiator or not initiator.accepted then 2.27 + error("access denied") 2.28 + end 2.29 + 2.30 + local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", member_id, initiative.polling }, "opt_object") 2.31 + if not tmp or tmp.text_entries_left < 1 then 2.32 + slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") 2.33 + return false 2.34 + end 2.35 + 2.36 + local formatting_engine 2.37 + if config.enforce_formatting_engine then 2.38 + formatting_engine = config.enforce_formatting_engine 2.39 + else 2.40 + formatting_engine = p_formatting_engine 2.41 + 2.42 + local formatting_engine_valid = false 2.43 + for i, fe in pairs(config.formatting_engines) do 2.44 + if formatting_engine == fe.id then 2.45 + formatting_engine_valid = true 2.46 + end 2.47 + end 2.48 + if not formatting_engine_valid then 2.49 + error("invalid formatting engine!") 2.50 + end 2.51 + end 2.52 + 2.53 + if preview then 2.54 + return false 2.55 + end 2.56 + 2.57 + local old_draft = initiative.current_draft 2.58 + 2.59 + local draft = Draft:new() 2.60 + draft.author_id = member_id 2.61 + draft.initiative_id = initiative.id 2.62 + draft.formatting_engine = formatting_engine or old_draft and old_draft.formatting_engine or nil 2.63 + draft.content = content or old_draft and old_draft.content or nil 2.64 + if external_reference == false then 2.65 + draft.external_reference = nil 2.66 + else 2.67 + draft.external_reference = external_reference or old_draft and old_draft.external_reference or nil 2.68 + end 2.69 + draft:save() 2.70 + 2.71 + local supporter = Supporter:by_pk(initiative.id, member_id) 2.72 + 2.73 + if supporter then 2.74 + supporter.draft_id = draft.id 2.75 + supporter:save() 2.76 + end 2.77 + 2.78 + draft:render_content() 2.79 + 2.80 + slot.put_into("notice", _"The initiative text has been updated") 2.81 +end