liquid_feedback_frontend

diff model/draft.lua @ 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 23c98752e697
children 32cc544d5a5b
line diff
     1.1 --- a/model/draft.lua	Sun Jul 12 20:54:10 2015 +0200
     1.2 +++ b/model/draft.lua	Sat Jul 18 15:58:39 2015 +0200
     1.3 @@ -24,3 +24,78 @@
     1.4  end
     1.5  
     1.6  model.has_rendered_content(Draft, RenderedDraft)
     1.7 +
     1.8 +function Draft:update_content(member_id, initiative_id, p_formatting_engine, content, external_reference, preview)
     1.9 +  local initiative = Initiative:by_id(initiative_id)
    1.10 +
    1.11 +  -- TODO important m1 selectors returning result _SET_!
    1.12 +  local issue = initiative:get_reference_selector("issue"):for_share():single_object_mode():exec()
    1.13 +
    1.14 +  if issue.closed then
    1.15 +    slot.put_into("error", _"This issue is already closed.")
    1.16 +    return false
    1.17 +  elseif issue.half_frozen then 
    1.18 +    slot.put_into("error", _"This issue is already frozen.")
    1.19 +    return false
    1.20 +  elseif issue.phase_finished then
    1.21 +    slot.put_into("error", _"Current phase is already closed.")
    1.22 +    return false
    1.23 +  end
    1.24 +
    1.25 +  local initiator = Initiator:by_pk(initiative.id, member_id)
    1.26 +  if not initiator or not initiator.accepted then
    1.27 +    error("access denied")
    1.28 +  end
    1.29 +
    1.30 +  local tmp = db:query({ "SELECT text_entries_left FROM member_contingent_left WHERE member_id = ? AND polling = ?", member_id, initiative.polling }, "opt_object")
    1.31 +  if not tmp or tmp.text_entries_left < 1 then
    1.32 +    slot.put_into("error", _"Sorry, you have reached your personal flood limit. Please be slower...")
    1.33 +    return false
    1.34 +  end
    1.35 +
    1.36 +  local formatting_engine
    1.37 +  if config.enforce_formatting_engine then
    1.38 +    formatting_engine = config.enforce_formatting_engine 
    1.39 +  else
    1.40 +    formatting_engine = p_formatting_engine
    1.41 +
    1.42 +    local formatting_engine_valid = false
    1.43 +    for i, fe in pairs(config.formatting_engines) do
    1.44 +      if formatting_engine == fe.id then
    1.45 +        formatting_engine_valid = true
    1.46 +      end
    1.47 +    end
    1.48 +    if not formatting_engine_valid then
    1.49 +      error("invalid formatting engine!")
    1.50 +    end
    1.51 +  end
    1.52 +
    1.53 +  if preview then
    1.54 +    return false
    1.55 +  end
    1.56 +
    1.57 +  local old_draft = initiative.current_draft
    1.58 +
    1.59 +  local draft = Draft:new()
    1.60 +  draft.author_id = member_id
    1.61 +  draft.initiative_id = initiative.id
    1.62 +  draft.formatting_engine = formatting_engine or old_draft and old_draft.formatting_engine or nil
    1.63 +  draft.content = content or old_draft and old_draft.content or nil
    1.64 +  if external_reference == false then
    1.65 +    draft.external_reference = nil
    1.66 +  else
    1.67 +    draft.external_reference = external_reference or old_draft and old_draft.external_reference or nil
    1.68 +  end
    1.69 +  draft:save()
    1.70 +
    1.71 +  local supporter = Supporter:by_pk(initiative.id, member_id)
    1.72 +
    1.73 +  if supporter then
    1.74 +    supporter.draft_id = draft.id
    1.75 +    supporter:save()
    1.76 +  end
    1.77 +
    1.78 +  draft:render_content()
    1.79 +
    1.80 +  slot.put_into("notice", _"The initiative text has been updated")
    1.81 +end

Impressum / About Us