bsw/jbe@0: local initiative = Initiative:by_id(param.get("initiative_id", atom.integer)) bsw/jbe@0: bsw/jbe@5: -- TODO important m1 selectors returning result _SET_! bsw/jbe@5: local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() bsw/jbe@5: bsw/jbe@5: if issue.closed then bsw/jbe@5: slot.put_into("error", _"This issue is already closed.") bsw/jbe@5: return false bsw/jbe@5: elseif issue.half_frozen then bsw/jbe@5: slot.put_into("error", _"This issue is already frozen.") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw@10: local initiator = Initiator:by_pk(initiative.id, app.session.member.id) bsw@10: if not initiator or not initiator.accepted then bsw@10: error("access denied") bsw@10: end bsw@10: bsw@904: 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") bsw@904: if not tmp or tmp.text_entries_left < 1 then bsw@904: slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") bsw@904: return false bsw@904: end bsw@904: bsw@10: local formatting_engine = param.get("formatting_engine") bsw@81: bsw@10: local formatting_engine_valid = false bsw@10: for fe, dummy in pairs(config.formatting_engine_executeables) do bsw@10: if formatting_engine == fe then bsw@10: formatting_engine_valid = true bsw/jbe@4: end bsw@10: end bsw@10: if not formatting_engine_valid then bsw@10: error("invalid formatting engine!") bsw@10: end bsw@81: bsw@95: if param.get("preview") then bsw@95: return false bsw@95: end bsw@81: bsw@81: local draft = Draft:new() bsw@81: draft.author_id = app.session.member.id bsw@81: draft.initiative_id = initiative.id bsw@10: draft.formatting_engine = formatting_engine bsw@10: draft.content = param.get("content") bsw@10: draft:save() bsw/jbe@0: bsw@499: local supporter = Supporter:by_pk(initiative.id, app.session.member.id) bsw@499: bsw@499: if supporter then bsw@499: supporter.draft_id = draft.id bsw@499: supporter:save() bsw@499: end bsw@499: bsw@81: draft:render_content() bsw@81: bsw@10: slot.put_into("notice", _"New draft has been added to initiative") bsw/jbe@0: