rev |
line source |
bsw/jbe@0
|
1 local issues_selector = param.get("issues_selector", "table")
|
bsw@285
|
2 local for_member = param.get("for_member", "table") or app.session.member
|
bsw/jbe@0
|
3
|
bsw@51
|
4 if app.session.member_id then
|
bsw@51
|
5 issues_selector
|
bsw@285
|
6 :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } )
|
bsw@51
|
7 :add_field("(_interest.member_id NOTNULL)", "is_interested")
|
bsw@285
|
8 issues_selector
|
bsw@285
|
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 } )
|
bsw@285
|
10 :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
|
bsw@285
|
11 :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
|
bsw@285
|
12 :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
|
bsw@51
|
13 end
|
bsw@11
|
14
|
bsw/jbe@19
|
15 ui.add_partial_param_names{
|
bsw/jbe@19
|
16 "filter",
|
bsw/jbe@19
|
17 "filter_open",
|
bsw/jbe@19
|
18 "filter_voting",
|
bsw/jbe@19
|
19 "filter_interest",
|
bsw/jbe@19
|
20 "issue_list"
|
bsw/jbe@19
|
21 }
|
bsw/jbe@0
|
22
|
bsw@285
|
23 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }}
|
bsw/jbe@19
|
24
|
bsw/jbe@19
|
25 filters.content = function()
|
bsw@275
|
26 ui.paginate{
|
bsw/jbe@19
|
27 per_page = tonumber(param.get("per_page")),
|
bsw/jbe@19
|
28 selector = issues_selector,
|
bsw/jbe@19
|
29 content = function()
|
bsw/jbe@19
|
30 local highlight_string = param.get("highlight_string", "string")
|
bsw/jbe@19
|
31 local issues = issues or issues_selector:exec()
|
bsw/jbe@19
|
32 -- issues:load(initiatives)
|
bsw@273
|
33 ui.container{ attr = { class = "issues" }, content = function()
|
bsw@273
|
34
|
bsw@273
|
35 for i, issue in ipairs(issues) do
|
bsw@273
|
36
|
bsw@273
|
37 local class = "issue"
|
bsw@289
|
38 if issue.is_interested then
|
bsw@273
|
39 class = class .. " interested"
|
bsw@289
|
40 elseif issue.is_interested_by_delegation_to_member_id then
|
bsw@289
|
41 class = class .. " interested_by_delegation"
|
bsw@273
|
42 end
|
bsw@273
|
43 ui.container{ attr = { class = class }, content = function()
|
bsw@273
|
44
|
bsw@273
|
45 ui.container{ attr = { class = "issue_info" }, content = function()
|
bsw@273
|
46
|
bsw@312
|
47 if issue.is_interested then
|
bsw@312
|
48 ui.tag{
|
bsw@312
|
49 tag = "div", attr = { class = "interest_by_delegation"},
|
bsw@312
|
50 content = function()
|
bsw@312
|
51 local text = "You are interested in this issue"
|
bsw@312
|
52 ui.image{ attr = { alt = text, title = text }, static = "icons/16/eye.png" }
|
bsw@312
|
53 end
|
bsw@312
|
54 }
|
bsw@312
|
55
|
bsw@312
|
56 elseif issue.is_interested_by_delegation_to_member_id then
|
bsw@285
|
57 ui.tag{
|
bsw@285
|
58 tag = "div", attr = { class = "interest_by_delegation"},
|
bsw@285
|
59 content = function()
|
bsw@285
|
60 local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
|
bsw@315
|
61 local text = _"delegated to"
|
bsw@315
|
62 ui.image{
|
bsw@315
|
63 attr = { class = "delegation_arrow", alt = text, title = text },
|
bsw@315
|
64 static = "delegation_arrow_24_horizontal.png"
|
bsw@315
|
65 }
|
bsw@285
|
66 execute.view{
|
bsw@285
|
67 module = "member_image",
|
bsw@285
|
68 view = "_show",
|
bsw@285
|
69 params = {
|
bsw@285
|
70 member = member,
|
bsw@285
|
71 image_type = "avatar",
|
bsw@285
|
72 show_dummy = true,
|
bsw@285
|
73 class = "micro_avatar",
|
bsw@285
|
74 popup_text = member.name
|
bsw@285
|
75 }
|
bsw@285
|
76 }
|
bsw@285
|
77 if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
|
bsw@285
|
78 if issue.delegation_chain_length > 2 then
|
bsw@315
|
79 local text = _"delegated to"
|
bsw@315
|
80 ui.image{
|
bsw@315
|
81 attr = { class = "delegation_arrow", alt = text, title = text },
|
bsw@315
|
82 static = "delegation_arrow_24_horizontal.png"
|
bsw@315
|
83 }
|
bsw@315
|
84 ui.tag{ content = "..." }
|
bsw@285
|
85 end
|
bsw@315
|
86 local text = _"delegated to"
|
bsw@315
|
87 ui.image{
|
bsw@315
|
88 attr = { class = "delegation_arrow", alt = text, title = text },
|
bsw@315
|
89 static = "delegation_arrow_24_horizontal.png"
|
bsw@315
|
90 }
|
bsw@285
|
91 local member = Member:by_id(issue.is_interested_via_member_id)
|
bsw@285
|
92 execute.view{
|
bsw@285
|
93 module = "member_image",
|
bsw@285
|
94 view = "_show",
|
bsw@285
|
95 params = {
|
bsw@285
|
96 member = member,
|
bsw@285
|
97 image_type = "avatar",
|
bsw@285
|
98 show_dummy = true,
|
bsw@285
|
99 class = "micro_avatar",
|
bsw@285
|
100 popup_text = member.name
|
bsw@285
|
101 }
|
bsw@285
|
102 }
|
bsw@285
|
103 end
|
bsw@285
|
104 end
|
bsw@285
|
105 }
|
bsw@285
|
106 end
|
bsw@285
|
107
|
bsw@273
|
108 ui.tag{
|
bsw@273
|
109 tag = "div",
|
bsw@273
|
110 content = function()
|
bsw@273
|
111 ui.link{
|
bsw@273
|
112 attr = { class = "issue_id" },
|
bsw@273
|
113 text = _("Issue ##{id}", { id = tostring(issue.id) }),
|
bsw@273
|
114 module = "issue",
|
bsw@273
|
115 view = "show",
|
bsw@273
|
116 id = issue.id
|
bsw@273
|
117 }
|
bsw@273
|
118
|
bsw@280
|
119 slot.put(" · ")
|
bsw@280
|
120 ui.tag{ content = issue.area.name }
|
bsw@280
|
121 slot.put(" · ")
|
bsw@280
|
122 ui.tag{ content = issue.area.unit.name }
|
bsw@280
|
123
|
bsw@280
|
124 end
|
bsw/jbe@19
|
125 }
|
bsw@273
|
126 ui.tag{
|
bsw@286
|
127 attr = { class = "issue_policy_info" },
|
bsw@273
|
128 tag = "div",
|
bsw@273
|
129 content = function()
|
bsw@273
|
130
|
bsw@273
|
131 ui.tag{ content = issue.policy.name }
|
bsw@273
|
132
|
bsw@273
|
133 slot.put(" · ")
|
bsw@273
|
134 ui.tag{ content = issue.state_name }
|
bsw@273
|
135
|
bsw@273
|
136 if issue.state_time_left then
|
bsw@273
|
137 slot.put(" · ")
|
bsw@346
|
138 ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left:gsub("days", _"days"):gsub("day", _"day") }) }
|
bsw@273
|
139 end
|
bsw@273
|
140
|
bsw@273
|
141 end
|
bsw@273
|
142 }
|
bsw@273
|
143
|
bsw@273
|
144
|
bsw@273
|
145 if issue.old_state then
|
bsw@273
|
146 ui.field.text{ value = format.time(issue.sort) }
|
bsw@273
|
147 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
|
bsw/jbe@19
|
148 else
|
bsw/jbe@19
|
149 end
|
bsw@273
|
150 end }
|
bsw@273
|
151
|
bsw@273
|
152 ui.container{ attr = { class = "initiative_list" }, content = function()
|
bsw@273
|
153
|
bsw@273
|
154 local initiatives_selector = issue:get_reference_selector("initiatives")
|
bsw/jbe@19
|
155 local highlight_string = param.get("highlight_string")
|
bsw/jbe@19
|
156 if highlight_string then
|
bsw/jbe@19
|
157 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
|
bsw/jbe@19
|
158 end
|
bsw/jbe@19
|
159 execute.view{
|
bsw/jbe@19
|
160 module = "initiative",
|
bsw/jbe@19
|
161 view = "_list",
|
bsw/jbe@19
|
162 params = {
|
bsw@273
|
163 issue = issue,
|
bsw/jbe@19
|
164 initiatives_selector = initiatives_selector,
|
bsw/jbe@19
|
165 highlight_string = highlight_string,
|
bsw@51
|
166 per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
|
bsw/jbe@19
|
167 no_sort = true,
|
bsw@285
|
168 limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
|
bsw@285
|
169 for_member = for_member
|
bsw/jbe@19
|
170 }
|
bsw/jbe@19
|
171 }
|
bsw@273
|
172 end }
|
bsw@273
|
173 end }
|
bsw@273
|
174 end
|
bsw@273
|
175 end }
|
bsw/jbe@19
|
176 end
|
bsw/jbe@19
|
177 }
|
bsw/jbe@19
|
178 end
|
bsw/jbe@19
|
179
|
bsw@275
|
180 filters.opened = true
|
bsw/jbe@19
|
181 filters.selector = issues_selector
|
bsw/jbe@19
|
182
|
bsw/jbe@19
|
183 if param.get("no_filter", atom.boolean) then
|
bsw/jbe@19
|
184 filters.content()
|
bsw/jbe@19
|
185 else
|
bsw/jbe@19
|
186 ui.filters(filters)
|
bsw/jbe@19
|
187 end
|