| rev | 
   line source | 
| 
bsw/jbe@0
 | 
     1 local initiative = Initiative:by_id(param.get("initiative_id", atom.integer))
 | 
| 
bsw/jbe@0
 | 
     2 
 | 
| 
bsw/jbe@5
 | 
     3 -- TODO important m1 selectors returning result _SET_!
 | 
| 
bsw/jbe@5
 | 
     4 local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
 | 
| 
bsw/jbe@5
 | 
     5 
 | 
| 
bsw/jbe@5
 | 
     6 if issue.closed then
 | 
| 
bsw/jbe@5
 | 
     7   slot.put_into("error", _"This issue is already closed.")
 | 
| 
bsw/jbe@5
 | 
     8   return false
 | 
| 
bsw/jbe@5
 | 
     9 elseif issue.half_frozen then 
 | 
| 
bsw/jbe@5
 | 
    10   slot.put_into("error", _"This issue is already frozen.")
 | 
| 
bsw/jbe@5
 | 
    11   return false
 | 
| 
bsw@964
 | 
    12 elseif issue.phase_finished then
 | 
| 
bsw@964
 | 
    13   slot.put_into("error", _"Current phase is already closed.")
 | 
| 
bsw@964
 | 
    14   return false
 | 
| 
bsw/jbe@5
 | 
    15 end
 | 
| 
bsw/jbe@5
 | 
    16 
 | 
| 
bsw@10
 | 
    17 local initiator = Initiator:by_pk(initiative.id, app.session.member.id)
 | 
| 
bsw@10
 | 
    18 if not initiator or not initiator.accepted then
 | 
| 
bsw@10
 | 
    19   error("access denied")
 | 
| 
bsw@10
 | 
    20 end
 | 
| 
bsw@10
 | 
    21 
 | 
| 
bsw@904
 | 
    22 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
 | 
    23 if not tmp or tmp.text_entries_left < 1 then
 | 
| 
bsw@904
 | 
    24   slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
 | 
| 
bsw@904
 | 
    25   return false
 | 
| 
bsw@904
 | 
    26 end
 | 
| 
bsw@904
 | 
    27 
 | 
| 
bsw@1045
 | 
    28 local formatting_engine
 | 
| 
bsw@1045
 | 
    29 if config.enforce_formatting_engine then
 | 
| 
bsw@1045
 | 
    30   formatting_engine = config.enforce_formatting_engine 
 | 
| 
bsw@1045
 | 
    31 else
 | 
| 
bsw@1045
 | 
    32   formatting_engine = param.get("formatting_engine")
 | 
| 
bsw@81
 | 
    33 
 | 
| 
bsw@1045
 | 
    34   local formatting_engine_valid = false
 | 
| 
bsw@1045
 | 
    35   for i, fe in pairs(config.formatting_engines) do
 | 
| 
bsw@1045
 | 
    36     if formatting_engine == fe.id then
 | 
| 
bsw@1045
 | 
    37       formatting_engine_valid = true
 | 
| 
bsw@1045
 | 
    38     end
 | 
| 
bsw@1045
 | 
    39   end
 | 
| 
bsw@1045
 | 
    40   if not formatting_engine_valid then
 | 
| 
bsw@1045
 | 
    41     error("invalid formatting engine!")
 | 
| 
bsw/jbe@4
 | 
    42   end
 | 
| 
bsw@10
 | 
    43 end
 | 
| 
bsw@81
 | 
    44 
 | 
| 
bsw@1045
 | 
    45 if param.get("preview") or param.get("edit") then
 | 
| 
bsw@95
 | 
    46   return false
 | 
| 
bsw@95
 | 
    47 end
 | 
| 
bsw@81
 | 
    48 
 | 
| 
bsw@81
 | 
    49 local draft = Draft:new()
 | 
| 
bsw@81
 | 
    50 draft.author_id = app.session.member.id
 | 
| 
bsw@81
 | 
    51 draft.initiative_id = initiative.id
 | 
| 
bsw@10
 | 
    52 draft.formatting_engine = formatting_engine
 | 
| 
bsw@10
 | 
    53 draft.content = param.get("content")
 | 
| 
bsw@10
 | 
    54 draft:save()
 | 
| 
bsw/jbe@0
 | 
    55 
 | 
| 
bsw@499
 | 
    56 local supporter = Supporter:by_pk(initiative.id, app.session.member.id)
 | 
| 
bsw@499
 | 
    57 
 | 
| 
bsw@499
 | 
    58 if supporter then
 | 
| 
bsw@499
 | 
    59   supporter.draft_id = draft.id
 | 
| 
bsw@499
 | 
    60   supporter:save()
 | 
| 
bsw@499
 | 
    61 end
 | 
| 
bsw@499
 | 
    62 
 | 
| 
bsw@81
 | 
    63 draft:render_content()
 | 
| 
bsw@81
 | 
    64 
 | 
| 
bsw@1045
 | 
    65 slot.put_into("notice", _"The initiative text has been updated")
 | 
| 
bsw/jbe@0
 | 
    66 
 |