liquid_feedback_frontend
view app/main/issue/_list.lua @ 336:4cdf615ff358
Correctly interpret initiative.winner when showing approved information in initiative view (fix)
| author | bsw | 
|---|---|
| date | Tue Feb 28 18:47:00 2012 +0100 (2012-02-28) | 
| parents | 2e404166c9a1 | 
| children | 7d6a3c411f99 | 
 line source
     1 local issues_selector = param.get("issues_selector", "table")
     2 local for_member = param.get("for_member", "table") or app.session.member
     4 if app.session.member_id then
     5   issues_selector
     6     :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } )
     7     :add_field("(_interest.member_id NOTNULL)", "is_interested")
     8   issues_selector
     9     :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", for_member.id } )
    10     :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
    11     :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
    12     :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
    13 end
    15 ui.add_partial_param_names{
    16   "filter",
    17   "filter_open",
    18   "filter_voting",
    19   "filter_interest",
    20   "issue_list" 
    21 }
    23 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = { member = for_member }}
    25 filters.content = function()
    26   ui.paginate{
    27     per_page = tonumber(param.get("per_page")),
    28     selector = issues_selector,
    29     content = function()
    30       local highlight_string = param.get("highlight_string", "string")
    31       local issues = issues or issues_selector:exec()
    32       -- issues:load(initiatives)
    33       ui.container{ attr = { class = "issues" }, content = function()
    35         for i, issue in ipairs(issues) do
    37           local class = "issue"
    38           if issue.is_interested then
    39             class = class .. " interested"
    40           elseif issue.is_interested_by_delegation_to_member_id then
    41             class = class .. " interested_by_delegation"
    42           end
    43           ui.container{ attr = { class = class }, content = function()
    45             ui.container{ attr = { class = "issue_info" }, content = function()
    47               if issue.is_interested then
    48                 ui.tag{
    49                   tag = "div", attr = { class = "interest_by_delegation"},
    50                   content = function()
    51                     local text = "You are interested in this issue"
    52                     ui.image{ attr = { alt = text, title = text }, static = "icons/16/eye.png" }
    53                   end
    54                 }
    56               elseif issue.is_interested_by_delegation_to_member_id then
    57                 ui.tag{
    58                   tag = "div", attr = { class = "interest_by_delegation"},
    59                   content = function()
    60                     local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
    61                     local text = _"delegated to"
    62                     ui.image{
    63                       attr = { class = "delegation_arrow", alt = text, title = text },
    64                       static = "delegation_arrow_24_horizontal.png"
    65                     }
    66                     execute.view{
    67                       module = "member_image",
    68                       view = "_show",
    69                       params = {
    70                         member = member,
    71                         image_type = "avatar",
    72                         show_dummy = true,
    73                         class = "micro_avatar",
    74                         popup_text = member.name
    75                       }
    76                     }
    77                     if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
    78                       if issue.delegation_chain_length > 2 then
    79                         local text = _"delegated to"
    80                         ui.image{
    81                           attr = { class = "delegation_arrow", alt = text, title = text },
    82                           static = "delegation_arrow_24_horizontal.png"
    83                         }
    84                         ui.tag{ content = "..." }
    85                       end
    86                     local text = _"delegated to"
    87                       ui.image{
    88                         attr = { class = "delegation_arrow", alt = text, title = text },
    89                         static = "delegation_arrow_24_horizontal.png"
    90                       }
    91                       local member = Member:by_id(issue.is_interested_via_member_id)
    92                       execute.view{
    93                         module = "member_image",
    94                         view = "_show",
    95                         params = {
    96                           member = member,
    97                           image_type = "avatar",
    98                           show_dummy = true,
    99                           class = "micro_avatar",
   100                           popup_text = member.name
   101                         }
   102                       }
   103                     end
   104                   end
   105                 }
   106               end
   108               ui.tag{
   109                 tag = "div",
   110                 content = function()
   111                   ui.link{
   112                     attr = { class = "issue_id" },
   113                     text = _("Issue ##{id}", { id = tostring(issue.id) }),
   114                     module = "issue",
   115                     view = "show",
   116                     id = issue.id
   117                   }
   119                   slot.put(" · ")
   120                   ui.tag{ content = issue.area.name }
   121                   slot.put(" · ")
   122                   ui.tag{ content = issue.area.unit.name }
   124               end
   125               }
   126               ui.tag{
   127                 attr = { class = "issue_policy_info" },
   128                 tag = "div",
   129                 content = function()
   131                   ui.tag{ content = issue.policy.name }
   133                   slot.put(" · ")
   134                   ui.tag{ content = issue.state_name }
   136                   if issue.state_time_left then
   137                     slot.put(" · ")
   138                     ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left }) }
   139                   end
   141                 end
   142               }
   145               if issue.old_state then
   146                 ui.field.text{ value = format.time(issue.sort) }
   147                 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
   148               else
   149               end
   150             end }
   152             ui.container{ attr = { class = "initiative_list" }, content = function()
   154               local initiatives_selector = issue:get_reference_selector("initiatives")
   155               local highlight_string = param.get("highlight_string")
   156               if highlight_string then
   157                 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
   158               end
   159               execute.view{
   160                 module = "initiative",
   161                 view = "_list",
   162                 params = {
   163                   issue = issue,
   164                   initiatives_selector = initiatives_selector,
   165                   highlight_string = highlight_string,
   166                   per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   167                   no_sort = true,
   168                   limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   169                   for_member = for_member
   170                 }
   171               }
   172             end }
   173           end }
   174         end
   175       end }
   176     end
   177   }
   178 end
   180 filters.opened = true
   181 filters.selector = issues_selector
   183 if param.get("no_filter", atom.boolean) then
   184   filters.content()
   185 else
   186   ui.filters(filters)
   187 end
   189 --[[
   190 if param.get("legend", atom.boolean) ~= false then
   191   local filter = param.get_all_cgi().filter
   192   if not filter or filter == "any" or filter ~= "finished" then
   193     ui.bargraph_legend{
   194       width = 25,
   195       bars = {
   196         { color = "#0a0", label = _"Supporter" },
   197         { color = "#777", label = _"Potential supporter" },
   198         { color = "#ddd", label = _"No support at all" },
   199       }
   200     }
   201   end
   202   if not filter or filter == "any" or filter == "finished" then
   203     ui.bargraph_legend{
   204       width = 25,
   205       bars = {
   206         { color = "#0a0", label = _"Yes" },
   207         { color = "#aaa", label = _"Abstention" },
   208         { color = "#a00", label = _"No" },
   209       }
   210     }
   211   end
   212 end
   214 --]]
