liquid_feedback_frontend

view app/main/issue/_list.lua @ 286:c587d8762e62

Registration process updated for Core 2.0, lockable member fields, notification settings
author bsw
date Sat Feb 25 11:51:37 2012 +0100 (2012-02-25)
parents 6c88b4bfb56c
children 6f79a181a921
line source
1 local issues_selector = param.get("issues_selector", "table")
2 local for_member = param.get("for_member", "table") or app.session.member
4 if app.session.member_id then
5 issues_selector
6 :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } )
7 :add_field("(_interest.member_id NOTNULL)", "is_interested")
8 issues_selector
9 :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", for_member.id } )
10 :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
11 :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
12 :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
13 end
15 ui.add_partial_param_names{
16 "filter",
17 "filter_open",
18 "filter_voting",
19 "filter_interest",
20 "issue_list"
21 }
23 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }}
25 filters.content = function()
26 ui.paginate{
27 per_page = tonumber(param.get("per_page")),
28 selector = issues_selector,
29 content = function()
30 local highlight_string = param.get("highlight_string", "string")
31 local issues = issues or issues_selector:exec()
32 -- issues:load(initiatives)
33 ui.container{ attr = { class = "issues" }, content = function()
35 for i, issue in ipairs(issues) do
37 local class = "issue"
38 if issue.is_interested or issue.is_interested_by_delegation_to_member_id then
39 class = class .. " interested"
40 end
41 ui.container{ attr = { class = class }, content = function()
43 ui.container{ attr = { class = "issue_info" }, content = function()
45 if issue.is_interested_by_delegation_to_member_id then
46 ui.tag{
47 tag = "div", attr = { class = "interest_by_delegation"},
48 content = function()
49 local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
50 ui.tag{ content = "->" }
51 execute.view{
52 module = "member_image",
53 view = "_show",
54 params = {
55 member = member,
56 image_type = "avatar",
57 show_dummy = true,
58 class = "micro_avatar",
59 popup_text = member.name
60 }
61 }
62 if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
63 if issue.delegation_chain_length > 2 then
64 ui.tag{ content = "-> ... " }
65 end
66 ui.tag{ content = "->" }
67 local member = Member:by_id(issue.is_interested_via_member_id)
68 execute.view{
69 module = "member_image",
70 view = "_show",
71 params = {
72 member = member,
73 image_type = "avatar",
74 show_dummy = true,
75 class = "micro_avatar",
76 popup_text = member.name
77 }
78 }
79 end
80 end
81 }
82 end
84 ui.tag{
85 tag = "div",
86 content = function()
87 ui.link{
88 attr = { class = "issue_id" },
89 text = _("Issue ##{id}", { id = tostring(issue.id) }),
90 module = "issue",
91 view = "show",
92 id = issue.id
93 }
95 slot.put(" · ")
96 ui.tag{ content = issue.area.name }
97 slot.put(" · ")
98 ui.tag{ content = issue.area.unit.name }
100 end
101 }
102 ui.tag{
103 attr = { class = "issue_policy_info" },
104 tag = "div",
105 content = function()
107 ui.tag{ content = issue.policy.name }
109 slot.put(" · ")
110 ui.tag{ content = issue.state_name }
112 if issue.state_time_left then
113 slot.put(" · ")
114 ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left }) }
115 end
117 end
118 }
121 if issue.old_state then
122 ui.field.text{ value = format.time(issue.sort) }
123 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
124 else
125 end
126 end }
128 ui.container{ attr = { class = "initiative_list" }, content = function()
130 local initiatives_selector = issue:get_reference_selector("initiatives")
131 local highlight_string = param.get("highlight_string")
132 if highlight_string then
133 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
134 end
135 execute.view{
136 module = "initiative",
137 view = "_list",
138 params = {
139 issue = issue,
140 initiatives_selector = initiatives_selector,
141 highlight_string = highlight_string,
142 per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
143 no_sort = true,
144 limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
145 for_member = for_member
146 }
147 }
148 end }
149 end }
150 end
151 end }
152 end
153 }
154 end
156 filters.opened = true
157 filters.selector = issues_selector
159 if param.get("no_filter", atom.boolean) then
160 filters.content()
161 else
162 ui.filters(filters)
163 end
165 if param.get("legend", atom.boolean) ~= false then
166 local filter = param.get_all_cgi().filter
167 if not filter or filter == "any" or filter ~= "finished" then
168 ui.bargraph_legend{
169 width = 25,
170 bars = {
171 { color = "#0a0", label = _"Supporter" },
172 { color = "#777", label = _"Potential supporter" },
173 { color = "#ddd", label = _"No support at all" },
174 }
175 }
176 end
177 if not filter or filter == "any" or filter == "finished" then
178 ui.bargraph_legend{
179 width = 25,
180 bars = {
181 { color = "#0a0", label = _"Yes" },
182 { color = "#aaa", label = _"Abstention" },
183 { color = "#a00", label = _"No" },
184 }
185 }
186 end
187 end

Impressum / About Us