rev |
line source |
bsw/jbe@0
|
1 local areas_selector = param.get("areas_selector", "table")
|
bsw/jbe@0
|
2
|
bsw@9
|
3 areas_selector
|
bsw@9
|
4 :reset_fields()
|
bsw@9
|
5 :add_field("area.id", nil, { "grouped" })
|
bsw@9
|
6 :add_field("area.name", nil, { "grouped" })
|
bsw@9
|
7 :add_field("member_weight", nil, { "grouped" })
|
bsw@9
|
8 :add_field("direct_member_count", nil, { "grouped" })
|
bsw@9
|
9 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count")
|
bsw@9
|
10 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL)", "issues_discussion_count")
|
bsw@9
|
11 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL)", "issues_frozen_count")
|
bsw@9
|
12 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count")
|
bsw@10
|
13 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count")
|
bsw@10
|
14 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count")
|
bsw@51
|
15
|
bsw@51
|
16 if app.session.member_id then
|
bsw@51
|
17 areas_selector
|
bsw@51
|
18 :add_field({ "(SELECT COUNT(*) FROM issue LEFT JOIN direct_voter ON direct_voter.issue_id = issue.id AND direct_voter.member_id = ? WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL AND direct_voter.member_id ISNULL)", app.session.member.id }, "issues_to_vote_count")
|
bsw@51
|
19 :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id })
|
bsw@51
|
20 :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" })
|
bsw@51
|
21 else
|
bsw@51
|
22 areas_selector:add_field("0", "issues_to_vote_count")
|
bsw@51
|
23 end
|
bsw@9
|
24
|
bsw/jbe@19
|
25 local label_attr = { style = "text-align: right; width: 4em;" }
|
bsw/jbe@19
|
26 local field_attr = { style = "text-align: right; width: 4em;" }
|
bsw/jbe@19
|
27
|
bsw/jbe@19
|
28 ui.filters{
|
bsw/jbe@19
|
29 label = _"Change order",
|
bsw/jbe@0
|
30 selector = areas_selector,
|
bsw/jbe@19
|
31 {
|
bsw/jbe@19
|
32 label = _"Order by",
|
bsw/jbe@0
|
33 {
|
bsw/jbe@0
|
34 name = "member_weight",
|
bsw/jbe@0
|
35 label = _"Population",
|
bsw/jbe@19
|
36 selector_modifier = function(selector) selector:add_order_by("area.member_weight DESC") end
|
bsw/jbe@0
|
37 },
|
bsw/jbe@0
|
38 {
|
bsw/jbe@0
|
39 name = "direct_member_count",
|
bsw/jbe@0
|
40 label = _"Direct member count",
|
bsw/jbe@19
|
41 selector_modifier = function(selector) selector:add_order_by("area.direct_member_count DESC") end
|
bsw/jbe@0
|
42 },
|
bsw/jbe@0
|
43 {
|
bsw/jbe@0
|
44 name = "az",
|
bsw/jbe@0
|
45 label = _"A-Z",
|
bsw/jbe@19
|
46 selector_modifier = function(selector) selector:add_order_by("area.name") end
|
bsw/jbe@0
|
47 },
|
bsw/jbe@0
|
48 {
|
bsw/jbe@0
|
49 name = "za",
|
bsw/jbe@0
|
50 label = _"Z-A",
|
bsw/jbe@19
|
51 selector_modifier = function(selector) selector:add_order_by("area.name DESC") end
|
bsw/jbe@0
|
52 }
|
bsw/jbe@0
|
53 },
|
bsw/jbe@0
|
54 content = function()
|
bsw/jbe@0
|
55 ui.list{
|
bsw/jbe@19
|
56 attr = { class = "area_list" },
|
bsw/jbe@0
|
57 records = areas_selector:exec(),
|
bsw/jbe@0
|
58 columns = {
|
bsw/jbe@0
|
59 {
|
bsw/jbe@0
|
60 content = function(record)
|
bsw/jbe@19
|
61 if record.is_member then
|
bsw/jbe@19
|
62 local text = _"Member of area"
|
bsw/jbe@19
|
63 ui.image{
|
bsw/jbe@19
|
64 attr = { title = text, alt = text, style = "vertical-align: middle;" },
|
bsw/jbe@19
|
65 static = "icons/16/user_gray.png",
|
bsw/jbe@19
|
66 }
|
bsw/jbe@19
|
67 end
|
bsw/jbe@19
|
68 end
|
bsw/jbe@19
|
69 },
|
bsw/jbe@19
|
70 {
|
bsw/jbe@19
|
71 content = function(record)
|
bsw/jbe@0
|
72 if record.member_weight and record.direct_member_count then
|
bsw/jbe@0
|
73 local max_value = MemberCount:get()
|
bsw/jbe@0
|
74 ui.bargraph{
|
bsw/jbe@0
|
75 max_value = max_value,
|
bsw/jbe@4
|
76 width = 100,
|
bsw/jbe@0
|
77 bars = {
|
bsw/jbe@0
|
78 { color = "#444", value = record.direct_member_count },
|
bsw/jbe@0
|
79 { color = "#777", value = record.member_weight - record.direct_member_count },
|
bsw/jbe@0
|
80 { color = "#ddd", value = max_value - record.member_weight },
|
bsw/jbe@0
|
81 }
|
bsw/jbe@0
|
82 }
|
bsw/jbe@0
|
83 end
|
bsw/jbe@0
|
84 end
|
bsw/jbe@0
|
85 },
|
bsw/jbe@0
|
86 {
|
bsw/jbe@0
|
87 content = function(record)
|
bsw/jbe@0
|
88 ui.link{
|
bsw/jbe@0
|
89 text = record.name,
|
bsw/jbe@0
|
90 module = "area",
|
bsw/jbe@0
|
91 view = "show",
|
bsw/jbe@0
|
92 id = record.id
|
bsw/jbe@0
|
93 }
|
bsw/jbe@0
|
94 end
|
bsw@9
|
95 },
|
bsw@9
|
96 {
|
bsw/jbe@19
|
97 label = function()
|
bsw/jbe@19
|
98 local title = _"New"
|
bsw/jbe@19
|
99 ui.image{
|
bsw/jbe@19
|
100 attr = { title = title, alt = title },
|
bsw/jbe@19
|
101 static = "icons/16/new.png"
|
bsw/jbe@19
|
102 }
|
bsw/jbe@19
|
103 end,
|
bsw/jbe@19
|
104 field_attr = field_attr,
|
bsw/jbe@19
|
105 label_attr = label_attr,
|
bsw@9
|
106 content = function(record)
|
bsw@9
|
107 ui.link{
|
bsw@9
|
108 text = tostring(record.issues_new_count),
|
bsw@9
|
109 module = "area",
|
bsw@9
|
110 view = "show",
|
bsw@9
|
111 id = record.id,
|
bsw/jbe@19
|
112 params = { filter = "new", tab = "issues" }
|
bsw@9
|
113 }
|
bsw@9
|
114 end
|
bsw@9
|
115 },
|
bsw@9
|
116 {
|
bsw/jbe@19
|
117 label = function()
|
bsw/jbe@19
|
118 local title = _"Discussion"
|
bsw/jbe@19
|
119 ui.image{
|
bsw/jbe@19
|
120 attr = { title = title, alt = title },
|
bsw/jbe@19
|
121 static = "icons/16/comments.png"
|
bsw/jbe@19
|
122 }
|
bsw/jbe@19
|
123 end,
|
bsw/jbe@19
|
124 field_attr = field_attr,
|
bsw/jbe@19
|
125 label_attr = label_attr,
|
bsw@9
|
126 content = function(record)
|
bsw@9
|
127 ui.link{
|
bsw@9
|
128 text = tostring(record.issues_discussion_count),
|
bsw@9
|
129 module = "area",
|
bsw@9
|
130 view = "show",
|
bsw@9
|
131 id = record.id,
|
bsw/jbe@19
|
132 params = { filter = "accepted", tab = "issues" }
|
bsw@9
|
133 }
|
bsw@9
|
134 end
|
bsw@9
|
135 },
|
bsw@9
|
136 {
|
bsw/jbe@19
|
137 label = function()
|
bsw/jbe@19
|
138 local title = _"Frozen"
|
bsw/jbe@19
|
139 ui.image{
|
bsw/jbe@19
|
140 attr = { title = title, alt = title },
|
bsw/jbe@19
|
141 static = "icons/16/lock.png"
|
bsw/jbe@19
|
142 }
|
bsw/jbe@19
|
143 end,
|
bsw/jbe@19
|
144 field_attr = field_attr,
|
bsw/jbe@19
|
145 label_attr = label_attr,
|
bsw@9
|
146 content = function(record)
|
bsw@9
|
147 ui.link{
|
bsw@9
|
148 text = tostring(record.issues_frozen_count),
|
bsw@9
|
149 module = "area",
|
bsw@9
|
150 view = "show",
|
bsw@9
|
151 id = record.id,
|
bsw/jbe@19
|
152 params = { filter = "half_frozen", tab = "issues" }
|
bsw@9
|
153 }
|
bsw@9
|
154 end
|
bsw@9
|
155 },
|
bsw@9
|
156 {
|
bsw/jbe@19
|
157 label = function()
|
bsw/jbe@19
|
158 local title = _"Voting"
|
bsw/jbe@19
|
159 ui.image{
|
bsw/jbe@19
|
160 attr = { title = title, alt = title },
|
bsw/jbe@19
|
161 static = "icons/16/email_open.png"
|
bsw/jbe@19
|
162 }
|
bsw/jbe@19
|
163 end,
|
bsw/jbe@19
|
164 field_attr = field_attr,
|
bsw/jbe@19
|
165 label_attr = label_attr,
|
bsw@9
|
166 content = function(record)
|
bsw@9
|
167 ui.link{
|
bsw@9
|
168 text = tostring(record.issues_voting_count),
|
bsw@9
|
169 module = "area",
|
bsw@9
|
170 view = "show",
|
bsw@9
|
171 id = record.id,
|
bsw/jbe@19
|
172 params = { filter = "frozen", tab = "issues" }
|
bsw@9
|
173 }
|
bsw@9
|
174 end
|
bsw@9
|
175 },
|
bsw@9
|
176 {
|
bsw/jbe@19
|
177 label = function()
|
bsw/jbe@19
|
178 local title = _"Finished"
|
bsw/jbe@19
|
179 ui.image{
|
bsw/jbe@19
|
180 attr = { title = title, alt = title },
|
bsw/jbe@19
|
181 static = "icons/16/tick.png"
|
bsw@9
|
182 }
|
bsw/jbe@19
|
183 end,
|
bsw/jbe@19
|
184 field_attr = field_attr,
|
bsw/jbe@19
|
185 label_attr = label_attr,
|
bsw@10
|
186 content = function(record)
|
bsw@10
|
187 ui.link{
|
bsw@10
|
188 text = tostring(record.issues_finished_count),
|
bsw@10
|
189 module = "area",
|
bsw@10
|
190 view = "show",
|
bsw@10
|
191 id = record.id,
|
bsw/jbe@19
|
192 params = { filter = "finished", issue_list = "newest", tab = "issues" }
|
bsw@10
|
193 }
|
bsw@10
|
194 end
|
bsw@10
|
195 },
|
bsw@10
|
196 {
|
bsw/jbe@19
|
197 label = function()
|
bsw/jbe@19
|
198 local title = _"Cancelled"
|
bsw/jbe@19
|
199 ui.image{
|
bsw/jbe@19
|
200 attr = { title = title, alt = title },
|
bsw/jbe@19
|
201 static = "icons/16/cross.png"
|
bsw/jbe@19
|
202 }
|
bsw/jbe@19
|
203 end,
|
bsw/jbe@19
|
204 field_attr = field_attr,
|
bsw/jbe@19
|
205 label_attr = label_attr,
|
bsw@10
|
206 content = function(record)
|
bsw@10
|
207 ui.link{
|
bsw@10
|
208 text = tostring(record.issues_cancelled_count),
|
bsw@10
|
209 module = "area",
|
bsw@10
|
210 view = "show",
|
bsw@10
|
211 id = record.id,
|
bsw/jbe@19
|
212 params = { filter = "cancelled", issue_list = "newest", tab = "issues" }
|
bsw@10
|
213 }
|
bsw@10
|
214 end
|
bsw@10
|
215 },
|
bsw/jbe@19
|
216 {
|
bsw/jbe@19
|
217 content = function(record)
|
bsw/jbe@19
|
218 if record.issues_to_vote_count > 0 then
|
bsw/jbe@19
|
219 ui.link{
|
bsw/jbe@19
|
220 attr = { class = "not_voted" },
|
bsw/jbe@19
|
221 text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count),
|
bsw/jbe@19
|
222 module = "area",
|
bsw/jbe@19
|
223 view = "show",
|
bsw/jbe@19
|
224 id = record.id,
|
bsw/jbe@19
|
225 params = {
|
bsw/jbe@19
|
226 filter = "frozen",
|
bsw/jbe@19
|
227 filter_voting = "not_voted",
|
bsw/jbe@19
|
228 tab = "issues"
|
bsw/jbe@19
|
229 }
|
bsw/jbe@19
|
230 }
|
bsw/jbe@19
|
231 end
|
bsw/jbe@19
|
232 end
|
bsw/jbe@19
|
233 },
|
bsw/jbe@0
|
234 }
|
bsw/jbe@0
|
235 }
|
bsw/jbe@0
|
236 end
|
bsw/jbe@4
|
237 }
|
bsw/jbe@4
|
238
|
bsw/jbe@4
|
239 ui.bargraph_legend{
|
bsw/jbe@4
|
240 width = 25,
|
bsw/jbe@4
|
241 bars = {
|
bsw/jbe@4
|
242 { color = "#444", label = _"Direct membership" },
|
bsw/jbe@4
|
243 { color = "#777", label = _"Membership by delegation" },
|
bsw/jbe@4
|
244 { color = "#ddd", label = _"No membership at all" },
|
bsw/jbe@4
|
245 }
|
bsw/jbe@4
|
246 }
|
bsw/jbe@4
|
247
|
bsw/jbe@19
|
248 slot.put("<br /> ")
|
bsw/jbe@19
|
249
|
bsw/jbe@19
|
250
|
bsw@51
|
251 if app.session.member_id then
|
bsw@51
|
252 ui.image{
|
bsw@51
|
253 attr = { title = title, alt = title },
|
bsw@51
|
254 static = "icons/16/user_gray.png"
|
bsw@51
|
255 }
|
bsw@51
|
256 slot.put(" ")
|
bsw@51
|
257 slot.put(_"Member of area")
|
bsw@51
|
258 slot.put(" ")
|
bsw@51
|
259 end
|
bsw/jbe@19
|
260
|
bsw/jbe@19
|
261 ui.image{
|
bsw/jbe@19
|
262 attr = { title = title, alt = title },
|
bsw/jbe@19
|
263 static = "icons/16/new.png"
|
bsw/jbe@19
|
264 }
|
bsw/jbe@19
|
265 slot.put(" ")
|
bsw/jbe@19
|
266 slot.put(_"New")
|
bsw/jbe@19
|
267 slot.put(" ")
|
bsw/jbe@19
|
268
|
bsw/jbe@19
|
269 ui.image{
|
bsw/jbe@19
|
270 attr = { title = title, alt = title },
|
bsw/jbe@19
|
271 static = "icons/16/comments.png"
|
bsw/jbe@19
|
272 }
|
bsw/jbe@19
|
273 slot.put(" ")
|
bsw/jbe@19
|
274 slot.put(_"Discussion")
|
bsw/jbe@19
|
275 slot.put(" ")
|
bsw/jbe@19
|
276
|
bsw/jbe@19
|
277 ui.image{
|
bsw/jbe@19
|
278 attr = { title = title, alt = title },
|
bsw/jbe@19
|
279 static = "icons/16/lock.png"
|
bsw/jbe@19
|
280 }
|
bsw/jbe@19
|
281 slot.put(" ")
|
bsw/jbe@19
|
282 slot.put(_"Frozen")
|
bsw/jbe@19
|
283 slot.put(" ")
|
bsw/jbe@19
|
284
|
bsw/jbe@19
|
285 ui.image{
|
bsw/jbe@19
|
286 attr = { title = title, alt = title },
|
bsw/jbe@19
|
287 static = "icons/16/email_open.png"
|
bsw/jbe@19
|
288 }
|
bsw/jbe@19
|
289 slot.put(" ")
|
bsw/jbe@19
|
290 slot.put(_"Voting")
|
bsw/jbe@19
|
291 slot.put(" ")
|
bsw/jbe@19
|
292
|
bsw/jbe@19
|
293 ui.image{
|
bsw/jbe@19
|
294 attr = { title = title, alt = title },
|
bsw/jbe@19
|
295 static = "icons/16/tick.png"
|
bsw/jbe@19
|
296 }
|
bsw/jbe@19
|
297 slot.put(" ")
|
bsw/jbe@19
|
298 slot.put(_"Finished")
|
bsw/jbe@19
|
299 slot.put(" ")
|
bsw/jbe@19
|
300
|
bsw/jbe@19
|
301 ui.image{
|
bsw/jbe@19
|
302 attr = { title = title, alt = title },
|
bsw/jbe@19
|
303 static = "icons/16/cross.png"
|
bsw/jbe@19
|
304 }
|
bsw/jbe@19
|
305 slot.put(" ")
|
bsw/jbe@19
|
306 slot.put(_"Cancelled")
|
bsw/jbe@19
|
307
|