liquid_feedback_frontend

view app/main/area/_list.lua @ 570:b904fc12cc1a

Show only units with voting privilege in member_home page
author bsw
date Tue Jun 19 23:18:39 2012 +0200 (2012-06-19)
parents 37b12af64990
children 9df26b41ace0
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 = "box 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", attr = { alt = _"New" } }
41 end }
43 ui.container{ attr = { class = "discussion" }, content = function()
44 ui.image{ static = "icons/16/comments.png", attr = { alt = _"Discussion" } }
45 end }
47 ui.container{ attr = { class = "verification" }, content = function()
48 ui.image{ static = "icons/16/lock.png", attr = { alt = _"Verification" } }
49 end }
51 ui.container{ attr = { class = "voting" }, content = function()
52 ui.image{ static = "icons/16/email_open.png", attr = { alt = _"Voting" } }
53 end }
55 ui.container{ attr = { class = "finished" }, content = function()
56 ui.image{ static = "icons/16/tick.png", attr = { alt = _"Finished" } }
57 end }
59 ui.container{ attr = { class = "cancelled" }, content = function()
60 ui.image{ static = "icons/16/cross.png", attr = { alt = _"Cancelled" } }
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 ui.container{ attr = { class = "name" }, content = function()
87 ui.link{
88 text = area.name,
89 module = "area",
90 view = "show",
91 id = area.id
92 }
93 slot.put(" ")
94 ui.tag{ content = "" }
95 end }
97 if not hide_membership then
98 ui.container{ attr = { class = "membership" }, content = function()
99 if area.is_member then
100 local text = _"Member of area"
101 ui.image{
102 attr = { title = text, alt = text },
103 static = "icons/16/user_gray.png",
104 }
105 else
106 slot.put('<img src="null.png" width="16" height="1" alt="" />')
107 end
108 end }
109 end
111 ui.container{ attr = { class = "delegatee" }, content = function()
112 if area.trustee_member_id then
113 local trustee_member = Member:by_id(area.trustee_member_id)
114 local text = _("Area delegated to '#{name}'", { name = area.trustee_member_name })
115 ui.image{
116 attr = { class = "delegation_arrow", alt = text, title = text },
117 static = "delegation_arrow_24_horizontal.png"
118 }
119 execute.view{
120 module = "member_image",
121 view = "_show",
122 params = {
123 member = trustee_member,
124 image_type = "avatar",
125 show_dummy = true,
126 class = "micro_avatar",
127 popup_text = text
128 }
129 }
130 else
131 slot.put('<img src="null.png" width="41" height="1" alt="" />')
132 end
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 = "open" }
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 = "open" }
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 = "open" }
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 = "open" }
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", tab = "closed" }
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 = "closed" }
194 }
195 end }
197 end }
199 slot.put("<br style='clear: right;' />")
200 end }
202 end
204 end }

Impressum / About Us