bsw/jbe@0: local areas_selector = param.get("areas_selector", "table") bsw/jbe@0: bsw@9: areas_selector bsw@9: :reset_fields() bsw@9: :add_field("area.id", nil, { "grouped" }) bsw@9: :add_field("area.name", nil, { "grouped" }) bsw@9: :add_field("member_weight", nil, { "grouped" }) bsw@9: :add_field("direct_member_count", nil, { "grouped" }) bsw@9: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count") bsw@9: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL)", "issues_discussion_count") bsw@9: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL AND issue.closed ISNULL)", "issues_frozen_count") bsw@9: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count") bsw@10: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count") bsw@10: :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count") bsw@51: bsw@51: if app.session.member_id then bsw@51: areas_selector bsw@51: :add_field({ "(SELECT COUNT(*) FROM issue LEFT JOIN direct_voter ON direct_voter.issue_id = issue.id AND direct_voter.member_id = ? WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL AND direct_voter.member_id ISNULL)", app.session.member.id }, "issues_to_vote_count") bsw@51: :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id }) bsw@51: :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" }) mail@240: :add_field({ "(SELECT member.name FROM delegation LEFT JOIN member ON delegation.trustee_id = member.id WHERE delegation.scope = 'area' AND delegation.area_id = area.id AND truster_id = ?)", app.session.member.id }, "area_delegation_name") bsw@51: else bsw@51: areas_selector:add_field("0", "issues_to_vote_count") bsw@51: end bsw@9: bsw/jbe@19: local label_attr = { style = "text-align: right; width: 4em;" } bsw/jbe@19: local field_attr = { style = "text-align: right; width: 4em;" } bsw/jbe@19: bsw/jbe@19: ui.filters{ bsw/jbe@19: label = _"Change order", bsw/jbe@0: selector = areas_selector, bsw/jbe@19: { bsw/jbe@19: label = _"Order by", bsw/jbe@0: { bsw/jbe@0: name = "member_weight", bsw/jbe@0: label = _"Population", bsw/jbe@19: selector_modifier = function(selector) selector:add_order_by("area.member_weight DESC") end bsw/jbe@0: }, bsw/jbe@0: { bsw/jbe@0: name = "direct_member_count", bsw/jbe@0: label = _"Direct member count", bsw/jbe@19: selector_modifier = function(selector) selector:add_order_by("area.direct_member_count DESC") end bsw/jbe@0: }, bsw/jbe@0: { bsw/jbe@0: name = "az", bsw/jbe@0: label = _"A-Z", bsw/jbe@19: selector_modifier = function(selector) selector:add_order_by("area.name") end bsw/jbe@0: }, bsw/jbe@0: { bsw/jbe@0: name = "za", bsw/jbe@0: label = _"Z-A", bsw/jbe@19: selector_modifier = function(selector) selector:add_order_by("area.name DESC") end bsw/jbe@0: } bsw/jbe@0: }, bsw/jbe@0: content = function() bsw/jbe@0: ui.list{ bsw/jbe@19: attr = { class = "area_list" }, bsw/jbe@0: records = areas_selector:exec(), bsw/jbe@0: columns = { bsw/jbe@0: { bsw/jbe@0: content = function(record) bsw/jbe@19: if record.is_member then bsw/jbe@19: local text = _"Member of area" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = text, alt = text, style = "vertical-align: middle;" }, bsw/jbe@19: static = "icons/16/user_gray.png", bsw/jbe@19: } bsw/jbe@19: end bsw/jbe@19: end bsw/jbe@19: }, bsw/jbe@19: { bsw/jbe@19: content = function(record) mail@240: if record.area_delegation_name then mail@240: local text = _("Area delegated to '#{name}'", { name = record.area_delegation_name }) mail@240: ui.image{ mail@240: attr = { title = text, alt = text, style = "vertical-align: middle;" }, mail@240: static = "icons/16/link.png", mail@240: } mail@240: end mail@240: end mail@240: }, mail@240: { mail@240: content = function(record) bsw/jbe@0: if record.member_weight and record.direct_member_count then bsw/jbe@0: local max_value = MemberCount:get() bsw/jbe@0: ui.bargraph{ bsw/jbe@0: max_value = max_value, bsw/jbe@4: width = 100, bsw/jbe@0: bars = { bsw/jbe@0: { color = "#444", value = record.direct_member_count }, bsw/jbe@0: { color = "#777", value = record.member_weight - record.direct_member_count }, bsw/jbe@0: { color = "#ddd", value = max_value - record.member_weight }, bsw/jbe@0: } bsw/jbe@0: } bsw/jbe@0: end bsw/jbe@0: end bsw/jbe@0: }, bsw/jbe@0: { bsw/jbe@0: content = function(record) bsw/jbe@0: ui.link{ bsw/jbe@0: text = record.name, bsw/jbe@0: module = "area", bsw/jbe@0: view = "show", bsw/jbe@0: id = record.id bsw/jbe@0: } bsw/jbe@0: end bsw@9: }, bsw@9: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"New" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/new.png" bsw/jbe@19: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@9: content = function(record) bsw@9: ui.link{ bsw@9: text = tostring(record.issues_new_count), bsw@9: module = "area", bsw@9: view = "show", bsw@9: id = record.id, bsw/jbe@19: params = { filter = "new", tab = "issues" } bsw@9: } bsw@9: end bsw@9: }, bsw@9: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"Discussion" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/comments.png" bsw/jbe@19: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@9: content = function(record) bsw@9: ui.link{ bsw@9: text = tostring(record.issues_discussion_count), bsw@9: module = "area", bsw@9: view = "show", bsw@9: id = record.id, bsw/jbe@19: params = { filter = "accepted", tab = "issues" } bsw@9: } bsw@9: end bsw@9: }, bsw@9: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"Frozen" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/lock.png" bsw/jbe@19: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@9: content = function(record) bsw@9: ui.link{ bsw@9: text = tostring(record.issues_frozen_count), bsw@9: module = "area", bsw@9: view = "show", bsw@9: id = record.id, bsw/jbe@19: params = { filter = "half_frozen", tab = "issues" } bsw@9: } bsw@9: end bsw@9: }, bsw@9: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"Voting" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/email_open.png" bsw/jbe@19: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@9: content = function(record) bsw@9: ui.link{ bsw@9: text = tostring(record.issues_voting_count), bsw@9: module = "area", bsw@9: view = "show", bsw@9: id = record.id, bsw/jbe@19: params = { filter = "frozen", tab = "issues" } bsw@9: } bsw@9: end bsw@9: }, bsw@9: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"Finished" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/tick.png" bsw@9: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@10: content = function(record) bsw@10: ui.link{ bsw@10: text = tostring(record.issues_finished_count), bsw@10: module = "area", bsw@10: view = "show", bsw@10: id = record.id, bsw/jbe@19: params = { filter = "finished", issue_list = "newest", tab = "issues" } bsw@10: } bsw@10: end bsw@10: }, bsw@10: { bsw/jbe@19: label = function() bsw/jbe@19: local title = _"Cancelled" bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/cross.png" bsw/jbe@19: } bsw/jbe@19: end, bsw/jbe@19: field_attr = field_attr, bsw/jbe@19: label_attr = label_attr, bsw@10: content = function(record) bsw@10: ui.link{ bsw@10: text = tostring(record.issues_cancelled_count), bsw@10: module = "area", bsw@10: view = "show", bsw@10: id = record.id, bsw/jbe@19: params = { filter = "cancelled", issue_list = "newest", tab = "issues" } bsw@10: } bsw@10: end bsw@10: }, bsw/jbe@19: { bsw/jbe@19: content = function(record) bsw/jbe@19: if record.issues_to_vote_count > 0 then bsw/jbe@19: ui.link{ bsw/jbe@19: attr = { class = "not_voted" }, bsw/jbe@19: text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count), bsw/jbe@19: module = "area", bsw/jbe@19: view = "show", bsw/jbe@19: id = record.id, bsw/jbe@19: params = { bsw/jbe@19: filter = "frozen", bsw/jbe@19: filter_voting = "not_voted", bsw/jbe@19: tab = "issues" bsw/jbe@19: } bsw/jbe@19: } bsw/jbe@19: end bsw/jbe@19: end bsw/jbe@19: }, bsw/jbe@0: } bsw/jbe@0: } bsw/jbe@0: end bsw/jbe@4: } bsw/jbe@4: bsw/jbe@4: ui.bargraph_legend{ bsw/jbe@4: width = 25, bsw/jbe@4: bars = { bsw/jbe@4: { color = "#444", label = _"Direct membership" }, bsw/jbe@4: { color = "#777", label = _"Membership by delegation" }, bsw/jbe@4: { color = "#ddd", label = _"No membership at all" }, bsw/jbe@4: } bsw/jbe@4: } bsw/jbe@4: bsw/jbe@19: slot.put("
  ") bsw/jbe@19: bsw/jbe@19: bsw@51: if app.session.member_id then bsw@51: ui.image{ bsw@51: attr = { title = title, alt = title }, bsw@51: static = "icons/16/user_gray.png" bsw@51: } bsw@51: slot.put(" ") bsw@51: slot.put(_"Member of area") bsw@51: slot.put("   ") mail@240: mail@240: ui.image{ mail@240: attr = { title = title, alt = title }, mail@240: static = "icons/16/link.png" mail@240: } mail@240: slot.put(" ") mail@240: slot.put(_"Area delegated") mail@240: slot.put("   ") bsw@51: end bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/new.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"New") bsw/jbe@19: slot.put("   ") bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/comments.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"Discussion") bsw/jbe@19: slot.put("   ") bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/lock.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"Frozen") bsw/jbe@19: slot.put("   ") bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/email_open.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"Voting") bsw/jbe@19: slot.put("   ") bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/tick.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"Finished") bsw/jbe@19: slot.put("   ") bsw/jbe@19: bsw/jbe@19: ui.image{ bsw/jbe@19: attr = { title = title, alt = title }, bsw/jbe@19: static = "icons/16/cross.png" bsw/jbe@19: } bsw/jbe@19: slot.put(" ") bsw/jbe@19: slot.put(_"Cancelled") bsw/jbe@19: