liquid_feedback_frontend

view model/issue.lua @ 72:dc04df019933

Initial translation to Esperanto from the German help files.
author Thomas Wuerfel
date Wed May 26 12:15:21 2010 +0200 (2010-05-26)
parents 88ac7798b562
children 733f65c0c0a0
line source
1 Issue = mondelefant.new_class()
2 Issue.table = 'issue'
4 Issue:add_reference{
5 mode = 'm1',
6 to = "Area",
7 this_key = 'area_id',
8 that_key = 'id',
9 ref = 'area',
10 }
12 Issue:add_reference{
13 mode = 'm1',
14 to = "Policy",
15 this_key = 'policy_id',
16 that_key = 'id',
17 ref = 'policy',
18 }
20 Issue:add_reference{
21 mode = '1m',
22 to = "Initiative",
23 this_key = 'id',
24 that_key = 'issue_id',
25 ref = 'initiatives',
26 back_ref = 'issue'
27 }
29 Issue:add_reference{
30 mode = '1m',
31 to = "Interest",
32 this_key = 'id',
33 that_key = 'issue_id',
34 ref = 'interests',
35 back_ref = 'issue',
36 default_order = '"id"'
37 }
39 Issue:add_reference{
40 mode = '1m',
41 to = "Supporter",
42 this_key = 'id',
43 that_key = 'issue_id',
44 ref = 'supporters',
45 back_ref = 'issue',
46 default_order = '"id"'
47 }
49 Issue:add_reference{
50 mode = '1m',
51 to = "DirectVoter",
52 this_key = 'id',
53 that_key = 'issue_id',
54 ref = 'direct_voters',
55 back_ref = 'issue',
56 default_order = '"member_id"'
57 }
59 Issue:add_reference{
60 mode = '1m',
61 to = "Vote",
62 this_key = 'id',
63 that_key = 'issue_id',
64 ref = 'votes',
65 back_ref = 'issue',
66 default_order = '"member_id", "initiative_id"'
67 }
69 Issue:add_reference{
70 mode = '1m',
71 to = "Delegation",
72 this_key = 'id',
73 that_key = 'issue_id',
74 ref = 'delegations',
75 back_ref = 'issue'
76 }
78 Issue:add_reference{
79 mode = 'mm',
80 to = "Member",
81 this_key = 'id',
82 that_key = 'id',
83 connected_by_table = 'interest',
84 connected_by_this_key = 'issue_id',
85 connected_by_that_key = 'member_id',
86 ref = 'members'
87 }
89 Issue:add_reference{
90 mode = 'mm',
91 to = "Member",
92 this_key = 'id',
93 that_key = 'id',
94 connected_by_table = 'direct_interest_snapshot',
95 connected_by_this_key = 'issue_id',
96 connected_by_that_key = 'member_id',
97 ref = 'interested_members_snapshot'
98 }
100 Issue:add_reference{
101 mode = 'mm',
102 to = "Member",
103 this_key = 'id',
104 that_key = 'id',
105 connected_by_table = 'direct_voter',
106 connected_by_this_key = 'issue_id',
107 connected_by_that_key = 'member_id',
108 ref = 'direct_voters'
109 }
113 function Issue:get_state_name_for_state(value)
114 local state_name_table = {
115 new = _"New",
116 accepted = _"Discussion",
117 frozen = _"Frozen",
118 voting = _"Voting",
119 finished = _"Finished",
120 cancelled = _"Cancelled"
121 }
122 return state_name_table[value] or value or ''
123 end
125 function Issue:get_search_selector(search_string)
126 return self:new_selector()
127 :join('"initiative"', nil, '"initiative"."issue_id" = "issue"."id"')
128 :join('"draft"', nil, '"draft"."initiative_id" = "initiative"."id"')
129 :add_where{ '"initiative"."text_search_data" @@ "text_search_query"(?) OR "draft"."text_search_data" @@ "text_search_query"(?)', search_string, search_string }
130 :add_group_by('"issue"."id"')
131 :add_group_by('"issue"."area_id"')
132 :add_group_by('"issue"."policy_id"')
133 :add_group_by('"issue"."created"')
134 :add_group_by('"issue"."accepted"')
135 :add_group_by('"issue"."half_frozen"')
136 :add_group_by('"issue"."fully_frozen"')
137 :add_group_by('"issue"."closed"')
138 :add_group_by('"issue"."ranks_available"')
139 :add_group_by('"issue"."snapshot"')
140 :add_group_by('"issue"."latest_snapshot_event"')
141 :add_group_by('"issue"."population"')
142 :add_group_by('"issue"."vote_now"')
143 :add_group_by('"issue"."vote_later"')
144 :add_group_by('"issue"."voter_count"')
145 :add_group_by('"_interest"."member_id"')
146 --:set_distinct()
147 end
149 function Issue:modify_selector_for_state(state)
150 if state == "new" then
151 initiatives_selector:add_where("issue.accepted ISNULL AND issue.cancelled ISNULL")
152 elseif state == "accepted" then
153 initiatives_selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.cancelled ISNULL")
154 elseif state == "frozen" then
155 initiatives_selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND cancelled ISNULL")
156 elseif state == "voting" then
157 initiatives_selector:add_where("issue.fully_frozen NOTNULL AND issue.finished ISNULL AND issue.cancelled ISNULL")
158 elseif state == "finished" then
159 initiatives_selector:add_where("issue.finished NOTNULL")
160 elseif state == "cancelled" then
161 initiatives_selector:add_where("issue.cancelled NOTNULL")
162 end
163 end
165 function Issue.object_get:state()
166 if self.closed then
167 if self.fully_frozen then
168 return "finished"
169 else
170 return "cancelled"
171 end
172 elseif self.fully_frozen then
173 return "voting"
174 elseif self.half_frozen then
175 return "frozen"
176 elseif self.accepted then
177 return "accepted"
178 else
179 return "new"
180 end
182 end
184 function Issue.object_get:state_name()
185 return Issue:get_state_name_for_state(self.state)
186 end
188 function Issue.object_get:state_time_left()
189 local state = self.state
190 local last_event_time
191 local duration
192 if state == "new" then
193 last_event_time = self.created
194 duration = self.admission_time
195 elseif state == "accepted" then
196 last_event_time = self.accepted
197 duration = self.discussion_time
198 elseif state == "frozen" then
199 last_event_time = self.half_frozen
200 duration = self.verification_time
201 elseif state == "voting" then
202 last_event_time = self.fully_frozen
203 duration = self.voting_time
204 end
205 return db:query{ "SELECT ?::timestamp + ?::interval - now() as time_left", last_event_time, duration }[1].time_left
206 end
208 function Issue.object_get:next_states()
209 local state = self.state
210 local next_states
211 if state == "new" then
212 next_states = { "accepted", "cancelled" }
213 elseif state == "accepted" then
214 next_states = { "frozen" }
215 elseif state == "frozen" then
216 next_states = { "voting" }
217 elseif state == "voting" then
218 next_states = { "finished" }
219 end
220 return next_states
221 end
223 function Issue.object_get:next_states_names()
224 local next_states = self.next_states
225 if not next_states then
226 return
227 end
228 local state_names = {}
229 for i, state in ipairs(self.next_states) do
230 state_names[#state_names+1] = Issue:get_state_name_for_state(state)
231 end
232 return table.concat(state_names, ", ")
233 end

Impressum / About Us