bsw/jbe@0: local issues_selector = param.get("issues_selector", "table") bsw/jbe@0: bsw/jbe@5: local ui_filter = ui.filter bsw/jbe@5: if param.get("filter", atom.boolean) == false then bsw/jbe@5: ui_filter = function(args) args.content() end bsw/jbe@5: end bsw/jbe@0: bsw/jbe@5: local filter_voting = false bsw/jbe@5: ui_filter{ bsw/jbe@0: selector = issues_selector, bsw@2: filters = { bsw@2: { bsw@2: type = "boolean", bsw/jbe@6: name = "open", bsw/jbe@6: label = _"Open", bsw/jbe@6: selector_modifier = function(selector, value) bsw/jbe@6: if value then bsw/jbe@6: selector:add_where("issue.closed ISNULL") bsw/jbe@6: end bsw/jbe@6: end bsw@2: }, bsw/jbe@0: { bsw@2: type = "boolean", bsw@2: name = "new", bsw@2: label = _"New", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw@2: selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL") bsw@2: end bsw@2: end bsw@2: }, bsw@2: { bsw@2: type = "boolean", bsw@2: name = "accepted", bsw@2: label = _"In discussion", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw@2: selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL") bsw@2: end bsw@2: end bsw/jbe@0: }, bsw/jbe@0: { bsw@2: type = "boolean", bsw@2: name = "half_frozen", bsw@2: label = _"Frozen", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw/jbe@5: selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL") bsw@2: end bsw@2: end bsw@2: }, bsw@2: { bsw@2: type = "boolean", bsw@2: name = "frozen", bsw@2: label = _"Voting", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw@2: selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL") bsw/jbe@5: filter_voting = true bsw@2: end bsw@2: end bsw/jbe@0: }, bsw/jbe@0: { bsw@2: type = "boolean", bsw@2: name = "finished", bsw@2: label = _"Finished", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw/jbe@5: selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL") bsw@2: end bsw@2: end bsw@2: }, bsw@2: { bsw@2: type = "boolean", bsw@2: name = "cancelled", bsw@2: label = _"Cancelled", bsw@2: selector_modifier = function(selector, value) bsw@2: if value then bsw/jbe@5: selector:add_where("issue.closed NOTNULL AND issue.accepted ISNULL") bsw@2: end bsw@2: end bsw@2: }, bsw/jbe@0: }, bsw/jbe@0: content = function() bsw/jbe@5: local ui_filter = ui.filter bsw/jbe@5: if not filter_voting then bsw/jbe@5: ui_filter = function(args) args.content() end bsw/jbe@5: end bsw/jbe@5: ui_filter{ bsw/jbe@0: selector = issues_selector, bsw/jbe@5: name = "filter_voting", bsw/jbe@5: filters = { bsw@2: { bsw/jbe@5: type = "boolean", bsw/jbe@5: name = "any", bsw/jbe@5: label = _"Any", bsw/jbe@5: selector_modifier = function() end bsw@2: }, bsw@2: { bsw/jbe@5: type = "boolean", bsw/jbe@5: name = "not_voted", bsw/jbe@5: label = _"Not voted", bsw/jbe@5: selector_modifier = function(selector, value) bsw/jbe@5: if value then bsw/jbe@5: selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) bsw/jbe@5: selector:add_where("direct_voter.member_id ISNULL") bsw/jbe@5: end bsw/jbe@5: end bsw@2: }, bsw@2: { bsw/jbe@5: type = "boolean", bsw/jbe@5: name = "voted", bsw/jbe@5: label = _"Voted", bsw/jbe@5: selector_modifier = function(selector, value) bsw/jbe@5: if value then bsw/jbe@5: selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id }) bsw/jbe@5: end bsw/jbe@5: end bsw/jbe@5: }, bsw@2: }, bsw/jbe@0: content = function() bsw/jbe@5: local ui_filter = ui.filter bsw/jbe@5: if param.get("filter", atom.boolean) == false then bsw/jbe@5: ui_filter = function(args) args.content() end bsw/jbe@5: end bsw/jbe@5: ui_filter{ bsw@2: selector = issues_selector, bsw/jbe@5: name = "filter_interest", bsw/jbe@5: filters = { bsw/jbe@5: { bsw/jbe@5: type = "boolean", bsw/jbe@5: name = "any", bsw/jbe@5: label = _"Any", bsw/jbe@5: selector_modifier = function() end bsw/jbe@5: }, bsw/jbe@5: { bsw/jbe@5: type = "boolean", bsw/jbe@5: name = "my", bsw/jbe@5: label = _"Interested", bsw/jbe@5: selector_modifier = function(selector, value) bsw/jbe@5: if value then bsw/jbe@5: selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id }) bsw/jbe@5: end bsw/jbe@5: end bsw/jbe@5: }, bsw/jbe@5: }, bsw@2: content = function() bsw/jbe@5: bsw/jbe@5: ui.order{ bsw/jbe@5: name = "issue_list", bsw/jbe@5: selector = issues_selector, bsw/jbe@5: options = { bsw@2: { bsw/jbe@5: name = "max_potential_support", bsw/jbe@5: label = _"Max potential support", bsw/jbe@5: selector_modifier = function(selector) bsw/jbe@6: selector:add_order_by("(SELECT max(supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC") bsw@2: end bsw@2: }, bsw@2: { bsw/jbe@5: name = "max_support", bsw/jbe@5: label = _"Max support", bsw/jbe@5: selector_modifier = function(selector) bsw/jbe@6: selector:add_order_by("(SELECT max(satisfied_supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC") bsw@2: end bsw@2: }, bsw@2: { bsw/jbe@5: name = "population", bsw/jbe@5: label = _"Population", bsw/jbe@5: order_by = "issue.population DESC" bsw/jbe@5: }, bsw/jbe@5: { bsw/jbe@5: name = "newest", bsw/jbe@5: label = _"Newest", bsw/jbe@5: order_by = "issue.created DESC" bsw/jbe@5: }, bsw/jbe@5: { bsw/jbe@5: name = "oldest", bsw/jbe@5: label = _"Oldest", bsw/jbe@5: order_by = "issue.created" bsw/jbe@5: } bsw/jbe@5: }, bsw/jbe@5: content = function() bsw/jbe@5: ui.paginate{ bsw/jbe@5: selector = issues_selector, bsw/jbe@5: content = function() bsw/jbe@5: local highlight_string = param.get("highlight_string", "string") bsw/jbe@5: local issues = issues or issues_selector:exec() bsw/jbe@5: -- issues:load(initiatives) bsw/jbe@5: ui.list{ bsw/jbe@5: attr = { class = "issues" }, bsw/jbe@5: records = issues, bsw/jbe@5: columns = { bsw/jbe@5: { bsw/jbe@5: label = _"Issue", bsw/jbe@5: content = function(record) bsw/jbe@5: if not param.get("for_area_list", atom.boolean) then bsw/jbe@5: ui.field.text{ bsw/jbe@5: value = record.area.name bsw/jbe@5: } bsw/jbe@5: slot.put("
") bsw/jbe@5: end bsw/jbe@5: ui.link{ bsw/jbe@5: text = _"Issue ##{id}":gsub("#{id}", tostring(record.id)), bsw/jbe@5: module = "issue", bsw/jbe@5: view = "show", bsw/jbe@5: id = record.id bsw/jbe@5: } bsw/jbe@5: if record.state == "new" then bsw/jbe@5: ui.image{ bsw/jbe@5: static = "icons/16/new.png" bsw/jbe@5: } bsw/jbe@5: end bsw/jbe@5: slot.put("
") bsw/jbe@5: slot.put("
") bsw/jbe@5: end bsw/jbe@5: }, bsw/jbe@5: { bsw/jbe@5: label = _"State", bsw/jbe@5: content = function(record) bsw/jbe@6: if record.state == "voting" then bsw/jbe@6: ui.link{ bsw/jbe@6: content = _"Voting", bsw/jbe@6: module = "vote", bsw/jbe@6: view = "list", bsw/jbe@6: params = { issue_id = record.id } bsw/jbe@6: } bsw/jbe@6: else bsw/jbe@6: ui.field.issue_state{ value = record.state } bsw/jbe@6: end bsw/jbe@5: end bsw/jbe@5: }, bsw/jbe@5: { bsw/jbe@5: label = _"Initiatives", bsw/jbe@5: content = function(record) bsw/jbe@5: local initiatives_selector = record:get_reference_selector("initiatives") bsw/jbe@5: local highlight_string = param.get("highlight_string") bsw/jbe@5: if highlight_string then bsw/jbe@5: initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted") bsw/jbe@5: end bsw/jbe@5: execute.view{ bsw/jbe@5: module = "initiative", bsw/jbe@5: view = "_list", bsw/jbe@5: params = { bsw/jbe@5: issue = record, bsw/jbe@5: initiatives_selector = initiatives_selector, bsw/jbe@5: highlight_string = highlight_string, bsw/jbe@5: limit = 3 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: end bsw/jbe@5: }, bsw@2: } bsw@2: } bsw@2: end bsw/jbe@5: } bsw/jbe@5: end bsw@2: } bsw@2: end bsw/jbe@0: } bsw/jbe@0: end bsw/jbe@0: } bsw/jbe@5: if param.get("legend", atom.boolean) ~= false then bsw/jbe@5: local filter = param.get_all_cgi().filter bsw/jbe@5: if not filter or filter == "any" or filter ~= "finished" then bsw/jbe@5: ui.bargraph_legend{ bsw/jbe@5: width = 25, bsw/jbe@5: bars = { bsw/jbe@5: { color = "#0a0", label = _"Supporter" }, bsw/jbe@5: { color = "#777", label = _"Potential supporter" }, bsw/jbe@5: { color = "#ddd", label = _"No support at all" }, bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: end bsw/jbe@5: if not filter or filter == "any" or filter == "finished" then bsw/jbe@5: ui.bargraph_legend{ bsw/jbe@5: width = 25, bsw/jbe@5: bars = { bsw/jbe@5: { color = "#0a0", label = _"Yes" }, bsw/jbe@5: { color = "#aaa", label = _"Abstention" }, bsw/jbe@5: { color = "#a00", label = _"No" }, bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: end bsw/jbe@5: end bsw/jbe@0: end bsw@2: }