liquid_feedback_frontend
diff model/initiative.lua @ 1045:701a5cf6b067
Imported LiquidFeedback Frontend 3.0 branch
| author | bsw |
|---|---|
| date | Thu Jul 10 01:19:48 2014 +0200 (2014-07-10) |
| parents | 18e8de7a2b6a |
| children | 97ca043d7c40 |
line diff
1.1 --- a/model/initiative.lua Thu Jul 10 01:02:43 2014 +0200 1.2 +++ b/model/initiative.lua Thu Jul 10 01:19:48 2014 +0200 1.3 @@ -10,6 +10,14 @@ 1.4 } 1.5 1.6 Initiative:add_reference{ 1.7 + mode = 'm1', 1.8 + to = "Member", 1.9 + this_key = 'revoked_by_member_id', 1.10 + that_key = 'id', 1.11 + ref = 'revoked_by_member', 1.12 +} 1.13 + 1.14 +Initiative:add_reference{ 1.15 mode = '1m', 1.16 to = "Draft", 1.17 this_key = 'id', 1.18 @@ -26,6 +34,7 @@ 1.19 that_key = 'initiative_id', 1.20 ref = 'suggestions', 1.21 back_ref = 'initiative', 1.22 + default_order = '"proportional_order" NULLS LAST, id' 1.23 } 1.24 1.25 Initiative:add_reference{ 1.26 @@ -223,6 +232,61 @@ 1.27 :add_where("initiative.revoked ISNULL") 1.28 end 1.29 1.30 +function Initiative:getSpecialSelector( args ) 1.31 + local selector = Initiative:new_selector() 1.32 + selector:join( "issue", nil, "issue.id = initiative.issue_id" ) 1.33 + selector:join( "area", nil, "area.id = issue.area_id" ) 1.34 + if args.area_id then 1.35 + selector:add_where{ "area.id = ?", args.area_id } 1.36 + elseif args.unit_id then 1.37 + selector:add_where{ "area.unit_id = ?", args.unit_id } 1.38 + end 1.39 + selector:limit( 1 ) 1.40 + selector:optional_object_mode() 1.41 + return selector 1.42 +end 1.43 + 1.44 +function Initiative:getLastWinner( args ) 1.45 + local selector = Initiative:getSpecialSelector( args ) 1.46 + selector:add_where( "issue.state = 'finished_with_winner'" ) 1.47 + selector:add_order_by( "issue.closed DESC, id DESC" ) 1.48 + return selector:exec() 1.49 +end 1.50 + 1.51 +function Initiative:getLastLoser( args ) 1.52 + local selector = Initiative:getSpecialSelector( args ) 1.53 + selector:add_where( "issue.state = 'finished_without_winner'" ) 1.54 + selector:add_order_by( "issue.closed DESC, id DESC" ) 1.55 + return selector:exec() 1.56 +end 1.57 + 1.58 +function Initiative:getNextEndingVoting( args ) 1.59 + local selector = Initiative:getSpecialSelector( args ) 1.60 + selector:add_where( "issue.state = 'voting'" ) 1.61 + selector:add_order_by( "issue.fully_frozen + issue.verification_time DESC, id DESC" ) 1.62 + return selector:exec() 1.63 +end 1.64 + 1.65 +function Initiative:getNextEndingVerification( args ) 1.66 + local selector = Initiative:getSpecialSelector( args ) 1.67 + selector:add_where( "issue.state = 'verification'" ) 1.68 + selector:add_order_by( "issue.half_frozen + issue.verification_time DESC, id DESC" ) 1.69 + return selector:exec() 1.70 +end 1.71 + 1.72 +function Initiative:getNextEndingDiscussion( args ) 1.73 + local selector = Initiative:getSpecialSelector( args ) 1.74 + selector:add_where( "issue.state = 'discussion'" ) 1.75 + selector:add_order_by( "issue.accepted + issue.discussion_time DESC, id DESC" ) 1.76 + return selector:exec() 1.77 +end 1.78 + 1.79 +function Initiative:getBestInAdmission( args ) 1.80 + local selector = Initiative:getSpecialSelector( args ) 1.81 + selector:add_where( "issue.state = 'admission'" ) 1.82 + selector:add_order_by( "issue.created + issue.admission_time DESC, id DESC" ) 1.83 + return selector:exec() 1.84 +end 1.85 1.86 function Initiative.object_get:current_draft() 1.87 return Draft:new_selector() 1.88 @@ -240,6 +304,10 @@ 1.89 return name 1.90 end 1.91 1.92 +function Initiative.object_get:display_name() 1.93 + return "i" .. self.id .. ": " .. self.name 1.94 +end 1.95 + 1.96 function Initiative.object_get:initiator_names() 1.97 local members = Member:new_selector() 1.98 :join("initiator", nil, "initiator.member_id = member.id") 1.99 @@ -254,3 +322,8 @@ 1.100 return member_names 1.101 end 1.102 1.103 +function Initiative.object_get:potential_supporter_count() 1.104 + if self.supporter_count and self.satisfied_supporter_count then 1.105 + return self.supporter_count - self.satisfied_supporter_count 1.106 + end 1.107 +end