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") |