liquid_feedback_frontend

diff model/initiative.lua @ 551:c1dc3b14a4f3

Initiative and initiative member_info preloading
author bsw
date Fri Jun 15 19:00:43 2012 +0200 (2012-06-15)
parents 3bc96debbd05
children 18e8de7a2b6a
line diff
     1.1 --- a/model/initiative.lua	Tue May 29 20:52:49 2012 +0200
     1.2 +++ b/model/initiative.lua	Fri Jun 15 19:00:43 2012 +0200
     1.3 @@ -108,6 +108,75 @@
     1.4    ref                   = 'supporting_members_snapshot'
     1.5  }
     1.6  
     1.7 +Initiative:add_reference{
     1.8 +  mode               = "11",
     1.9 +  to                 = mondelefant.class_prototype,
    1.10 +  this_key           = "id",
    1.11 +  that_key           = "initiative_id",
    1.12 +  ref                = "member_info",
    1.13 +  back_ref           = "initiative",
    1.14 +  selector_generator = function(list, options)
    1.15 +    assert(options.member_id, "member_id mandatory for member_info")
    1.16 +    local ids = { sep = ", " }
    1.17 +    local issue_ids = { sep = ", " }
    1.18 +    for i, object in ipairs(list) do
    1.19 +      local id = object.id
    1.20 +      if id ~= nil then
    1.21 +        ids[#ids+1] = {"?", id}
    1.22 +        issue_ids[#issue_ids+1] = { "?", object.issue_id }
    1.23 +      end
    1.24 +    end
    1.25 +
    1.26 +    local sub_selector = Issue:get_db_conn():new_selector()
    1.27 +    if #ids == 0 then
    1.28 +      return sub_selector:empty_list_mode()
    1.29 +    end
    1.30 +    sub_selector:from("issue")
    1.31 +    sub_selector:add_field("issue.id", "issue_id")
    1.32 +    sub_selector:add_field{ '(delegation_info(?, null, null, issue.id, ?)).*', options.member_id, options.trustee_id }
    1.33 +    sub_selector:add_where{ 'issue.id IN ($)', issue_ids }
    1.34 +
    1.35 +    local selector = Initiative:get_db_conn():new_selector()
    1.36 +    selector:add_from("initiative")
    1.37 +    selector:add_field("initiative.id", "initiative_id")
    1.38 +    selector:join("issue", nil, "issue.id = initiative.issue_id")
    1.39 +    selector:join(sub_selector, "delegation_info", "delegation_info.issue_id = issue.id")
    1.40 +    selector:add_field("delegation_info.*")
    1.41 +    
    1.42 +    selector:left_join("supporter", nil, "supporter.initiative_id = initiative.id AND supporter.member_id = delegation_info.participating_member_id")
    1.43 +
    1.44 +    selector:left_join("delegating_interest_snapshot", "delegating_interest_s", { "delegating_interest_s.event = issue.latest_snapshot_event AND delegating_interest_s.issue_id = issue.id AND delegating_interest_s.member_id = ?", options.member_id })
    1.45 +
    1.46 +    selector:left_join("direct_supporter_snapshot", "supporter_s", { "supporter_s.event = issue.latest_snapshot_event AND supporter_s.initiative_id = initiative.id AND (supporter_s.member_id = ? OR supporter_s.member_id = delegating_interest_s.delegate_member_ids[array_upper(delegating_interest_s.delegate_member_ids, 1)])", options.member_id })
    1.47 +
    1.48 +    selector:add_field("CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN supporter.member_id NOTNULL ELSE supporter_s.member_id NOTNULL END", "supported")
    1.49 +    selector:add_field({ "CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN delegation_info.own_participation AND supporter.member_id NOTNULL ELSE supporter_s.member_id = ? END", options.member_id }, "directly_supported")
    1.50 +    
    1.51 +    selector:add_field("CASE WHEN issue.fully_frozen ISNULL AND issue.closed ISNULL THEN supporter.member_id NOTNULL AND NOT EXISTS(SELECT 1 FROM critical_opinion WHERE critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = delegation_info.participating_member_id) ELSE supporter_s.satisfied NOTNULL END", "satisfied")
    1.52 +
    1.53 +    
    1.54 +    --selector:add_field("", "informed")
    1.55 +    selector:left_join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted", options.member_id })
    1.56 +    selector:add_field("initiator.member_id NOTNULL", "initiated")
    1.57 +    
    1.58 +    return selector
    1.59 +  end
    1.60 +}
    1.61 +
    1.62 +function Initiative.list:load_everything_for_member_id(member_id)
    1.63 +  if member_id then
    1.64 +    self:load("member_info", { member_id = member_id })
    1.65 +  end
    1.66 +end
    1.67 +
    1.68 +function Initiative.object:load_everything_for_member_id(member_id)
    1.69 +  if member_id then
    1.70 +    self:load("member_info", { member_id = member_id })
    1.71 +  end
    1.72 +end
    1.73 +
    1.74 +
    1.75 +
    1.76  
    1.77  function Initiative:get_search_selector(search_string)
    1.78    return self:new_selector()

Impressum / About Us