liquid_feedback_frontend
changeset 284:38dbcd510657
Added filter for delegating interest and support
author | bsw |
---|---|
date | Fri Feb 17 15:14:50 2012 +0100 (2012-02-17) |
parents | 9c1dea936554 |
children | 6c88b4bfb56c |
files | app/main/issue/_filters.lua |
line diff
1.1 --- a/app/main/issue/_filters.lua Fri Feb 17 14:00:16 2012 +0100 1.2 +++ b/app/main/issue/_filters.lua Fri Feb 17 15:14:50 2012 +0100 1.3 @@ -1,3 +1,5 @@ 1.4 +local member = param.get("member", "table") 1.5 + 1.6 local filters = {} 1.7 1.8 -- FIXME: the filter should be named like the corresponding issue.state value 1.9 @@ -6,7 +8,7 @@ 1.10 name = "filter", 1.11 { 1.12 name = "any", 1.13 - label = _"Any state", 1.14 + label = _"Any phase", 1.15 selector_modifier = function(selector) end 1.16 }, 1.17 { 1.18 @@ -55,43 +57,6 @@ 1.19 } 1.20 1.21 1.22 -filters[#filters+1] = { 1.23 - name = "filter_interest", 1.24 - { 1.25 - name = "any", 1.26 - label = _"Any", 1.27 - selector_modifier = function() end 1.28 - }, 1.29 - { 1.30 - name = "my", 1.31 - label = _"Interested", 1.32 - selector_modifier = function(selector) 1.33 - selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id }) 1.34 - end 1.35 - }, 1.36 - { 1.37 - name = "supported", 1.38 - label = _"Supported", 1.39 - selector_modifier = function(selector) 1.40 - selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id AND opinion.member_id ISNULL LIMIT 1)", app.session.member.id, app.session.member.id }) 1.41 - end 1.42 - }, 1.43 - { 1.44 - name = "potentially_supported", 1.45 - label = _"Potential supported", 1.46 - selector_modifier = function(selector) 1.47 - selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id LIMIT 1)", app.session.member.id, app.session.member.id }) 1.48 - end 1.49 - }, 1.50 - { 1.51 - name = "initiated", 1.52 - label = _"Initiated", 1.53 - selector_modifier = function(selector) 1.54 - selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted WHERE initiative.issue_id = issue.id)", app.session.member.id }) 1.55 - end 1.56 - }, 1.57 -} 1.58 - 1.59 if not param.get("no_sort", atom.boolean) then 1.60 1.61 local filter = { name = "order" } 1.62 @@ -129,7 +94,89 @@ 1.63 1.64 end 1.65 1.66 -if app.session.member and param.get("filter") == "frozen" then 1.67 + 1.68 +filters[#filters+1] = { 1.69 + name = "filter_interest", 1.70 + { 1.71 + name = "any", 1.72 + label = _"Any", 1.73 + selector_modifier = function() end 1.74 + }, 1.75 + { 1.76 + name = "my", 1.77 + label = _"Interested", 1.78 + selector_modifier = function() end 1.79 + }, 1.80 + { 1.81 + name = "supported", 1.82 + label = _"Supported", 1.83 + selector_modifier = function() end 1.84 + }, 1.85 + { 1.86 + name = "potentially_supported", 1.87 + label = _"Potentially supported", 1.88 + selector_modifier = function() end 1.89 + }, 1.90 + { 1.91 + name = "initiated", 1.92 + label = _"Initiated", 1.93 + selector_modifier = function(selector) 1.94 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted WHERE initiative.issue_id = issue.id)", member.id }) 1.95 + end 1.96 + }, 1.97 +} 1.98 + 1.99 +local filter_interest = param.get_all_cgi()["filter_interest"] 1.100 + 1.101 +if filter_interest ~= "any" and filter_interest ~= nil and filter_interest ~= "initiated" then 1.102 + filters[#filters+1] = { 1.103 + name = "filter_delegation", 1.104 + { 1.105 + name = "any", 1.106 + label = _"Direct and by delegation", 1.107 + selector_modifier = function(selector) 1.108 + if filter_interest == "my" then 1.109 + selector:left_join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id }) 1.110 + selector:left_join("interest", "filter_delegating_interest", { "filter_delegating_interest.issue_id = issue.id AND filter_delegating_interest.member_id = ? ", member.id }) 1.111 + selector:add_where{ "filter_interest.member_id NOTNULL OR filter_delegating_interest.member_id NOTNULL" } 1.112 + elseif filter_interest == "supported" then 1.113 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id }) 1.114 + elseif filter_interest == "potentially_supported" then 1.115 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1) OR EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id, member.id, member.id }) 1.116 + end 1.117 + end 1.118 + }, 1.119 + { 1.120 + name = "direct", 1.121 + label = _"Direct", 1.122 + selector_modifier = function(selector) 1.123 + if filter_interest == "my" then 1.124 + selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", member.id }) 1.125 + elseif filter_interest == "supported" then 1.126 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id AND critical_opinion.member_id ISNULL LIMIT 1)", member.id, member.id }) 1.127 + elseif filter_interest == "potentially_supported" then 1.128 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN critical_opinion ON critical_opinion.initiative_id = initiative.id AND critical_opinion.member_id = ? WHERE initiative.issue_id = issue.id LIMIT 1)", member.id, member.id }) 1.129 + end 1.130 + end 1.131 + }, 1.132 + { 1.133 + name = "delegated", 1.134 + label = _"By delegation", 1.135 + selector_modifier = function(selector) 1.136 + if filter_interest == "my" then 1.137 + selector:join("delegating_interest_snapshot", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? AND filter_interest.event = issue.latest_snapshot_event", member.id }) 1.138 + elseif filter_interest == "supported" then 1.139 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND direct_supporter_snapshot.satisfied LIMIT 1)", member.id }) 1.140 + elseif filter_interest == "potentially_supported" then 1.141 + selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN direct_supporter_snapshot ON direct_supporter_snapshot.initiative_id = initiative.id AND direct_supporter_snapshot.event = issue.latest_snapshot_event JOIN delegating_interest_snapshot ON delegating_interest_snapshot.delegate_member_ids[array_upper(delegating_interest_snapshot.delegate_member_ids, 1)] = direct_supporter_snapshot.member_id AND delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.member_id = ? AND delegating_interest_snapshot.event = issue.latest_snapshot_event WHERE initiative.issue_id = issue.id AND NOT direct_supporter_snapshot.satisfied LIMIT 1)", member.id, member.id }) 1.142 + end 1.143 + end 1.144 + } 1.145 + } 1.146 +end 1.147 + 1.148 + 1.149 +if member.id == app.session.member_id and param.get_all_cgi()["filter"] == "frozen" then 1.150 filters[#filters+1] = { 1.151 name = "filter_voting", 1.152 { 1.153 @@ -141,7 +188,7 @@ 1.154 name = "not_voted", 1.155 label = _"Not voted", 1.156 selector_modifier = function(selector) 1.157 - selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) 1.158 + selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", member.id }) 1.159 selector:add_where("direct_voter.member_id ISNULL") 1.160 end 1.161 }, 1.162 @@ -149,7 +196,7 @@ 1.163 name = "voted", 1.164 label = _"Voted", 1.165 selector_modifier = function(selector) 1.166 - selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) 1.167 + selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", member.id }) 1.168 end 1.169 }, 1.170 }