bsw/jbe@5: local tmp = db:query({ "SELECT text_entries_left, initiatives_left FROM member_contingent_left WHERE member_id = ?", app.session.member.id }, "opt_object") bsw/jbe@5: if tmp then bsw/jbe@5: if tmp.initiatives_left and tmp.initiatives_left < 1 then bsw/jbe@5: slot.put_into("error", _"Sorry, your contingent for creating initiatives has been used up. Please try again later.") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: if tmp.text_entries_left and tmp.text_entries_left < 1 then bsw/jbe@5: slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: end bsw/jbe@5: bsw/jbe@0: local issue bsw/jbe@0: local area bsw/jbe@0: bsw/jbe@0: local issue_id = param.get("issue_id", atom.integer) bsw/jbe@0: if issue_id then bsw/jbe@0: issue = Issue:new_selector():add_where{"id=?",issue_id}:single_object_mode():exec() 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.fully_frozen then bsw/jbe@5: slot.put_into("error", _"Voting for this issue has already begun.") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@0: area = issue.area bsw/jbe@0: else bsw/jbe@0: local area_id = param.get("area_id", atom.integer) bsw/jbe@0: area = Area:new_selector():add_where{"id=?",area_id}:single_object_mode():exec() bsw/jbe@0: end bsw/jbe@0: bsw/jbe@6: local name = param.get("name") bsw/jbe@6: bsw/jbe@6: local name = util.trim(name) bsw/jbe@6: bsw/jbe@6: if #name < 3 then bsw/jbe@6: slot.put_into("error", _"This name is really too short!") bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw/jbe@0: local initiative = Initiative:new() bsw/jbe@0: bsw/jbe@0: if not issue then bsw/jbe@0: issue = Issue:new() bsw/jbe@0: issue.area_id = area.id bsw/jbe@0: issue.policy_id = param.get("policy_id", atom.integer) bsw/jbe@0: issue:save() bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: initiative.issue_id = issue.id bsw/jbe@6: initiative.name = name bsw/jbe@6: param.update(initiative, "discussion_url") bsw/jbe@0: initiative:save() bsw/jbe@0: bsw/jbe@0: local draft = Draft:new() bsw/jbe@0: draft.initiative_id = initiative.id bsw/jbe@4: local formatting_engine = param.get("formatting_engine") bsw/jbe@4: local formatting_engine_valid = false bsw/jbe@4: for fe, dummy in pairs(config.formatting_engine_executeables) do bsw/jbe@4: if formatting_engine == fe then bsw/jbe@4: formatting_engine_valid = true bsw/jbe@4: end bsw/jbe@4: end bsw/jbe@4: if not formatting_engine_valid then bsw/jbe@4: error("invalid formatting engine!") bsw/jbe@4: end bsw/jbe@4: draft.formatting_engine = formatting_engine bsw/jbe@0: draft.content = param.get("draft") bsw/jbe@0: draft.author_id = app.session.member.id bsw/jbe@0: draft:save() bsw/jbe@0: bsw/jbe@0: local initiator = Initiator:new() bsw/jbe@0: initiator.initiative_id = initiative.id bsw/jbe@0: initiator.member_id = app.session.member.id bsw/jbe@0: initiator:save() bsw/jbe@0: bsw/jbe@0: local supporter = Supporter:new() bsw/jbe@0: supporter.initiative_id = initiative.id bsw/jbe@0: supporter.member_id = app.session.member.id bsw/jbe@0: supporter.draft_id = draft.id bsw/jbe@0: supporter:save() bsw/jbe@0: bsw/jbe@0: slot.put_into("notice", _"Initiative successfully created") bsw/jbe@0: bsw/jbe@0: request.redirect{ bsw/jbe@0: module = "initiative", bsw/jbe@0: view = "show", bsw/jbe@0: id = initiative.id bsw/jbe@0: }