liquid_feedback_frontend

annotate 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
rev   line source
bsw@525 1 local show_as_homepage = param.get("show_as_homepage", atom.boolean)
bsw@525 2
bsw@525 3 local member = param.get("member", "table")
bsw@525 4
bsw@525 5 local tabs = {
bsw/jbe@19 6 module = "member",
bsw/jbe@19 7 view = "show_tab",
bsw@525 8 static_params = {
bsw@525 9 member_id = member.id,
bsw@525 10 show_as_homepage = show_as_homepage
bsw/jbe@19 11 }
bsw@525 12 }
bsw@525 13
bsw@525 14 if show_as_homepage and app.session.member_id == member.id then
bsw@525 15
bsw@525 16 if app.session.member.notify_email_unconfirmed then
bsw@525 17 tabs[#tabs+1] = {
bsw@525 18 class = "yellow",
bsw@525 19 name = "email_unconfirmed",
bsw@525 20 label = _"Email unconfirmed",
bsw@525 21 module = "member",
bsw@525 22 view = "_email_unconfirmed",
bsw@525 23 params = {}
bsw@525 24 }
bsw@525 25 end
bsw@525 26
bsw@525 27 if app.session.member.notify_level == nil then
bsw@525 28 tabs[#tabs+1] = {
bsw@525 29 class = "yellow",
bsw@525 30 name = "notify_level_not_set",
bsw@525 31 label = _"Notifications",
bsw@525 32 module = "member",
bsw@525 33 view = "_notify_level_not_set"
bsw@525 34 }
bsw@525 35 end
bsw@525 36
bsw@525 37 local broken_delegations = Delegation:new_selector()
bsw@525 38 :join("issue", nil, "issue.id = delegation.issue_id AND issue.closed ISNULL")
bsw@525 39 :join("member", nil, "delegation.trustee_id = member.id")
bsw@525 40 :add_where{"delegation.truster_id = ?", member.id}
bsw@525 41 :add_where{"member.active = 'f' OR (member.last_activity IS NULL OR age(member.last_activity) > ?::interval)", config.delegation_warning_time }
bsw@525 42
bsw@525 43 if broken_delegations:count() > 0 then
bsw@525 44 tabs[#tabs+1] = {
bsw@525 45 class = "red",
bsw@525 46 name = "broken_delegations",
bsw@525 47 label = _"Delegation problems" .. " (" .. tostring(broken_delegations:count()) .. ")",
bsw@525 48 icon = { static = "icons/16/table_go.png" },
bsw@525 49 module = "delegation",
bsw@525 50 view = "_list",
bsw@525 51 params = { delegations_selector = broken_delegations, outgoing = true },
bsw@525 52 }
bsw@525 53 end
bsw@525 54
bsw@525 55 local selector = Issue:new_selector()
bsw@525 56 :join("area", nil, "area.id = issue.area_id")
bsw@525 57 :join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", app.session.member_id })
bsw@525 58 :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw@525 59 :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id })
bsw@525 60 :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id })
bsw@525 61 :add_where{ "direct_voter.member_id ISNULL" }
bsw@525 62 :add_where{ "interest.member_id NOTNULL OR membership.member_id NOTNULL" }
bsw@525 63 :add_where{ "issue.fully_frozen NOTNULL" }
bsw@525 64 :add_where{ "issue.closed ISNULL" }
bsw@525 65 :add_order_by{ "issue.fully_frozen + issue.voting_time ASC" }
bsw@525 66
bsw@525 67 local count = selector:count()
bsw@525 68 if count > 0 then
bsw@525 69 tabs[#tabs+1] = {
bsw@525 70 class = "yellow",
bsw@525 71 name = "not_voted_issues",
bsw@525 72 label = _"Now in voting" .. " (" .. tostring(count) .. ")",
bsw@525 73 icon = { static = "icons/16/email_open.png" },
bsw@525 74 module = "issue",
bsw@525 75 view = "_list",
bsw@525 76 params = {
bsw@525 77 issues_selector = selector,
bsw@525 78 no_filter = true
bsw@525 79 }
bsw@525 80 }
bsw@525 81 end
bsw@525 82
bsw@525 83 local initiator_invites_selector = Initiative:new_selector()
bsw@525 84 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id")
bsw@525 85 :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id })
bsw@525 86 :add_where("_issue_state.closed ISNULL AND _issue_state.half_frozen ISNULL")
bsw@525 87
bsw@525 88 if initiator_invites_selector:count() > 0 then
bsw@525 89 tabs[#tabs+1] = {
bsw@525 90 class = "yellow",
bsw@525 91 name = "initiator_invites",
bsw@525 92 label = _"Initiator invites" .. " (" .. tostring(initiator_invites_selector:count()) .. ")",
bsw@525 93 icon = { static = "icons/16/user_add.png" },
bsw@525 94 module = "index",
bsw@525 95 view = "_initiator_invites",
bsw@525 96 params = {
bsw@525 97 initiatives_selector = initiator_invites_selector
bsw@525 98 }
bsw@525 99 }
bsw@525 100 end
bsw@525 101
bsw@525 102 local updated_drafts_selector = Initiative:new_selector()
bsw@525 103 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL")
bsw@525 104 :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id")
bsw@525 105 :join("supporter", "supporter", { "supporter.member_id = ? AND supporter.initiative_id = initiative.id AND supporter.draft_id < _current_draft.id", app.session.member_id })
bsw@525 106 :add_where("initiative.revoked ISNULL")
bsw@525 107
bsw@525 108 if updated_drafts_selector:count() > 0 then
bsw@525 109 tabs[#tabs+1] = {
bsw@525 110 class = "yellow",
bsw@525 111 name = "updated_drafts",
bsw@525 112 label = _"Updated drafts" .. " (" .. tostring(updated_drafts_selector:count()) .. ")",
bsw@525 113 icon = { static = "icons/16/script.png" },
bsw@525 114 module = "index",
bsw@525 115 view = "_updated_drafts",
bsw@525 116 params = {
bsw@525 117 initiatives_selector = updated_drafts_selector
bsw@525 118 }
bsw@525 119 }
bsw@525 120 end
bsw@525 121 end
bsw@525 122
bsw@525 123 if not show_as_homepage then
bsw@525 124 tabs[#tabs+1] = {
bsw@525 125 name = "profile",
bsw@525 126 label = _"Profile",
bsw@525 127 icon = { static = "icons/16/application_form.png" },
bsw@525 128 module = "member",
bsw@525 129 view = "_profile",
bsw@525 130 params = { member = member },
bsw@525 131 }
bsw@525 132 end
bsw@525 133
bsw@525 134
bsw@525 135 local areas_selector = member:get_reference_selector("areas")
bsw@525 136 tabs[#tabs+1] = {
bsw@525 137 name = "areas",
bsw@525 138 label = _"Units",
bsw@525 139 icon = { static = "icons/16/package.png" },
bsw@525 140 module = "member",
bsw@525 141 view = "_area_list",
bsw@525 142 params = { areas_selector = areas_selector, member = member, for_member = not show_as_homepage },
bsw@525 143 }
bsw@525 144
bsw@525 145 if show_as_homepage then
bsw@525 146 tabs[#tabs+1] = {
bsw@525 147 name = "timeline",
bsw@525 148 label = _"Events",
bsw@525 149 module = "member",
bsw@525 150 view = "_event_list",
bsw@525 151 params = { }
bsw@525 152 }
bsw@525 153 else
bsw@525 154 tabs[#tabs+1] = {
bsw@525 155 name = "timeline",
bsw@525 156 label = _"Events",
bsw@525 157 module = "event",
bsw@525 158 view = "_list",
bsw@525 159 params = { for_member = member }
bsw@525 160 }
bsw@525 161 end
bsw@525 162
bsw@525 163 tabs[#tabs+1] = {
bsw@525 164 name = "open",
bsw@525 165 label = _"Open issues",
bsw@525 166 module = "issue",
bsw@525 167 view = "_list",
bsw@525 168 link_params = {
bsw@525 169 filter_interest = not show_as_homepage and "issue" or nil,
bsw@525 170 },
bsw@525 171 params = {
bsw@525 172 for_state = "open",
bsw@525 173 for_member = not show_as_homepage and member or nil,
bsw@525 174 issues_selector = Issue:new_selector()
bsw@525 175 :add_where("issue.closed ISNULL")
bsw@525 176 :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()")
bsw@525 177 }
bsw@525 178 }
bsw@525 179
bsw@525 180 tabs[#tabs+1] = {
bsw@525 181 name = "closed",
bsw@525 182 label = _"Closed issues",
bsw@525 183 module = "issue",
bsw@525 184 view = "_list",
bsw@525 185 link_params = {
bsw@525 186 filter_interest = not show_as_homepage and "issue" or nil,
bsw@525 187 },
bsw@525 188 params = {
bsw@525 189 for_state = "closed",
bsw@525 190 for_member = not show_as_homepage and member or nil,
bsw@525 191 issues_selector = Issue:new_selector()
bsw@525 192 :add_where("issue.closed NOTNULL")
bsw@525 193 :add_order_by("issue.closed DESC")
bsw@525 194
bsw@525 195 }
bsw@525 196 }
bsw@525 197
bsw@525 198 if show_as_homepage then
bsw@525 199 tabs[#tabs+1] = {
bsw@525 200 name = "members",
bsw@525 201 label = _"Members",
bsw@525 202 module = 'member',
bsw@525 203 view = '_list',
bsw@525 204 params = { members_selector = Member:new_selector() }
bsw@525 205 }
bsw@525 206 end
bsw@525 207
bsw@525 208
bsw@525 209
bsw@525 210 if not show_as_homepage then
bsw@525 211 local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
bsw@525 212 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw@525 213 :add_where("_member_showtab_issue.closed ISNULL")
bsw@525 214 tabs[#tabs+1] = {
bsw@525 215 name = "outgoing_delegations",
bsw@525 216 label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")",
bsw@525 217 icon = { static = "icons/16/table_go.png" },
bsw@525 218 module = "delegation",
bsw@525 219 view = "_list",
bsw@525 220 params = { delegations_selector = outgoing_delegations_selector, outgoing = true },
bsw@525 221 }
bsw@525 222
bsw@525 223 local incoming_delegations_selector = member:get_reference_selector("incoming_delegations")
bsw@525 224 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw@525 225 :add_where("_member_showtab_issue.closed ISNULL")
bsw@525 226 tabs[#tabs+1] = {
bsw@525 227 name = "incoming_delegations",
bsw@525 228 label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")",
bsw@525 229 icon = { static = "icons/16/table_go.png" },
bsw@525 230 module = "delegation",
bsw@525 231 view = "_list",
bsw@525 232 params = { delegations_selector = incoming_delegations_selector, incoming = true },
bsw@525 233 }
bsw@525 234
bsw@525 235 local contacts_selector = member:get_reference_selector("saved_members"):add_where("public")
bsw@525 236 tabs[#tabs+1] = {
bsw@525 237 name = "contacts",
bsw@525 238 label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")",
bsw@525 239 icon = { static = "icons/16/book_edit.png" },
bsw@525 240 module = "member",
bsw@525 241 view = "_list",
bsw@525 242 params = { members_selector = contacts_selector },
bsw@525 243 }
bsw@525 244 end
bsw@525 245
bsw@525 246 ui.tabs(tabs)

Impressum / About Us