| rev | line source | 
| bsw@904 | 1 local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND NOT polling", app.session.member.id }, "opt_object") | 
| bsw@904 | 2 if not tmp or tmp.text_entries_left < 1 then | 
| bsw/jbe@5 | 3   slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...") | 
| bsw/jbe@5 | 4   return false | 
| bsw/jbe@5 | 5 end | 
| bsw/jbe@0 | 6 | 
| bsw@281 | 7 local initiative = Initiative:by_id(param.get("initiative_id", atom.integer)) | 
| bsw@281 | 8 if not app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) then | 
| bsw@281 | 9   error("access denied") | 
| bsw@281 | 10 end | 
| bsw@281 | 11 | 
| bsw@281 | 12 | 
| bsw/jbe@6 | 13 local name = param.get("name") | 
| bsw/jbe@6 | 14 local name = util.trim(name) | 
| bsw/jbe@6 | 15 | 
| bsw/jbe@6 | 16 if #name < 3 then | 
| bsw/jbe@6 | 17   slot.put_into("error", _"This title is really too short!") | 
| bsw/jbe@6 | 18   return false | 
| bsw/jbe@6 | 19 end | 
| bsw/jbe@6 | 20 | 
| bsw@1045 | 21 local formatting_engine = param.get("formatting_engine") or config.enforce_formatting_engine | 
| bsw@279 | 22 | 
| bsw@279 | 23 local formatting_engine_valid = false | 
| bsw@1045 | 24 for i, fe in ipairs(config.formatting_engines) do | 
| bsw@1045 | 25   if formatting_engine == fe.id then | 
| bsw@279 | 26     formatting_engine_valid = true | 
| bsw@279 | 27   end | 
| bsw@279 | 28 end | 
| bsw@279 | 29 if not formatting_engine_valid then | 
| bsw@279 | 30   error("invalid formatting engine!") | 
| bsw@279 | 31 end | 
| bsw@279 | 32 | 
| bsw@279 | 33 if param.get("preview") then | 
| bsw@279 | 34   return | 
| bsw@279 | 35 end | 
| bsw@279 | 36 | 
| bsw/jbe@0 | 37 local suggestion = Suggestion:new() | 
| bsw/jbe@0 | 38 | 
| bsw/jbe@0 | 39 suggestion.author_id = app.session.member.id | 
| bsw/jbe@6 | 40 suggestion.name = name | 
| bsw@279 | 41 suggestion.formatting_engine = formatting_engine | 
| bsw@279 | 42 param.update(suggestion, "content", "initiative_id") | 
| bsw/jbe@0 | 43 suggestion:save() | 
| bsw/jbe@0 | 44 | 
| bsw/jbe@5 | 45 -- TODO important m1 selectors returning result _SET_! | 
| bsw/jbe@5 | 46 local issue = suggestion.initiative:get_reference_selector("issue"):for_share():single_object_mode():exec() | 
| bsw/jbe@5 | 47 | 
| bsw/jbe@5 | 48 if issue.closed then | 
| bsw/jbe@5 | 49   slot.put_into("error", _"This issue is already closed.") | 
| bsw/jbe@5 | 50   return false | 
| bsw@41 | 51 elseif issue.half_frozen then | 
| bsw@41 | 52   slot.put_into("error", _"This issue is already frozen.") | 
| bsw/jbe@5 | 53   return false | 
| bsw@964 | 54 elseif | 
| bsw@964 | 55   (issue.half_frozen and issue.phase_finished) or | 
| bsw@964 | 56   (not issue.accepted and issue.phase_finished) | 
| bsw@964 | 57 then | 
| bsw@964 | 58   slot.put_into("error", _"Current phase is already closed.") | 
| bsw@964 | 59   return false | 
| bsw/jbe@5 | 60 end | 
| bsw/jbe@5 | 61 | 
| bsw/jbe@0 | 62 local opinion = Opinion:new() | 
| bsw/jbe@0 | 63 | 
| bsw/jbe@0 | 64 opinion.suggestion_id = suggestion.id | 
| bsw/jbe@0 | 65 opinion.member_id     = app.session.member.id | 
| bsw/jbe@0 | 66 opinion.degree        = param.get("degree", atom.integer) | 
| bsw/jbe@0 | 67 opinion.fulfilled     = false | 
| bsw/jbe@0 | 68 | 
| bsw/jbe@0 | 69 opinion:save() | 
| bsw/jbe@0 | 70 | 
| bsw/jbe@0 | 71 slot.put_into("notice", _"Your suggestion has been added") |