liquid_feedback_frontend
diff app/main/event/_list.lua @ 414:699b9fa7bc36
Integrated new event system, splitted issues in open/closed, changed navigation
| author | bsw |
|---|---|
| date | Sat Mar 10 16:57:49 2012 +0100 (2012-03-10) |
| parents | |
| children | 977c5374a120 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/app/main/event/_list.lua Sat Mar 10 16:57:49 2012 +0100 1.3 @@ -0,0 +1,174 @@ 1.4 +local global = param.get("global", atom.boolean) 1.5 +local for_member = param.get("for_member", "table") 1.6 +local for_unit = param.get("for_unit", "table") 1.7 +local for_area = param.get("for_area", "table") 1.8 + 1.9 +local event_selector = Event:new_selector() 1.10 + :add_order_by("event.id DESC") 1.11 + :limit(25) 1.12 + :join("issue", nil, "issue.id = event.issue_id") 1.13 + 1.14 +if for_member then 1.15 + event_selector:add_where{ "event.member_id = ?", for_member.id } 1.16 +elseif for_unit then 1.17 + event_selector:join("area", nil, "area.id = issue.area_id") 1.18 + event_selector:add_where{ "area.unit_id = ?", for_unit.id } 1.19 +elseif for_area then 1.20 + event_selector:add_where{ "issue.area_id = ?", for_area.id } 1.21 +elseif not global then 1.22 + event_selector:join("event_seen_by_member", nil, { "event_seen_by_member.id = event.id AND event_seen_by_member.seen_by_member_id = ?", app.session.member_id }) 1.23 +end 1.24 + 1.25 +if app.session.member_id then 1.26 + event_selector 1.27 + :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id } ) 1.28 + :add_field("(_interest.member_id NOTNULL)", "is_interested") 1.29 + :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", app.session.member.id } ) 1.30 + :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id") 1.31 + :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id") 1.32 + :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length") 1.33 +end 1.34 + 1.35 +--local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = app.session.member }} 1.36 + 1.37 +--filters.content = function() 1.38 + 1.39 + ui.container{ attr = { class = "issues events" }, content = function() 1.40 + 1.41 + local last_event_date 1.42 + for i, event in ipairs(event_selector:exec()) do 1.43 + if event.occurrence.date ~= last_event_date then 1.44 + ui.container{ attr = { class = "date" }, content = format.date(event.occurrence.date) } 1.45 + last_event_date = event.occurrence.date 1.46 + end 1.47 + local class = "issue" 1.48 + if event.is_interested then 1.49 + class = class .. " interested" 1.50 + elseif event.is_interested_by_delegation_to_member_id then 1.51 + class = class .. " interested_by_delegation" 1.52 + end 1.53 + ui.container{ attr = { class = class }, content = function() 1.54 + 1.55 + ui.container { attr = { class = "issue_info" }, content = function() 1.56 + 1.57 + ui.container{ content = function() 1.58 + ui.link{ 1.59 + attr = { class = "issue_id" }, 1.60 + text = _("Issue ##{id}", { id = tostring(event.issue_id) }), 1.61 + module = "issue", 1.62 + view = "show", 1.63 + id = event.issue_id 1.64 + } 1.65 + 1.66 + slot.put(" · ") 1.67 + ui.tag{ content = event.issue.area.name } 1.68 + slot.put(" · ") 1.69 + ui.tag{ content = event.issue.area.unit.name } 1.70 + slot.put(" · ") 1.71 + ui.tag{ content = event.issue.policy.name } 1.72 + end } 1.73 + 1.74 + ui.container{ attr = { class = "issue_policy_info" }, content = function() 1.75 + if event.member_id then 1.76 + ui.link{ 1.77 + content = function() 1.78 + execute.view{ 1.79 + module = "member_image", 1.80 + view = "_show", 1.81 + params = { 1.82 + member = event.member, 1.83 + image_type = "avatar", 1.84 + show_dummy = true, 1.85 + class = "micro_avatar", 1.86 + popup_text = text 1.87 + } 1.88 + } 1.89 + end, 1.90 + module = "member", view = "show", id = event.member_id 1.91 + } 1.92 + slot.put(" ") 1.93 + ui.link{ 1.94 + text = event.member.name, 1.95 + module = "member", view = "show", id = event.member_id 1.96 + } 1.97 + slot.put(" · ") 1.98 + end 1.99 + local event_name = event.event_name 1.100 + local event_image 1.101 + if event.event == "issue_state_changed" then 1.102 + if event.state == "discussion" then 1.103 + event_name = _"Discussion started" 1.104 + event_image = "new.png" 1.105 + elseif event.state == "verification" then 1.106 + event_name = _"Verification started" 1.107 + event_image = "lock.png" 1.108 + elseif event.state == "voting" then 1.109 + event_name = _"Voting started" 1.110 + event_image = "email_open.png" 1.111 + else 1.112 + event_name = event.state_name 1.113 + end 1.114 + if event_image then 1.115 + ui.image{ static = "icons/16/" .. event_image } 1.116 + end 1.117 + end 1.118 + ui.tag{ attr = { class = "event_name" }, content = event_name } 1.119 + slot.put(" · ") 1.120 + ui.tag{ attr = { class = "time" }, content = format.time(event.occurrence) } 1.121 + end } 1.122 + 1.123 + end } 1.124 + 1.125 + if event.suggestion_id then 1.126 + ui.container{ attr = { class = "suggestion" }, content = function() 1.127 + ui.link{ 1.128 + text = event.suggestion.name, 1.129 + module = "suggestion", view = "show", id = event.suggestion_id 1.130 + } 1.131 + end } 1.132 + end 1.133 + 1.134 + ui.container{ attr = { class = "initiative_list" }, content = function() 1.135 + if not event.initiative_id then 1.136 + local initiatives_selector = Initiative:new_selector() 1.137 + :add_where{ "initiative.issue_id = ?", event.issue_id } 1.138 + :add_order_by("initiative.rank, initiative.supporter_count") 1.139 + execute.view{ module = "initiative", view = "_list", params = { 1.140 + issue = event.issue, 1.141 + initiatives_selector = initiatives_selector, 1.142 + no_sort = true, 1.143 + limit = 3 1.144 + } } 1.145 + else 1.146 + local initiatives_selector = Initiative:new_selector() 1.147 + :add_where{ "initiative.id = ?", event.initiative_id } 1.148 + execute.view{ module = "initiative", view = "_list", params = { 1.149 + issue = event.issue, 1.150 + initiatives_selector = initiatives_selector, 1.151 + no_sort = true, 1.152 + limit = 1 1.153 + } } 1.154 + end 1.155 + end } 1.156 + 1.157 + --[[ 1.158 + if event.initiative_id then 1.159 + ui.container{ attr = { class = "initiative_id" }, content = event.initiative_id } 1.160 + end 1.161 + if event.draft_id then 1.162 + ui.container{ attr = { class = "draft_id" }, content = event.draft_id } 1.163 + end 1.164 + if event.suggestion_id then 1.165 + ui.container{ attr = { class = "suggestion_id" }, content = event.suggestion_id } 1.166 + end 1.167 + --]] 1.168 + 1.169 + end } 1.170 + end 1.171 + 1.172 + end } 1.173 + 1.174 +--end 1.175 + 1.176 +--filters.selector = event_selector 1.177 +--ui.filters(filters) 1.178 \ No newline at end of file