liquid_feedback_frontend

changeset 1208:24f4c23f76ff

Moved code from draft add action to Draft model
author bsw
date Sat Jul 18 15:58:39 2015 +0200 (2015-07-18)
parents d361a7a03ac1
children fede09736f2b
files app/main/draft/_action/add.lua model/draft.lua
line diff
     1.1 --- a/app/main/draft/_action/add.lua	Sun Jul 12 20:54:10 2015 +0200
     1.2 +++ b/app/main/draft/_action/add.lua	Sat Jul 18 15:58:39 2015 +0200
     1.3 @@ -1,66 +1,8 @@
     1.4 -local initiative = Initiative:by_id(param.get("initiative_id", atom.integer))
     1.5 -
     1.6 --- TODO important m1 selectors returning result _SET_!
     1.7 -local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
     1.8 -
     1.9 -if issue.closed then
    1.10 -  slot.put_into("error", _"This issue is already closed.")
    1.11 -  return false
    1.12 -elseif issue.half_frozen then 
    1.13 -  slot.put_into("error", _"This issue is already frozen.")
    1.14 -  return false
    1.15 -elseif issue.phase_finished then
    1.16 -  slot.put_into("error", _"Current phase is already closed.")
    1.17 -  return false
    1.18 -end
    1.19 -
    1.20 -local initiator = Initiator:by_pk(initiative.id, app.session.member.id)
    1.21 -if not initiator or not initiator.accepted then
    1.22 -  error("access denied")
    1.23 -end
    1.24 -
    1.25 -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")
    1.26 -if not tmp or tmp.text_entries_left < 1 then
    1.27 -  slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
    1.28 -  return false
    1.29 -end
    1.30 -
    1.31 -local formatting_engine
    1.32 -if config.enforce_formatting_engine then
    1.33 -  formatting_engine = config.enforce_formatting_engine 
    1.34 -else
    1.35 -  formatting_engine = param.get("formatting_engine")
    1.36 -
    1.37 -  local formatting_engine_valid = false
    1.38 -  for i, fe in pairs(config.formatting_engines) do
    1.39 -    if formatting_engine == fe.id then
    1.40 -      formatting_engine_valid = true
    1.41 -    end
    1.42 -  end
    1.43 -  if not formatting_engine_valid then
    1.44 -    error("invalid formatting engine!")
    1.45 -  end
    1.46 -end
    1.47 -
    1.48 -if param.get("preview") or param.get("edit") then
    1.49 -  return false
    1.50 -end
    1.51 -
    1.52 -local draft = Draft:new()
    1.53 -draft.author_id = app.session.member.id
    1.54 -draft.initiative_id = initiative.id
    1.55 -draft.formatting_engine = formatting_engine
    1.56 -draft.content = param.get("content")
    1.57 -draft:save()
    1.58 -
    1.59 -local supporter = Supporter:by_pk(initiative.id, app.session.member.id)
    1.60 -
    1.61 -if supporter then
    1.62 -  supporter.draft_id = draft.id
    1.63 -  supporter:save()
    1.64 -end
    1.65 -
    1.66 -draft:render_content()
    1.67 -
    1.68 -slot.put_into("notice", _"The initiative text has been updated")
    1.69 -
    1.70 +return Draft:update_content(
    1.71 +  app.session.member.id, 
    1.72 +  param.get("initiative_id", atom.integer),
    1.73 +  param.get("formatting_engine"),
    1.74 +  param.get("content"),
    1.75 +  nil,
    1.76 +  param.get("preview") or param.get("edit")
    1.77 +)
     2.1 --- a/model/draft.lua	Sun Jul 12 20:54:10 2015 +0200
     2.2 +++ b/model/draft.lua	Sat Jul 18 15:58:39 2015 +0200
     2.3 @@ -24,3 +24,78 @@
     2.4  end
     2.5  
     2.6  model.has_rendered_content(Draft, RenderedDraft)
     2.7 +
     2.8 +function Draft:update_content(member_id, initiative_id, p_formatting_engine, content, external_reference, preview)
     2.9 +  local initiative = Initiative:by_id(initiative_id)
    2.10 +
    2.11 +  -- TODO important m1 selectors returning result _SET_!
    2.12 +  local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
    2.13 +
    2.14 +  if issue.closed then
    2.15 +    slot.put_into("error", _"This issue is already closed.")
    2.16 +    return false
    2.17 +  elseif issue.half_frozen then 
    2.18 +    slot.put_into("error", _"This issue is already frozen.")
    2.19 +    return false
    2.20 +  elseif issue.phase_finished then
    2.21 +    slot.put_into("error", _"Current phase is already closed.")
    2.22 +    return false
    2.23 +  end
    2.24 +
    2.25 +  local initiator = Initiator:by_pk(initiative.id, member_id)
    2.26 +  if not initiator or not initiator.accepted then
    2.27 +    error("access denied")
    2.28 +  end
    2.29 +
    2.30 +  local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", member_id, initiative.polling }, "opt_object")
    2.31 +  if not tmp or tmp.text_entries_left < 1 then
    2.32 +    slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
    2.33 +    return false
    2.34 +  end
    2.35 +
    2.36 +  local formatting_engine
    2.37 +  if config.enforce_formatting_engine then
    2.38 +    formatting_engine = config.enforce_formatting_engine 
    2.39 +  else
    2.40 +    formatting_engine = p_formatting_engine
    2.41 +
    2.42 +    local formatting_engine_valid = false
    2.43 +    for i, fe in pairs(config.formatting_engines) do
    2.44 +      if formatting_engine == fe.id then
    2.45 +        formatting_engine_valid = true
    2.46 +      end
    2.47 +    end
    2.48 +    if not formatting_engine_valid then
    2.49 +      error("invalid formatting engine!")
    2.50 +    end
    2.51 +  end
    2.52 +
    2.53 +  if preview then
    2.54 +    return false
    2.55 +  end
    2.56 +
    2.57 +  local old_draft = initiative.current_draft
    2.58 +
    2.59 +  local draft = Draft:new()
    2.60 +  draft.author_id = member_id
    2.61 +  draft.initiative_id = initiative.id
    2.62 +  draft.formatting_engine = formatting_engine or old_draft and old_draft.formatting_engine or nil
    2.63 +  draft.content = content or old_draft and old_draft.content or nil
    2.64 +  if external_reference == false then
    2.65 +    draft.external_reference = nil
    2.66 +  else
    2.67 +    draft.external_reference = external_reference or old_draft and old_draft.external_reference or nil
    2.68 +  end
    2.69 +  draft:save()
    2.70 +
    2.71 +  local supporter = Supporter:by_pk(initiative.id, member_id)
    2.72 +
    2.73 +  if supporter then
    2.74 +    supporter.draft_id = draft.id
    2.75 +    supporter:save()
    2.76 +  end
    2.77 +
    2.78 +  draft:render_content()
    2.79 +
    2.80 +  slot.put_into("notice", _"The initiative text has been updated")
    2.81 +end

Impressum / About Us