liquid_feedback_frontend
diff app/main/member/_show.lua @ 525:63d6549cc00b
Delegation chain preview improved, better visualisation of current context, code cleanup
| author | bsw |
|---|---|
| date | Fri May 18 19:07:07 2012 +0200 (2012-05-18) |
| parents | 4f39f0a0d5b5 |
| children | 305329da1c75 |
line diff
1.1 --- a/app/main/member/_show.lua Tue Apr 17 00:07:04 2012 +0200 1.2 +++ b/app/main/member/_show.lua Fri May 18 19:07:07 2012 +0200 1.3 @@ -1,8 +1,246 @@ 1.4 -execute.view{ 1.5 +local show_as_homepage = param.get("show_as_homepage", atom.boolean) 1.6 + 1.7 +local member = param.get("member", "table") 1.8 + 1.9 +local tabs = { 1.10 module = "member", 1.11 view = "show_tab", 1.12 - params = { 1.13 - member = param.get("member", "table"), 1.14 - show_as_homepage = param.get("show_as_homepage", atom.boolean) 1.15 + static_params = { 1.16 + member_id = member.id, 1.17 + show_as_homepage = show_as_homepage 1.18 } 1.19 -} 1.20 \ No newline at end of file 1.21 +} 1.22 + 1.23 +if show_as_homepage and app.session.member_id == member.id then 1.24 + 1.25 + if app.session.member.notify_email_unconfirmed then 1.26 + tabs[#tabs+1] = { 1.27 + class = "yellow", 1.28 + name = "email_unconfirmed", 1.29 + label = _"Email unconfirmed", 1.30 + module = "member", 1.31 + view = "_email_unconfirmed", 1.32 + params = {} 1.33 + } 1.34 + end 1.35 + 1.36 + if app.session.member.notify_level == nil then 1.37 + tabs[#tabs+1] = { 1.38 + class = "yellow", 1.39 + name = "notify_level_not_set", 1.40 + label = _"Notifications", 1.41 + module = "member", 1.42 + view = "_notify_level_not_set" 1.43 + } 1.44 + end 1.45 + 1.46 + local broken_delegations = Delegation:new_selector() 1.47 + :join("issue", nil, "issue.id = delegation.issue_id AND issue.closed ISNULL") 1.48 + :join("member", nil, "delegation.trustee_id = member.id") 1.49 + :add_where{"delegation.truster_id = ?", member.id} 1.50 + :add_where{"member.active = 'f' OR (member.last_activity IS NULL OR age(member.last_activity) > ?::interval)", config.delegation_warning_time } 1.51 + 1.52 + if broken_delegations:count() > 0 then 1.53 + tabs[#tabs+1] = { 1.54 + class = "red", 1.55 + name = "broken_delegations", 1.56 + label = _"Delegation problems" .. " (" .. tostring(broken_delegations:count()) .. ")", 1.57 + icon = { static = "icons/16/table_go.png" }, 1.58 + module = "delegation", 1.59 + view = "_list", 1.60 + params = { delegations_selector = broken_delegations, outgoing = true }, 1.61 + } 1.62 + end 1.63 + 1.64 + local selector = Issue:new_selector() 1.65 + :join("area", nil, "area.id = issue.area_id") 1.66 + :join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", app.session.member_id }) 1.67 + :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) 1.68 + :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id }) 1.69 + :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id }) 1.70 + :add_where{ "direct_voter.member_id ISNULL" } 1.71 + :add_where{ "interest.member_id NOTNULL OR membership.member_id NOTNULL" } 1.72 + :add_where{ "issue.fully_frozen NOTNULL" } 1.73 + :add_where{ "issue.closed ISNULL" } 1.74 + :add_order_by{ "issue.fully_frozen + issue.voting_time ASC" } 1.75 + 1.76 + local count = selector:count() 1.77 + if count > 0 then 1.78 + tabs[#tabs+1] = { 1.79 + class = "yellow", 1.80 + name = "not_voted_issues", 1.81 + label = _"Now in voting" .. " (" .. tostring(count) .. ")", 1.82 + icon = { static = "icons/16/email_open.png" }, 1.83 + module = "issue", 1.84 + view = "_list", 1.85 + params = { 1.86 + issues_selector = selector, 1.87 + no_filter = true 1.88 + } 1.89 + } 1.90 + end 1.91 + 1.92 + local initiator_invites_selector = Initiative:new_selector() 1.93 + :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id") 1.94 + :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id }) 1.95 + :add_where("_issue_state.closed ISNULL AND _issue_state.half_frozen ISNULL") 1.96 + 1.97 + if initiator_invites_selector:count() > 0 then 1.98 + tabs[#tabs+1] = { 1.99 + class = "yellow", 1.100 + name = "initiator_invites", 1.101 + label = _"Initiator invites" .. " (" .. tostring(initiator_invites_selector:count()) .. ")", 1.102 + icon = { static = "icons/16/user_add.png" }, 1.103 + module = "index", 1.104 + view = "_initiator_invites", 1.105 + params = { 1.106 + initiatives_selector = initiator_invites_selector 1.107 + } 1.108 + } 1.109 + end 1.110 + 1.111 + local updated_drafts_selector = Initiative:new_selector() 1.112 + :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL") 1.113 + :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id") 1.114 + :join("supporter", "supporter", { "supporter.member_id = ? AND supporter.initiative_id = initiative.id AND supporter.draft_id < _current_draft.id", app.session.member_id }) 1.115 + :add_where("initiative.revoked ISNULL") 1.116 + 1.117 + if updated_drafts_selector:count() > 0 then 1.118 + tabs[#tabs+1] = { 1.119 + class = "yellow", 1.120 + name = "updated_drafts", 1.121 + label = _"Updated drafts" .. " (" .. tostring(updated_drafts_selector:count()) .. ")", 1.122 + icon = { static = "icons/16/script.png" }, 1.123 + module = "index", 1.124 + view = "_updated_drafts", 1.125 + params = { 1.126 + initiatives_selector = updated_drafts_selector 1.127 + } 1.128 + } 1.129 + end 1.130 +end 1.131 + 1.132 +if not show_as_homepage then 1.133 + tabs[#tabs+1] = { 1.134 + name = "profile", 1.135 + label = _"Profile", 1.136 + icon = { static = "icons/16/application_form.png" }, 1.137 + module = "member", 1.138 + view = "_profile", 1.139 + params = { member = member }, 1.140 + } 1.141 +end 1.142 + 1.143 + 1.144 +local areas_selector = member:get_reference_selector("areas") 1.145 +tabs[#tabs+1] = { 1.146 + name = "areas", 1.147 + label = _"Units", 1.148 + icon = { static = "icons/16/package.png" }, 1.149 + module = "member", 1.150 + view = "_area_list", 1.151 + params = { areas_selector = areas_selector, member = member, for_member = not show_as_homepage }, 1.152 +} 1.153 + 1.154 +if show_as_homepage then 1.155 + tabs[#tabs+1] = { 1.156 + name = "timeline", 1.157 + label = _"Events", 1.158 + module = "member", 1.159 + view = "_event_list", 1.160 + params = { } 1.161 + } 1.162 +else 1.163 + tabs[#tabs+1] = { 1.164 + name = "timeline", 1.165 + label = _"Events", 1.166 + module = "event", 1.167 + view = "_list", 1.168 + params = { for_member = member } 1.169 + } 1.170 +end 1.171 + 1.172 +tabs[#tabs+1] = { 1.173 + name = "open", 1.174 + label = _"Open issues", 1.175 + module = "issue", 1.176 + view = "_list", 1.177 + link_params = { 1.178 + filter_interest = not show_as_homepage and "issue" or nil, 1.179 + }, 1.180 + params = { 1.181 + for_state = "open", 1.182 + for_member = not show_as_homepage and member or nil, 1.183 + issues_selector = Issue:new_selector() 1.184 + :add_where("issue.closed ISNULL") 1.185 + :add_order_by("coalesce(issue.fully_frozen + issue.voting_time, issue.half_frozen + issue.verification_time, issue.accepted + issue.discussion_time, issue.created + issue.admission_time) - now()") 1.186 + } 1.187 +} 1.188 + 1.189 +tabs[#tabs+1] = { 1.190 + name = "closed", 1.191 + label = _"Closed issues", 1.192 + module = "issue", 1.193 + view = "_list", 1.194 + link_params = { 1.195 + filter_interest = not show_as_homepage and "issue" or nil, 1.196 + }, 1.197 + params = { 1.198 + for_state = "closed", 1.199 + for_member = not show_as_homepage and member or nil, 1.200 + issues_selector = Issue:new_selector() 1.201 + :add_where("issue.closed NOTNULL") 1.202 + :add_order_by("issue.closed DESC") 1.203 + 1.204 + } 1.205 +} 1.206 + 1.207 +if show_as_homepage then 1.208 + tabs[#tabs+1] = { 1.209 + name = "members", 1.210 + label = _"Members", 1.211 + module = 'member', 1.212 + view = '_list', 1.213 + params = { members_selector = Member:new_selector() } 1.214 + } 1.215 +end 1.216 + 1.217 + 1.218 + 1.219 +if not show_as_homepage then 1.220 + local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations") 1.221 + :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id") 1.222 + :add_where("_member_showtab_issue.closed ISNULL") 1.223 + tabs[#tabs+1] = { 1.224 + name = "outgoing_delegations", 1.225 + label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")", 1.226 + icon = { static = "icons/16/table_go.png" }, 1.227 + module = "delegation", 1.228 + view = "_list", 1.229 + params = { delegations_selector = outgoing_delegations_selector, outgoing = true }, 1.230 + } 1.231 + 1.232 + local incoming_delegations_selector = member:get_reference_selector("incoming_delegations") 1.233 + :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id") 1.234 + :add_where("_member_showtab_issue.closed ISNULL") 1.235 + tabs[#tabs+1] = { 1.236 + name = "incoming_delegations", 1.237 + label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")", 1.238 + icon = { static = "icons/16/table_go.png" }, 1.239 + module = "delegation", 1.240 + view = "_list", 1.241 + params = { delegations_selector = incoming_delegations_selector, incoming = true }, 1.242 + } 1.243 + 1.244 + local contacts_selector = member:get_reference_selector("saved_members"):add_where("public") 1.245 + tabs[#tabs+1] = { 1.246 + name = "contacts", 1.247 + label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")", 1.248 + icon = { static = "icons/16/book_edit.png" }, 1.249 + module = "member", 1.250 + view = "_list", 1.251 + params = { members_selector = contacts_selector }, 1.252 + } 1.253 +end 1.254 + 1.255 +ui.tabs(tabs)