bsw@57: local show_as_homepage = param.get("show_as_homepage", atom.boolean) bsw@57: bsw/jbe@19: local member bsw/jbe@19: bsw/jbe@19: if request.get_json_request_slots() then bsw/jbe@19: member = Member:by_id(param.get("member_id")) bsw/jbe@19: else bsw/jbe@19: member = param.get("member", "table") bsw/jbe@19: end bsw/jbe@19: bsw@57: local tabs = { bsw@57: module = "member", bsw@57: view = "show_tab", bsw@57: static_params = { bsw@57: member_id = member.id, bsw@57: show_as_homepage = show_as_homepage bsw@57: } bsw@57: } bsw@57: bsw@57: if show_as_homepage and app.session.member_id == member.id then bsw@62: bsw@75: if app.session.member.notify_email_unconfirmed then bsw@75: tabs[#tabs+1] = { bsw@75: class = "yellow", bsw@75: name = "email_unconfirmed", bsw@75: label = _"Email unconfirmed", bsw@75: icon = { static = "icons/16/bell.png" }, bsw@75: module = "member", bsw@75: view = "_email_unconfirmed", bsw@75: params = {} bsw@75: } bsw@75: end bsw@75: bsw@69: if config.motd_intern then bsw@62: tabs[#tabs+1] = { bsw@62: class = "yellow", bsw@62: name = "motd", bsw@62: label = _"Message of the day", bsw@62: icon = { static = "icons/16/bell.png" }, bsw@62: module = "index", bsw@62: view = "_motd", bsw@62: params = {} bsw@62: } bsw@62: end bsw@57: poelzi@151: local broken_delegations = Delegation:new_selector() bsw@209: :join("issue", nil, "issue.id = delegation.issue_id AND issue.closed ISNULL") poelzi@151: :join("member", nil, "delegation.trustee_id = member.id") poelzi@152: :add_where{"delegation.truster_id = ?", member.id} bsw@242: :add_where{"member.active = 'f' OR (member.last_activity IS NULL OR age(member.last_activity) > ?::interval)", config.delegation_warning_time } poelzi@151: poelzi@155: if broken_delegations:count() > 0 then poelzi@151: tabs[#tabs+1] = { poelzi@151: class = "red", bsw@203: name = "broken_delegations", poelzi@151: label = _"Delegation problems" .. " (" .. tostring(broken_delegations:count()) .. ")", poelzi@151: icon = { static = "icons/16/table_go.png" }, poelzi@151: module = "delegation", poelzi@151: view = "_list", poelzi@151: params = { delegations_selector = broken_delegations, outgoing = true }, poelzi@151: } poelzi@151: end poelzi@151: bsw@57: local selector = Area:new_selector() bsw@57: :reset_fields() bsw@57: :add_field("area.id", nil, { "grouped" }) bsw@57: :add_field("area.name", nil, { "grouped" }) bsw@57: :add_field("membership.member_id NOTNULL", "is_member", { "grouped" }) bsw@57: :add_field("count(issue.id)", "issues_to_vote_count") bsw@57: :add_field("count(interest.member_id)", "interested_issues_to_vote_count") bsw@57: :add_field("count(interest.member_id NOTNULL OR interest.member_id NOTNULL)", "issues_to_vote_count_sum") bsw@57: :join("issue", nil, "issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL") bsw@57: :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) bsw@57: :add_where{ "direct_voter.member_id ISNULL" } bsw@57: :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id }) bsw@57: :left_join("membership", nil, { "membership.area_id = area.id AND membership.member_id = ? ", app.session.member.id }) bsw@57: bsw@57: local not_voted_areas = {} bsw@57: local issues_to_vote_count = 0 bsw@57: for i, area in ipairs(selector:exec()) do bsw@57: if area.is_member or area.interested_issues_to_vote_count > 0 then bsw@57: not_voted_areas[#not_voted_areas+1] = area bsw@57: end bsw@67: if area.is_member then bsw@67: issues_to_vote_count = issues_to_vote_count + area.issues_to_vote_count_sum bsw@67: end bsw@57: end bsw@57: bsw@57: if issues_to_vote_count > 0 then bsw@57: tabs[#tabs+1] = { bsw@57: class = "yellow", bsw@57: name = "not_voted_issues", bsw@57: label = _"Not voted issues" .. " (" .. tostring(issues_to_vote_count) .. ")", bsw@57: icon = { static = "icons/16/email_open.png" }, bsw@57: module = "index", bsw@57: view = "_not_voted_issues", bsw@57: params = { bsw@57: areas = not_voted_areas bsw@57: } bsw@57: } bsw@57: end bsw@57: bsw@57: local initiator_invites_selector = Initiative:new_selector() bsw@57: :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id") bsw@57: :join("initiator", nil, { "initiator.initiative_id = initiative.id AND initiator.member_id = ? AND initiator.accepted ISNULL", app.session.member.id }) bsw@57: :add_where("_issue_state.closed ISNULL AND _issue_state.half_frozen ISNULL") bsw@57: bsw@57: if initiator_invites_selector:count() > 0 then bsw@57: tabs[#tabs+1] = { bsw@57: class = "yellow", bsw@57: name = "initiator_invites", bsw@57: label = _"Initiator invites" .. " (" .. tostring(initiator_invites_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/user_add.png" }, bsw@57: module = "index", bsw@57: view = "_initiator_invites", bsw@57: params = { bsw@57: initiatives_selector = initiator_invites_selector bsw@57: } bsw@57: } bsw@57: end bsw@57: bsw@57: local updated_drafts_selector = Initiative:new_selector() bsw@57: :join("issue", "_issue_state", "_issue_state.id = initiative.issue_id AND _issue_state.closed ISNULL AND _issue_state.fully_frozen ISNULL") bsw@57: :join("current_draft", "_current_draft", "_current_draft.initiative_id = initiative.id") bsw@57: :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: :add_where("initiative.revoked ISNULL") bsw@57: bsw@57: if updated_drafts_selector:count() > 0 then bsw@57: tabs[#tabs+1] = { bsw@57: class = "yellow", bsw@57: name = "updated_drafts", bsw@57: label = _"Updated drafts" .. " (" .. tostring(updated_drafts_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/script.png" }, bsw@57: module = "index", bsw@57: view = "_updated_drafts", bsw@57: params = { bsw@57: initiatives_selector = updated_drafts_selector bsw@57: } bsw@57: } bsw@57: end bsw@57: end bsw@57: bsw@273: if not show_as_homepage then bsw@273: tabs[#tabs+1] = { bsw@273: name = "profile", bsw@273: label = _"Profile", bsw@273: icon = { static = "icons/16/application_form.png" }, bsw@273: module = "member", bsw@273: view = "_profile", bsw@273: params = { member = member }, bsw@273: } bsw@273: end bsw@57: bsw/jbe@19: local areas_selector = member:get_reference_selector("areas") bsw@57: tabs[#tabs+1] = { bsw@57: name = "areas", bsw@57: label = _"Areas" .. " (" .. tostring(areas_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/package.png" }, bsw@273: module = "member", bsw@273: view = "_area_list", bsw@273: params = { areas_selector = areas_selector, member = member }, bsw@57: } bsw@57: bsw@276: local issues_selector = Issue:new_selector() bsw@57: tabs[#tabs+1] = { bsw@57: name = "issues", bsw@273: label = _"Issues" .. " (" .. tostring(issues_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/folder.png" }, bsw@57: module = "issue", bsw@57: view = "_list", bsw@276: params = { issues_selector = issues_selector, filter_interest = "my" }, bsw@57: } bsw@276: bsw@276: local outgoing_delegations_selector = member:get_reference_selector("outgoing_delegations") bsw@276: :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id") bsw@276: :add_where("_member_showtab_issue.closed ISNULL") bsw@57: tabs[#tabs+1] = { bsw@276: name = "outgoing_delegations", bsw@276: label = _"Outgoing delegations" .. " (" .. tostring(outgoing_delegations_selector:count()) .. ")", bsw@276: icon = { static = "icons/16/table_go.png" }, bsw@276: module = "delegation", bsw@276: view = "_list", bsw@276: params = { delegations_selector = outgoing_delegations_selector, outgoing = true }, bsw@57: } bsw@57: bsw/jbe@19: local incoming_delegations_selector = member:get_reference_selector("incoming_delegations") bsw/jbe@19: :left_join("issue", "_member_showtab_issue", "_member_showtab_issue.id = delegation.issue_id") bsw/jbe@19: :add_where("_member_showtab_issue.closed ISNULL") bsw@57: tabs[#tabs+1] = { bsw@57: name = "incoming_delegations", bsw@57: label = _"Incoming delegations" .. " (" .. tostring(incoming_delegations_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/table_go.png" }, bsw@57: module = "delegation", bsw@57: view = "_list", bsw@57: params = { delegations_selector = incoming_delegations_selector, incoming = true }, bsw@57: } bsw@57: bsw@57: local contacts_selector = member:get_reference_selector("saved_members"):add_where("public") bsw@57: tabs[#tabs+1] = { bsw@57: name = "contacts", bsw@57: label = _"Contacts" .. " (" .. tostring(contacts_selector:count()) .. ")", bsw@57: icon = { static = "icons/16/book_edit.png" }, bsw/jbe@19: module = "member", bsw@57: view = "_list", bsw@57: params = { members_selector = contacts_selector }, bsw/jbe@19: } bsw@57: bsw@273: if show_as_homepage then bsw@273: tabs[#tabs+1] = { bsw@273: name = "profile", bsw@273: label = _"Profile", bsw@273: icon = { static = "icons/16/application_form.png" }, bsw@273: module = "member", bsw@273: view = "_profile", bsw@273: params = { member = member }, bsw@273: } bsw@273: end bsw@273: bsw@242: ui.tabs(tabs)