liquid_feedback_frontend
view app/main/suggestion/_action/add.lua @ 1546:ae194d0235c2
Set session cookie only if session is needed
| author | bsw | 
|---|---|
| date | Thu Oct 22 11:57:23 2020 +0200 (2020-10-22) | 
| parents | 32cc544d5a5b | 
| children | 
 line source
     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")
     2 if not tmp or tmp.text_entries_left < 1 then
     3   slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
     4   return false
     5 end
     7 local initiative = Initiative:by_id(param.get("initiative_id", atom.integer))
     8 if not app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id) then
     9   return execute.view { module = "index", view = "403" }
    10 end
    13 local name = param.get("name")
    14 local name = util.trim(name)
    16 if #name < 3 then
    17   slot.put_into("error", _"This title is really too short!")
    18   return false
    19 end
    21 local formatting_engine = param.get("formatting_engine") or config.enforce_formatting_engine
    23 local formatting_engine_valid = false
    24 for i, fe in ipairs(config.formatting_engines) do
    25   if formatting_engine == fe.id then
    26     formatting_engine_valid = true
    27   end
    28 end
    29 if not formatting_engine_valid then
    30   slot.put_into("error", "invalid formatting engine!")
    31   return false
    32 end
    34 if param.get("preview") then
    35   return
    36 end
    38 local suggestion = Suggestion:new()
    40 suggestion.author_id = app.session.member.id
    41 suggestion.name = name
    42 suggestion.formatting_engine = formatting_engine
    43 param.update(suggestion, "content", "initiative_id")
    44 suggestion:save()
    46 -- TODO important m1 selectors returning result _SET_!
    47 local issue = suggestion.initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
    49 if issue.closed then
    50   slot.put_into("error", _"This issue is already closed.")
    51   return false
    52 elseif issue.half_frozen then 
    53   slot.put_into("error", _"This issue is already frozen.")
    54   return false
    55 elseif 
    56   (issue.half_frozen and issue.phase_finished) or
    57   (not issue.accepted and issue.phase_finished) 
    58 then
    59   slot.put_into("error", _"Current phase is already closed.")
    60   return false
    61 end
    63 local opinion = Opinion:new()
    65 opinion.suggestion_id = suggestion.id
    66 opinion.member_id     = app.session.member.id
    67 opinion.degree        = param.get("degree", atom.integer)
    68 opinion.fulfilled     = false
    70 opinion:save()
    72 slot.put_into("notice", _"Your suggestion has been added")
