liquid_feedback_frontend

annotate app/main/member/show_tab.lua @ 159:5d797c6706d5

implement quorum display

show the initiative quorum as a small 1px line in bargraph
allow to update your support on the diff page
better linked title in diff page
show absolute quorum numbers in detail pages of issue and initiative
author Daniel Poelzleithner <poelzi@poelzi.org>
date Sat Oct 09 03:42:48 2010 +0200 (2010-10-09)
parents 329425e4128e
children f62c61bd912c
rev   line source
bsw@57 1 local show_as_homepage = param.get("show_as_homepage", atom.boolean)
bsw@57 2
bsw/jbe@19 3 local member
bsw/jbe@19 4
bsw/jbe@19 5 if request.get_json_request_slots() then
bsw/jbe@19 6 member = Member:by_id(param.get("member_id"))
bsw/jbe@19 7 else
bsw/jbe@19 8 member = param.get("member", "table")
bsw/jbe@19 9 end
bsw/jbe@19 10
bsw@57 11 local tabs = {
bsw@57 12 module = "member",
bsw@57 13 view = "show_tab",
bsw@57 14 static_params = {
bsw@57 15 member_id = member.id,
bsw@57 16 show_as_homepage = show_as_homepage
bsw@57 17 }
bsw@57 18 }
bsw@57 19
bsw@57 20 if show_as_homepage and app.session.member_id == member.id then
bsw@62 21
bsw@75 22 if app.session.member.notify_email_unconfirmed then
bsw@75 23 tabs[#tabs+1] = {
bsw@75 24 class = "yellow",
bsw@75 25 name = "email_unconfirmed",
bsw@75 26 label = _"Email unconfirmed",
bsw@75 27 icon = { static = "icons/16/bell.png" },
bsw@75 28 module = "member",
bsw@75 29 view = "_email_unconfirmed",
bsw@75 30 params = {}
bsw@75 31 }
bsw@75 32 end
bsw@75 33
bsw@69 34 if config.motd_intern then
bsw@62 35 tabs[#tabs+1] = {
bsw@62 36 class = "yellow",
bsw@62 37 name = "motd",
bsw@62 38 label = _"Message of the day",
bsw@62 39 icon = { static = "icons/16/bell.png" },
bsw@62 40 module = "index",
bsw@62 41 view = "_motd",
bsw@62 42 params = {}
bsw@62 43 }
bsw@62 44 end
bsw@57 45
poelzi@151 46 local broken_delegations = Delegation:new_selector()
poelzi@151 47 :join("member", nil, "delegation.trustee_id = member.id")
poelzi@152 48 :add_where{"delegation.truster_id = ?", member.id}
poelzi@152 49 if config.delegation_warning_time then
poelzi@152 50 broken_delegations:add_where{"member.active = 'f' OR (member.last_login IS NULL OR age(member.last_login) > ?::interval)", config.delegation_warning_time}
poelzi@152 51 else
poelzi@152 52 broken_delegations:add_where{"member.active = 'f'"}
poelzi@152 53 end
poelzi@151 54
poelzi@155 55 if broken_delegations:count() > 0 then
poelzi@151 56 tabs[#tabs+1] = {
poelzi@151 57 class = "red",
poelzi@151 58 name = "problem_delegations",
poelzi@151 59 label = _"Delegation problems" .. " (" .. tostring(broken_delegations:count()) .. ")",
poelzi@151 60 icon = { static = "icons/16/table_go.png" },
poelzi@151 61 module = "delegation",
poelzi@151 62 view = "_list",
poelzi@151 63 params = { delegations_selector = broken_delegations, outgoing = true },
poelzi@151 64 }
poelzi@151 65 end
poelzi@151 66
bsw@57 67 local selector = Area:new_selector()
bsw@57 68 :reset_fields()
bsw@57 69 :add_field("area.id", nil, { "grouped" })
bsw@57 70 :add_field("area.name", nil, { "grouped" })
bsw@57 71 :add_field("membership.member_id NOTNULL", "is_member", { "grouped" })
bsw@57 72 :add_field("count(issue.id)", "issues_to_vote_count")
bsw@57 73 :add_field("count(interest.member_id)", "interested_issues_to_vote_count")
bsw@57 74 :add_field("count(interest.member_id NOTNULL OR interest.member_id NOTNULL)", "issues_to_vote_count_sum")
bsw@57 75 :join("issue", nil, "issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL")
bsw@57 76 :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw@57 77 :add_where{ "direct_voter.member_id ISNULL" }
bsw@57 78 :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id })
bsw@57 79 :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id })
bsw@57 80
bsw@57 81 local not_voted_areas = {}
bsw@57 82 local issues_to_vote_count = 0
bsw@57 83 for i, area in ipairs(selector:exec()) do
bsw@57 84 if area.is_member or area.interested_issues_to_vote_count > 0 then
bsw@57 85 not_voted_areas[#not_voted_areas+1] = area
bsw@57 86 end
bsw@67 87 if area.is_member then
bsw@67 88 issues_to_vote_count = issues_to_vote_count + area.issues_to_vote_count_sum
bsw@67 89 end
bsw@57 90 end
bsw@57 91
bsw@57 92 if issues_to_vote_count > 0 then
bsw@57 93 tabs[#tabs+1] = {
bsw@57 94 class = "yellow",
bsw@57 95 name = "not_voted_issues",
bsw@57 96 label = _"Not voted issues" .. " (" .. tostring(issues_to_vote_count) .. ")",
bsw@57 97 icon = { static = "icons/16/email_open.png" },
bsw@57 98 module = "index",
bsw@57 99 view = "_not_voted_issues",
bsw@57 100 params = {
bsw@57 101 areas = not_voted_areas
bsw@57 102 }
bsw@57 103 }
bsw@57 104 end
bsw@57 105
bsw@57 106 local initiator_invites_selector = Initiative:new_selector()
bsw@57 107 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id")
bsw@57 108 :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id })
bsw@57 109 :add_where("_issue_state.closed ISNULL AND _issue_state.half_frozen ISNULL")
bsw@57 110
bsw@57 111 if initiator_invites_selector:count() > 0 then
bsw@57 112 tabs[#tabs+1] = {
bsw@57 113 class = "yellow",
bsw@57 114 name = "initiator_invites",
bsw@57 115 label = _"Initiator invites" .. " (" .. tostring(initiator_invites_selector:count()) .. ")",
bsw@57 116 icon = { static = "icons/16/user_add.png" },
bsw@57 117 module = "index",
bsw@57 118 view = "_initiator_invites",
bsw@57 119 params = {
bsw@57 120 initiatives_selector = initiator_invites_selector
bsw@57 121 }
bsw@57 122 }
bsw@57 123 end
bsw@57 124
bsw@57 125 local updated_drafts_selector = Initiative:new_selector()
bsw@57 126 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL")
bsw@57 127 :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id")
bsw@57 128 :join("supporter", "supporter", { "supporter.member_id = ? AND supporter.initiative_id = initiative.id AND supporter.draft_id < _current_draft.id", app.session.member_id })
bsw@75 129 :add_where("initiative.revoked ISNULL")
bsw@57 130
bsw@57 131 if updated_drafts_selector:count() > 0 then
bsw@57 132 tabs[#tabs+1] = {
bsw@57 133 class = "yellow",
bsw@57 134 name = "updated_drafts",
bsw@57 135 label = _"Updated drafts" .. " (" .. tostring(updated_drafts_selector:count()) .. ")",
bsw@57 136 icon = { static = "icons/16/script.png" },
bsw@57 137 module = "index",
bsw@57 138 view = "_updated_drafts",
bsw@57 139 params = {
bsw@57 140 initiatives_selector = updated_drafts_selector
bsw@57 141 }
bsw@57 142 }
bsw@57 143 end
bsw@57 144 end
bsw@57 145
bsw@57 146 tabs[#tabs+1] = {
bsw@57 147 name = "profile",
bsw@57 148 label = _"Profile",
bsw@57 149 icon = { static = "icons/16/application_form.png" },
bsw@57 150 module = "member",
bsw@57 151 view = "_profile",
bsw@57 152 params = { member = member },
bsw@57 153 }
bsw@57 154
bsw/jbe@19 155 local areas_selector = member:get_reference_selector("areas")
bsw@57 156 tabs[#tabs+1] = {
bsw@57 157 name = "areas",
bsw@57 158 label = _"Areas" .. " (" .. tostring(areas_selector:count()) .. ")",
bsw@57 159 icon = { static = "icons/16/package.png" },
bsw@57 160 module = "area",
bsw@57 161 view = "_list",
bsw@57 162 params = { areas_selector = areas_selector },
bsw@57 163 }
bsw@57 164
bsw/jbe@19 165 local issues_selector = member:get_reference_selector("issues")
bsw@57 166 tabs[#tabs+1] = {
bsw@57 167 name = "issues",
bsw@57 168 label = _"Issues" .. " (" .. tostring(issues_selector:count()) .. ")",
bsw@57 169 icon = { static = "icons/16/folder.png" },
bsw@57 170 module = "issue",
bsw@57 171 view = "_list",
bsw@57 172 params = { issues_selector = issues_selector },
bsw@57 173 }
bsw@57 174
bsw/jbe@19 175 local supported_initiatives_selector = member:get_reference_selector("supported_initiatives")
bsw@95 176
bsw@57 177 tabs[#tabs+1] = {
bsw@57 178 name = "supported_initiatives",
bsw@57 179 label = _"Supported initiatives" .. " (" .. tostring(supported_initiatives_selector:count()) .. ")",
bsw@57 180 icon = { static = "icons/16/thumb_up_green.png" },
bsw@95 181 module = "member",
bsw@95 182 view = "_list_supported_initiatives",
poelzi@137 183 params = { initiatives_selector = supported_initiatives_selector,
poelzi@137 184 member = member },
bsw@57 185 }
bsw@57 186
bsw/jbe@19 187 local initiated_initiatives_selector = member:get_reference_selector("initiated_initiatives"):add_where("initiator.accepted = true")
bsw@57 188 tabs[#tabs+1] = {
bsw@57 189 name = "initiatied_initiatives",
bsw@57 190 label = _"Initiated initiatives" .. " (" .. tostring(initiated_initiatives_selector:count()) .. ")",
bsw@57 191 icon = { static = "icons/16/user_edit.png" },
bsw@95 192 module = "member",
bsw@95 193 view = "_list_supported_initiatives",
poelzi@137 194 params = { initiatives_selector = initiated_initiatives_selector,
poelzi@137 195 member = member},
bsw@57 196 }
bsw@57 197
bsw/jbe@19 198 local incoming_delegations_selector = member:get_reference_selector("incoming_delegations")
bsw/jbe@19 199 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw/jbe@19 200 :add_where("_member_showtab_issue.closed ISNULL")
bsw@57 201 tabs[#tabs+1] = {
bsw@57 202 name = "incoming_delegations",
bsw@57 203 label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")",
bsw@57 204 icon = { static = "icons/16/table_go.png" },
bsw@57 205 module = "delegation",
bsw@57 206 view = "_list",
bsw@57 207 params = { delegations_selector = incoming_delegations_selector, incoming = true },
bsw@57 208 }
bsw@57 209
bsw/jbe@19 210 local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
bsw/jbe@19 211 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw/jbe@19 212 :add_where("_member_showtab_issue.closed ISNULL")
bsw@57 213 tabs[#tabs+1] = {
bsw@57 214 name = "outgoing_delegations",
bsw@57 215 label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")",
bsw@57 216 icon = { static = "icons/16/table_go.png" },
bsw@57 217 module = "delegation",
bsw@57 218 view = "_list",
bsw@57 219 params = { delegations_selector = outgoing_delegations_selector, outgoing = true },
bsw@57 220 }
bsw/jbe@19 221
bsw@57 222 local contacts_selector = member:get_reference_selector("saved_members"):add_where("public")
bsw@57 223 tabs[#tabs+1] = {
bsw@57 224 name = "contacts",
bsw@57 225 label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")",
bsw@57 226 icon = { static = "icons/16/book_edit.png" },
bsw/jbe@19 227 module = "member",
bsw@57 228 view = "_list",
bsw@57 229 params = { members_selector = contacts_selector },
bsw/jbe@19 230 }
bsw@57 231
bsw@57 232 ui.tabs(tabs)

Impressum / About Us