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    }

Impressum / About Us