liquid_feedback_frontend
view app/main/issue/_list.lua @ 27:0929c483458e
Corrected german translation of "not approved"
| author | bsw | 
|---|---|
| date | Sun Feb 21 15:43:27 2010 +0100 (2010-02-21) | 
| parents | 00d1004545f1 | 
| children | 0849be391140 | 
 line source
     1 local issues_selector = param.get("issues_selector", "table")
     3 issues_selector
     4   :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", app.session.member.id} )
     5   :add_field("(_interest.member_id NOTNULL)", "is_interested")
     7 ui.add_partial_param_names{
     8   "filter",
     9   "filter_open",
    10   "filter_voting",
    11   "filter_interest",
    12   "issue_list" 
    13 }
    15 local filters = {}
    17 filters[#filters+1] = {
    18   label = _"Filter",
    19   {
    20     name = "open",
    21     label = _"Open",
    22     selector_modifier = function(selector)
    23         selector:add_where("issue.closed ISNULL")
    24     end
    25   },
    26   {
    27     name = "new",
    28     label = _"New",
    29     selector_modifier = function(selector)
    30       selector:add_where("issue.accepted ISNULL AND issue.closed ISNULL")
    31     end
    32   },
    33   {
    34     name = "accepted",
    35     label = _"In discussion",
    36     selector_modifier = function(selector)
    37       selector:add_where("issue.accepted NOTNULL AND issue.half_frozen ISNULL AND issue.closed ISNULL")
    38     end
    39   },
    40   {
    41     name = "half_frozen",
    42     label = _"Frozen",
    43     selector_modifier = function(selector)
    44       selector:add_where("issue.half_frozen NOTNULL AND issue.fully_frozen ISNULL")
    45     end
    46   },
    47   {
    48     name = "frozen",
    49     label = _"Voting",
    50     selector_modifier = function(selector)
    51       selector:add_where("issue.fully_frozen NOTNULL AND issue.closed ISNULL")
    52       filter_voting = true
    53     end
    54   },
    55   {
    56     name = "finished",
    57     label = _"Finished",
    58     selector_modifier = function(selector)
    59       selector:add_where("issue.closed NOTNULL AND issue.fully_frozen NOTNULL")
    60     end
    61   },
    62   {
    63     name = "cancelled",
    64     label = _"Cancelled",
    65     selector_modifier = function(selector)
    66       selector:add_where("issue.closed NOTNULL AND issue.accepted ISNULL")
    67     end
    68   },
    69   {
    70     name = "any",
    71     label = _"Any",
    72     selector_modifier = function(selector) end
    73   },
    74 }
    77 if param.get("filter") == "frozen" then
    78   filters[#filters+1] = {
    79     label = _"Filter",
    80     name = "filter_voting",
    81     {
    82       name = "any",
    83       label = _"Any",
    84       selector_modifier = function()  end
    85     },
    86     {
    87       name = "not_voted",
    88       label = _"Not voted",
    89       selector_modifier = function(selector)
    90         selector:left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
    91         selector:add_where("direct_voter.member_id ISNULL")
    92       end
    93     },
    94     {
    95       name = "voted",
    96       label = _"Voted",
    97       selector_modifier = function(selector)
    98         selector:join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
    99       end
   100     },
   101   }
   102 end
   105 filters[#filters+1] = {
   106   label = _"Filter",
   107   name = "filter_interest",
   108   {
   109     name = "any",
   110     label = _"Any",
   111     selector_modifier = function()  end
   112   },
   113   {
   114     name = "my",
   115     label = _"Interested",
   116     selector_modifier = function(selector)
   117       selector:join("interest", "filter_interest", { "filter_interest.issue_id = issue.id AND filter_interest.member_id = ? ", app.session.member.id })
   118     end
   119   },
   120   {
   121     name = "supported",
   122     label = _"Supported",
   123     selector_modifier = function(selector)
   124       selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? LEFT JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id AND opinion.member_id ISNULL LIMIT 1)", app.session.member.id, app.session.member.id })
   125     end
   126   },
   127   {
   128     name = "potentially_supported",
   129     label = _"Potential supported",
   130     selector_modifier = function(selector)
   131       selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = ? JOIN opinion ON opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)) WHERE initiative.issue_id = issue.id LIMIT 1)", app.session.member.id, app.session.member.id })
   132     end
   133   },
   134   {
   135     name = "initiated",
   136     label = _"Initiated",
   137     selector_modifier = function(selector)
   138       selector:add_where({ "EXISTS (SELECT 1 FROM initiative JOIN initiator ON initiator.initiative_id = initiative.id AND initiator.member_id = ? WHERE initiative.issue_id = issue.id)", app.session.member.id })
   139     end
   140   },
   141 }
   143 if not param.get("no_sort", atom.boolean) then
   144   filters[#filters+1] = {
   145     label = _"Order by",
   146     name = "issue_list",
   147     {
   148       name = "max_potential_support",
   149       label = _"Max potential support",
   150       selector_modifier = function(selector)
   151         selector:add_order_by("(SELECT max(supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
   152       end
   153     },
   154     {
   155       name = "max_support",
   156       label = _"Max support",
   157       selector_modifier = function(selector)
   158         selector:add_order_by("(SELECT max(satisfied_supporter_count) FROM initiative WHERE initiative.issue_id = issue.id) DESC")
   159       end
   160     },
   161     {
   162       name = "population",
   163       label = _"Population",
   164       selector_modifier = function(selector)
   165         selector:add_order_by("issue.population DESC")
   166       end
   167     },
   168     {
   169       name = "newest",
   170       label = _"Newest",
   171       selector_modifier = function(selector)
   172         selector:add_order_by("issue.created DESC")
   173       end
   174     },
   175     {
   176       name = "oldest",
   177       label = _"Oldest",
   178       selector_modifier = function(selector)
   179         selector:add_order_by("issue.created")
   180       end
   181     }
   182   }
   183 end
   185 filters.content = function()
   186   local ui_paginate = ui.paginate
   187   if param.get("per_page") == "all" then
   188     ui_paginate = function(args) args.content() end
   189   end
   190   ui_paginate{
   191     per_page = tonumber(param.get("per_page")),
   192     selector = issues_selector,
   193     content = function()
   194       local highlight_string = param.get("highlight_string", "string")
   195       local issues = issues or issues_selector:exec()
   196       -- issues:load(initiatives)
   197       ui.list{
   198         attr = { class = "issues" },
   199         records = issues,
   200         columns = {
   201           {
   202             label = _"Issue",
   203             content = function(record)
   204               if not param.get("for_area_list", atom.boolean) then
   205                 ui.field.text{
   206                   value = record.area.name
   207                 }
   208                 slot.put("<br />")
   209               end
   210               if record.is_interested then
   211                 local label = _"You are interested in this issue",
   212                 ui.image{
   213                   attr = { alt = label, title = label },
   214                   static = "icons/16/eye.png"
   215                 }
   216                 slot.put(" ")
   217               end
   218               ui.link{
   219                 text = _("Issue ##{id}", { id = tostring(record.id) }),
   220                 module = "issue",
   221                 view = "show",
   222                 id = record.id
   223               }
   224               if record.state == "new" then
   225                 ui.image{
   226                   static = "icons/16/new.png"
   227                 }
   228               end
   229               slot.put("<br />")
   230               slot.put("<br />")
   231               if record.old_state then
   232                 ui.field.text{ value = format.time(record.sort) }
   233                 ui.field.text{ value = Issue:get_state_name_for_state(record.old_state) .. " > " .. Issue:get_state_name_for_state(record.new_state) }
   234               else
   235               end
   236             end
   237           },
   238           {
   239             label = _"State",
   240             content = function(record)
   241               if record.state == "voting" then
   242                 ui.link{
   243                   content = _"Voting",
   244                   module = "vote",
   245                   view = "list",
   246                   params = { issue_id = record.id }
   247                 }
   248               else
   249                 ui.field.issue_state{ value = record.state }
   250               end
   251             end
   252           },
   253           {
   254             label = _"Initiatives",
   255             content = function(record)
   256               local initiatives_selector = record:get_reference_selector("initiatives")
   257               local highlight_string = param.get("highlight_string")
   258               if highlight_string then
   259                 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
   260               end
   261               execute.view{
   262                 module = "initiative",
   263                 view = "_list",
   264                 params = {
   265                   issue = record,
   266                   initiatives_selector = initiatives_selector,
   267                   highlight_string = highlight_string,
   268                   per_page = tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3),
   269                   no_sort = true,
   270                   limit = tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3)
   271                 }
   272               }
   273             end
   274           },
   275         }
   276       }
   277     end
   278   }
   279 end
   281 filters.selector = issues_selector
   282 filters.label = _"Change filters and order"
   284 if param.get("no_filter", atom.boolean) then
   285   filters.content()
   286 else
   287   ui.filters(filters)
   288 end
   290 if param.get("legend", atom.boolean) ~= false then
   291   local filter = param.get_all_cgi().filter
   292   if not filter or filter == "any" or filter ~= "finished" then
   293     ui.bargraph_legend{
   294       width = 25,
   295       bars = {
   296         { color = "#0a0", label = _"Supporter" },
   297         { color = "#777", label = _"Potential supporter" },
   298         { color = "#ddd", label = _"No support at all" },
   299       }
   300     }
   301   end
   302   if not filter or filter == "any" or filter == "finished" then
   303     ui.bargraph_legend{
   304       width = 25,
   305       bars = {
   306         { color = "#0a0", label = _"Yes" },
   307         { color = "#aaa", label = _"Abstention" },
   308         { color = "#a00", label = _"No" },
   309       }
   310     }
   311   end
   312 end
