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()