liquid_feedback_frontend

annotate app/main/member/show_tab.lua @ 118:93f4e465b50d

add initiator support in delegation

if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Sep 20 20:32:04 2010 +0200 (2010-09-20)
parents 6a12fb7e4963
children 43ac94c7575b
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
bsw@57 46 local selector = Area:new_selector()
bsw@57 47 :reset_fields()
bsw@57 48 :add_field("area.id", nil, { "grouped" })
bsw@57 49 :add_field("area.name", nil, { "grouped" })
bsw@57 50 :add_field("membership.member_id NOTNULL", "is_member", { "grouped" })
bsw@57 51 :add_field("count(issue.id)", "issues_to_vote_count")
bsw@57 52 :add_field("count(interest.member_id)", "interested_issues_to_vote_count")
bsw@57 53 :add_field("count(interest.member_id NOTNULL OR interest.member_id NOTNULL)", "issues_to_vote_count_sum")
bsw@57 54 :join("issue", nil, "issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL")
bsw@57 55 :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
bsw@57 56 :add_where{ "direct_voter.member_id ISNULL" }
bsw@57 57 :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id })
bsw@57 58 :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id })
bsw@57 59
bsw@57 60 local not_voted_areas = {}
bsw@57 61 local issues_to_vote_count = 0
bsw@57 62 for i, area in ipairs(selector:exec()) do
bsw@57 63 if area.is_member or area.interested_issues_to_vote_count > 0 then
bsw@57 64 not_voted_areas[#not_voted_areas+1] = area
bsw@57 65 end
bsw@67 66 if area.is_member then
bsw@67 67 issues_to_vote_count = issues_to_vote_count + area.issues_to_vote_count_sum
bsw@67 68 end
bsw@57 69 end
bsw@57 70
bsw@57 71 if issues_to_vote_count > 0 then
bsw@57 72 tabs[#tabs+1] = {
bsw@57 73 class = "yellow",
bsw@57 74 name = "not_voted_issues",
bsw@57 75 label = _"Not voted issues" .. " (" .. tostring(issues_to_vote_count) .. ")",
bsw@57 76 icon = { static = "icons/16/email_open.png" },
bsw@57 77 module = "index",
bsw@57 78 view = "_not_voted_issues",
bsw@57 79 params = {
bsw@57 80 areas = not_voted_areas
bsw@57 81 }
bsw@57 82 }
bsw@57 83 end
bsw@57 84
bsw@57 85 local initiator_invites_selector = Initiative:new_selector()
bsw@57 86 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id")
bsw@57 87 :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id })
bsw@57 88 :add_where("_issue_state.closed ISNULL AND _issue_state.half_frozen ISNULL")
bsw@57 89
bsw@57 90 if initiator_invites_selector:count() > 0 then
bsw@57 91 tabs[#tabs+1] = {
bsw@57 92 class = "yellow",
bsw@57 93 name = "initiator_invites",
bsw@57 94 label = _"Initiator invites" .. " (" .. tostring(initiator_invites_selector:count()) .. ")",
bsw@57 95 icon = { static = "icons/16/user_add.png" },
bsw@57 96 module = "index",
bsw@57 97 view = "_initiator_invites",
bsw@57 98 params = {
bsw@57 99 initiatives_selector = initiator_invites_selector
bsw@57 100 }
bsw@57 101 }
bsw@57 102 end
bsw@57 103
bsw@57 104 local updated_drafts_selector = Initiative:new_selector()
bsw@57 105 :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL")
bsw@57 106 :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id")
bsw@57 107 :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 108 :add_where("initiative.revoked ISNULL")
bsw@57 109
bsw@57 110 if updated_drafts_selector:count() > 0 then
bsw@57 111 tabs[#tabs+1] = {
bsw@57 112 class = "yellow",
bsw@57 113 name = "updated_drafts",
bsw@57 114 label = _"Updated drafts" .. " (" .. tostring(updated_drafts_selector:count()) .. ")",
bsw@57 115 icon = { static = "icons/16/script.png" },
bsw@57 116 module = "index",
bsw@57 117 view = "_updated_drafts",
bsw@57 118 params = {
bsw@57 119 initiatives_selector = updated_drafts_selector
bsw@57 120 }
bsw@57 121 }
bsw@57 122 end
bsw@57 123 end
bsw@57 124
bsw@57 125 tabs[#tabs+1] = {
bsw@57 126 name = "profile",
bsw@57 127 label = _"Profile",
bsw@57 128 icon = { static = "icons/16/application_form.png" },
bsw@57 129 module = "member",
bsw@57 130 view = "_profile",
bsw@57 131 params = { member = member },
bsw@57 132 }
bsw@57 133
bsw/jbe@19 134 local areas_selector = member:get_reference_selector("areas")
bsw@57 135 tabs[#tabs+1] = {
bsw@57 136 name = "areas",
bsw@57 137 label = _"Areas" .. " (" .. tostring(areas_selector:count()) .. ")",
bsw@57 138 icon = { static = "icons/16/package.png" },
bsw@57 139 module = "area",
bsw@57 140 view = "_list",
bsw@57 141 params = { areas_selector = areas_selector },
bsw@57 142 }
bsw@57 143
bsw/jbe@19 144 local issues_selector = member:get_reference_selector("issues")
bsw@57 145 tabs[#tabs+1] = {
bsw@57 146 name = "issues",
bsw@57 147 label = _"Issues" .. " (" .. tostring(issues_selector:count()) .. ")",
bsw@57 148 icon = { static = "icons/16/folder.png" },
bsw@57 149 module = "issue",
bsw@57 150 view = "_list",
bsw@57 151 params = { issues_selector = issues_selector },
bsw@57 152 }
bsw@57 153
bsw/jbe@19 154 local supported_initiatives_selector = member:get_reference_selector("supported_initiatives")
bsw@95 155
bsw@57 156 tabs[#tabs+1] = {
bsw@57 157 name = "supported_initiatives",
bsw@57 158 label = _"Supported initiatives" .. " (" .. tostring(supported_initiatives_selector:count()) .. ")",
bsw@57 159 icon = { static = "icons/16/thumb_up_green.png" },
bsw@95 160 module = "member",
bsw@95 161 view = "_list_supported_initiatives",
bsw@57 162 params = { initiatives_selector = supported_initiatives_selector },
bsw@57 163 }
bsw@57 164
bsw/jbe@19 165 local initiated_initiatives_selector = member:get_reference_selector("initiated_initiatives"):add_where("initiator.accepted = true")
bsw@57 166 tabs[#tabs+1] = {
bsw@57 167 name = "initiatied_initiatives",
bsw@57 168 label = _"Initiated initiatives" .. " (" .. tostring(initiated_initiatives_selector:count()) .. ")",
bsw@57 169 icon = { static = "icons/16/user_edit.png" },
bsw@95 170 module = "member",
bsw@95 171 view = "_list_supported_initiatives",
bsw@57 172 params = { initiatives_selector = initiated_initiatives_selector },
bsw@57 173 }
bsw@57 174
bsw/jbe@19 175 local incoming_delegations_selector = member:get_reference_selector("incoming_delegations")
bsw/jbe@19 176 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw/jbe@19 177 :add_where("_member_showtab_issue.closed ISNULL")
bsw@57 178 tabs[#tabs+1] = {
bsw@57 179 name = "incoming_delegations",
bsw@57 180 label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")",
bsw@57 181 icon = { static = "icons/16/table_go.png" },
bsw@57 182 module = "delegation",
bsw@57 183 view = "_list",
bsw@57 184 params = { delegations_selector = incoming_delegations_selector, incoming = true },
bsw@57 185 }
bsw@57 186
bsw/jbe@19 187 local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations")
bsw/jbe@19 188 :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id")
bsw/jbe@19 189 :add_where("_member_showtab_issue.closed ISNULL")
bsw@57 190 tabs[#tabs+1] = {
bsw@57 191 name = "outgoing_delegations",
bsw@57 192 label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")",
bsw@57 193 icon = { static = "icons/16/table_go.png" },
bsw@57 194 module = "delegation",
bsw@57 195 view = "_list",
bsw@57 196 params = { delegations_selector = outgoing_delegations_selector, outgoing = true },
bsw@57 197 }
bsw/jbe@19 198
bsw@57 199 local contacts_selector = member:get_reference_selector("saved_members"):add_where("public")
bsw@57 200 tabs[#tabs+1] = {
bsw@57 201 name = "contacts",
bsw@57 202 label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")",
bsw@57 203 icon = { static = "icons/16/book_edit.png" },
bsw/jbe@19 204 module = "member",
bsw@57 205 view = "_list",
bsw@57 206 params = { members_selector = contacts_selector },
bsw/jbe@19 207 }
bsw@57 208
bsw@57 209 ui.tabs(tabs)

Impressum / About Us