liquid_feedback_frontend

view app/main/area/_list.lua @ 380:99cb2d8e2f46

merge
author jbe
date Mon Mar 05 11:16:41 2012 +0100 (2012-03-05)
parents 2dae61588cee
children b155ca3744c5
line source
1 local areas_selector = param.get("areas_selector", "table")
2 local hide_membership = param.get("hide_membership", atom.boolean)
4 areas_selector
5 :reset_fields()
6 :add_field("area.id", nil, { "grouped" })
7 :add_field("area.name", nil, { "grouped" })
8 :add_field("member_weight", nil, { "grouped" })
9 :add_field("direct_member_count", nil, { "grouped" })
10 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count")
11 :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")
12 :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")
13 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count")
14 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count")
15 :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count")
17 if app.session.member_id then
18 areas_selector
19 :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")
20 :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id })
21 :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" })
22 :left_join("delegation", nil, {
23 "delegation.truster_id = ? AND delegation.area_id = area.id AND delegation.scope = 'area'", app.session.member_id
24 })
25 :left_join("member", nil, "member.id = delegation.trustee_id")
26 :add_field("member.id", "trustee_member_id", { "grouped" })
27 :add_field("member.name", "trustee_member_name", { "grouped" })
28 else
29 areas_selector:add_field("0", "issues_to_vote_count")
30 end
33 ui.container{ attr = { class = "area_list" }, content = function()
35 ui.container{ attr = { class = "area head" }, content = function()
37 ui.container{ attr = { class = "phases" }, content = function()
39 ui.container{ attr = { class = "admission" }, content = function()
40 ui.image{ static = "icons/16/new.png" }
41 end }
43 ui.container{ attr = { class = "discussion" }, content = function()
44 ui.image{ static = "icons/16/comments.png" }
45 end }
47 ui.container{ attr = { class = "verification" }, content = function()
48 ui.image{ static = "icons/16/lock.png" }
49 end }
51 ui.container{ attr = { class = "voting" }, content = function()
52 ui.image{ static = "icons/16/email_open.png" }
53 end }
55 ui.container{ attr = { class = "finished" }, content = function()
56 ui.image{ static = "icons/16/tick.png" }
57 end }
59 ui.container{ attr = { class = "cancelled" }, content = function()
60 ui.image{ static = "icons/16/cross.png" }
61 end }
63 end }
65 end }
67 for i, area in ipairs(areas_selector:exec()) do
69 ui.container{ attr = { class = "area" }, content = function()
71 ui.container{ attr = { class = "bar" }, content = function()
72 if area.member_weight and area.direct_member_count then
73 local max_value = MemberCount:get()
74 ui.bargraph{
75 max_value = max_value,
76 width = 100,
77 bars = {
78 { color = "#444", value = area.direct_member_count },
79 { color = "#777", value = area.member_weight - area.direct_member_count },
80 { color = "#ddd", value = max_value - area.member_weight },
81 }
82 }
83 end
84 end }
86 if not hide_membership then
87 ui.container{ attr = { class = "membership" }, content = function()
88 if area.is_member then
89 local text = _"Member of area"
90 ui.image{
91 attr = { title = text, alt = text },
92 static = "icons/16/user_gray.png",
93 }
94 else
95 slot.put('<img src="null.png" width="16" height="1" />')
96 end
97 end }
98 end
100 ui.container{ attr = { class = "delegatee" }, content = function()
101 if area.trustee_member_id then
102 local trustee_member = Member:by_id(area.trustee_member_id)
103 local text = _("Area delegated to '#{name}'", { name = area.trustee_member_name })
104 ui.image{
105 attr = { class = "delegation_arrow", alt = text, title = text },
106 static = "delegation_arrow_24_horizontal.png"
107 }
108 execute.view{
109 module = "member_image",
110 view = "_show",
111 params = {
112 member = trustee_member,
113 image_type = "avatar",
114 show_dummy = true,
115 class = "micro_avatar",
116 popup_text = text
117 }
118 }
119 else
120 slot.put('<img src="null.png" width="41" height="1" />')
121 end
122 end }
124 ui.container{ attr = { class = "name" }, content = function()
125 ui.link{
126 text = area.name,
127 module = "area",
128 view = "show",
129 id = area.id
130 }
131 slot.put(" ")
132 ui.tag{ content = "" }
133 end }
135 ui.container{ attr = { class = "phases" }, content = function()
137 ui.container{ attr = { class = "admission" }, content = function()
138 ui.link{
139 text = tostring(area.issues_new_count),
140 module = "area",
141 view = "show",
142 id = area.id,
143 params = { filter = "new", tab = "issues" }
144 }
145 end }
147 ui.container{ attr = { class = "discussion" }, content = function()
148 ui.link{
149 text = tostring(area.issues_discussion_count),
150 module = "area",
151 view = "show",
152 id = area.id,
153 params = { filter = "accepted", tab = "issues" }
154 }
155 end }
157 ui.container{ attr = { class = "verification" }, content = function()
158 ui.link{
159 text = tostring(area.issues_frozen_count),
160 module = "area",
161 view = "show",
162 id = area.id,
163 params = { filter = "half_frozen", tab = "issues" }
164 }
165 end }
167 ui.container{ attr = { class = "voting" }, content = function()
168 ui.link{
169 text = tostring(area.issues_voting_count),
170 module = "area",
171 view = "show",
172 id = area.id,
173 params = { filter = "frozen", tab = "issues" }
174 }
175 end }
177 ui.container{ attr = { class = "finished" }, content = function()
178 ui.link{
179 text = tostring(area.issues_finished_count),
180 module = "area",
181 view = "show",
182 id = area.id,
183 params = { filter = "finished", issue_list = "newest", tab = "issues" }
184 }
185 end }
187 ui.container{ attr = { class = "cancelled" }, content = function()
188 ui.link{
189 text = tostring(area.issues_cancelled_count),
190 module = "area",
191 view = "show",
192 id = area.id,
193 params = { filter = "cancelled", issue_list = "newest", tab = "issues" }
194 }
195 end }
197 end }
199 slot.put("<br style='clear: right;' />")
200 end }
202 end
204 end }

Impressum / About Us