liquid_feedback_frontend

diff model/issue.lua @ 211:4993b71b383f

First checkin of lf2 (frontend second generation) prototype
author bsw
date Wed Mar 02 20:06:26 2011 +0100 (2011-03-02)
parents 21ddb78dd09d
children 3e4ad069847a
line diff
     1.1 --- a/model/issue.lua	Sat Feb 05 20:01:09 2011 +0100
     1.2 +++ b/model/issue.lua	Wed Mar 02 20:06:26 2011 +0100
     1.3 @@ -23,7 +23,8 @@
     1.4    this_key      = 'id',
     1.5    that_key      = 'issue_id',
     1.6    ref           = 'initiatives',
     1.7 -  back_ref      = 'issue'
     1.8 +  back_ref      = 'issue',
     1.9 +  default_order = 'initiative.rank, initiative.admitted ISNULL, initiative.admitted DESC, initiative.positive_votes::float / initiative.negative_votes::float DESC, initiative.supporter_count DESC'
    1.10  }
    1.11  
    1.12  Issue:add_reference{
    1.13 @@ -85,7 +86,7 @@
    1.14    connected_by_that_key = 'member_id',
    1.15    ref                   = 'members'
    1.16  }
    1.17 -
    1.18 +--[[
    1.19  Issue:add_reference{
    1.20    mode                  = 'mm',
    1.21    to                    = "Member",
    1.22 @@ -96,7 +97,7 @@
    1.23    connected_by_that_key = 'member_id',
    1.24    ref                   = 'interested_members_snapshot'
    1.25  }
    1.26 -
    1.27 +--]]
    1.28  Issue:add_reference{
    1.29    mode                  = 'mm',
    1.30    to                    = "Member",
    1.31 @@ -108,6 +109,133 @@
    1.32    ref                   = 'direct_voters'
    1.33  }
    1.34  
    1.35 +Issue:add_reference{
    1.36 +  mode                  = 'mm',
    1.37 +  to                    = "Member",
    1.38 +  this_key              = 'id',
    1.39 +  that_key              = 'id',
    1.40 +  connected_by_table    = 'direct_interest_snapshot',
    1.41 +  connected_by_this_key = 'issue_id',
    1.42 +  connected_by_that_key = 'member_id',
    1.43 +  ref                   = 'interested_members_snapshot',
    1.44 +  selector_generator = function(list, options)
    1.45 +    -- build list of issue ids
    1.46 +    local ids = { sep = ", " }
    1.47 +    for i, object in ipairs(list) do
    1.48 +      local id = object.id
    1.49 +      if id ~= nil then
    1.50 +        ids[#ids+1] = {"?", id}
    1.51 +      end
    1.52 +    end
    1.53 +
    1.54 +    if #ids == 0 then
    1.55 +      return Member:new_selector():empty_list_mode()
    1.56 +    end
    1.57 +    
    1.58 +    local selector = Member:new_selector()
    1.59 +    selector:join("direct_interest_snapshot", nil, { "direct_interest_snapshot.member_id = member.id AND direct_interest_snapshot.issue_id IN ($)", ids })
    1.60 +    selector:join("issue", nil, "direct_interest_snapshot.issue_id = issue.id AND direct_interest_snapshot.event = issue.latest_snapshot_event")
    1.61 +    selector:add_order_by('direct_interest_snapshot.weight DESC')
    1.62 +    return selector
    1.63 +  end
    1.64 +}
    1.65 +
    1.66 +Issue:add_reference{
    1.67 +  mode          = '11',
    1.68 +  to            = "DelegatingInterestSnapshot",
    1.69 +  this_key      = 'id',
    1.70 +  that_key      = 'issue_id',
    1.71 +  ref           = 'delegating_interest_snapshot_for_member',
    1.72 +  back_ref      = 'issue',
    1.73 +  selector_generator = function(list, options)
    1.74 +    local member_id = assert(options.member_id)
    1.75 +  
    1.76 +    -- build list of issue ids
    1.77 +    local ids = { sep = ", " }
    1.78 +    for i, object in ipairs(list) do
    1.79 +      local id = object.id
    1.80 +      if id ~= nil then
    1.81 +        ids[#ids+1] = {"?", id}
    1.82 +      end
    1.83 +    end
    1.84 +
    1.85 +    if #ids == 0 then
    1.86 +      return DelegatingInterestSnapshot:new_selector():empty_list_mode()
    1.87 +    end
    1.88 +    
    1.89 +    local selector = DelegatingInterestSnapshot:new_selector()
    1.90 +    selector:join("issue", nil, "delegating_interest_snapshot.issue_id = issue.id AND delegating_interest_snapshot.event = issue.latest_snapshot_event")
    1.91 +    selector:add_where{ 'delegating_interest_snapshot.issue_id IN ($)', ids }
    1.92 +    selector:add_where{ 'delegating_interest_snapshot.member_id = ?', options.member_id }
    1.93 +    
    1.94 +    return selector
    1.95 +  end
    1.96 +}
    1.97 +
    1.98 +Issue:add_reference{
    1.99 +  mode          = '11',
   1.100 +  to            = "Interest",
   1.101 +  this_key      = 'id',
   1.102 +  that_key      = 'issue_id',
   1.103 +  ref           = 'interest_for_member',
   1.104 +  back_ref      = 'issue',
   1.105 +  selector_generator = function(list, options)
   1.106 +
   1.107 +    local member_id = assert(options.member_id)
   1.108 +  
   1.109 +    -- build list of issue ids
   1.110 +    local ids = { sep = ", " }
   1.111 +    for i, object in ipairs(list) do
   1.112 +      local id = object.id
   1.113 +      if id ~= nil then
   1.114 +        ids[#ids+1] = {"?", id}
   1.115 +      end
   1.116 +    end
   1.117 +
   1.118 +    if #ids == 0 then
   1.119 +      return Interest:new_selector():empty_list_mode()
   1.120 +    end
   1.121 +    
   1.122 +    local selector = Interest:new_selector()
   1.123 +    selector:add_where{ 'interest.issue_id IN ($)', ids }
   1.124 +    selector:add_where{ 'interest.member_id = ?', member_id }
   1.125 +    return selector
   1.126 +
   1.127 +  end
   1.128 +}
   1.129 +
   1.130 +Issue:add_reference{
   1.131 +  mode          = '1m',
   1.132 +  to            = "Delegation",
   1.133 +  this_key      = 'id',
   1.134 +  that_key      = 'issue_id',
   1.135 +  ref           = 'outgoing_delegations_for_member',
   1.136 +  back_ref      = 'issue',
   1.137 +  selector_generator = function(list, options)
   1.138 +
   1.139 +    local member_id = assert(options.member_id)
   1.140 +  
   1.141 +    -- build list of issue ids
   1.142 +    local ids = { sep = ", " }
   1.143 +    for i, object in ipairs(list) do
   1.144 +      local id = object.id
   1.145 +      if id ~= nil then
   1.146 +        ids[#ids+1] = {"?", id}
   1.147 +      end
   1.148 +    end
   1.149 +
   1.150 +    if #ids == 0 then
   1.151 +      return Delegation:new_selector():empty_list_mode()
   1.152 +    end
   1.153 +    
   1.154 +    local selector = Delegation:new_selector()
   1.155 +    selector:add_where{ 'delegation.issue_id IN ($)', ids }
   1.156 +    selector:add_where{ 'delegation.truster_id = ?', member_id }
   1.157 +    return selector
   1.158 +
   1.159 +  end
   1.160 +}
   1.161 +
   1.162  
   1.163  
   1.164  function Issue:get_state_name_for_state(value)
   1.165 @@ -169,6 +297,33 @@
   1.166    end
   1.167  end
   1.168  
   1.169 +function Issue:build_selector(args)
   1.170 +  local selector = self:new_selector()
   1.171 +  if args.area_id then
   1.172 +    selector:add_where{ "issue.area_id = ?", args.area_id }
   1.173 +  end
   1.174 +  if args.state == "closed" then
   1.175 +    selector:add_where("issue.closed NOTNULL")
   1.176 +  elseif args.state == "voting" then
   1.177 +    selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
   1.178 +  elseif args.state == "frozen" then
   1.179 +    selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL")
   1.180 +  elseif args.state == "discussion" then
   1.181 +    selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
   1.182 +  elseif args.state == "new" then
   1.183 +    selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
   1.184 +  end
   1.185 +  if args.order == "time_left" then
   1.186 +    selector:add_order_by("issue.closed DESC")
   1.187 +  elseif args.order == "last_change" then
   1.188 +    selector:add_order_by("issue.closed DESC")
   1.189 +  elseif args.order == "interest" then
   1.190 +    selector:add_order_by("issue.population DESC")
   1.191 +  end
   1.192 +  
   1.193 +  return selector
   1.194 +end
   1.195 +
   1.196  function Issue.object_get:state()
   1.197    if self.closed then
   1.198      if self.fully_frozen then

Impressum / About Us