liquid_feedback_frontend
view app/main/area/_list.lua @ 551:c1dc3b14a4f3
Initiative and initiative member_info preloading
| author | bsw | 
|---|---|
| date | Fri Jun 15 19:00:43 2012 +0200 (2012-06-15) | 
| parents | 37b12af64990 | 
| children | 9df26b41ace0 | 
 line source
     1 local areas_selector = param.get("areas_selector", "table")
     2 local hide_membership = param.get("hide_membership", atom.boolean)
     4 areas_selector
     5   :reset_fields()
     6   :add_field("area.id", nil, { "grouped" })
     7   :add_field("area.name", nil, { "grouped" })
     8   :add_field("member_weight", nil, { "grouped" })
     9   :add_field("direct_member_count", nil, { "grouped" })
    10   :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.accepted ISNULL AND issue.closed ISNULL)", "issues_new_count")
    11   :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")
    12   :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")
    13   :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed ISNULL)", "issues_voting_count")
    14   :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen NOTNULL AND issue.closed NOTNULL)", "issues_finished_count")
    15   :add_field("(SELECT COUNT(*) FROM issue WHERE issue.area_id = area.id AND issue.fully_frozen ISNULL AND issue.closed NOTNULL)", "issues_cancelled_count")
    17 if app.session.member_id then
    18   areas_selector
    19     :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")
    20     :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id })
    21     :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" })
    22     :left_join("delegation", nil, {
    23       "delegation.truster_id = ? AND delegation.area_id = area.id AND delegation.scope = 'area'", app.session.member_id
    24     })
    25     :left_join("member", nil, "member.id = delegation.trustee_id")
    26     :add_field("member.id", "trustee_member_id", { "grouped" })
    27     :add_field("member.name", "trustee_member_name", { "grouped" })
    28 else
    29   areas_selector:add_field("0", "issues_to_vote_count")
    30 end
    33 ui.container{ attr = { class = "box area_list" }, content = function()
    35   ui.container{ attr = { class = "area head" }, content = function()
    37     ui.container{ attr = { class = "phases" }, content = function()
    39       ui.container{ attr = { class = "admission" }, content = function()
    40         ui.image{ static = "icons/16/new.png", attr = { alt = _"New" } }
    41       end }
    43       ui.container{ attr = { class = "discussion" }, content = function()
    44         ui.image{ static = "icons/16/comments.png", attr = { alt = _"Discussion" } }
    45       end }
    47       ui.container{ attr = { class = "verification" }, content = function()
    48         ui.image{ static = "icons/16/lock.png", attr = { alt = _"Verification" } }
    49       end }
    51       ui.container{ attr = { class = "voting" }, content = function()
    52         ui.image{ static = "icons/16/email_open.png", attr = { alt = _"Voting" } }
    53       end }
    55       ui.container{ attr = { class = "finished" }, content = function()
    56         ui.image{ static = "icons/16/tick.png", attr = { alt = _"Finished" } }
    57       end }
    59       ui.container{ attr = { class = "cancelled" }, content = function()
    60         ui.image{ static = "icons/16/cross.png", attr = { alt = _"Cancelled" } }
    61       end }
    63     end }
    65   end }
    67   for i, area in ipairs(areas_selector:exec()) do
    69     ui.container{ attr = { class = "area" }, content = function()
    71       ui.container{ attr = { class = "bar" }, content = function()
    72         if area.member_weight and area.direct_member_count then
    73           local max_value = MemberCount:get()
    74           ui.bargraph{
    75             max_value = max_value,
    76             width = 100,
    77             bars = {
    78               { color = "#444", value = area.direct_member_count },
    79               { color = "#777", value = area.member_weight - area.direct_member_count },
    80               { color = "#ddd", value = max_value - area.member_weight },
    81             }
    82           }
    83         end
    84       end }
    86       ui.container{ attr = { class = "name" }, content = function()
    87         ui.link{
    88           text = area.name,
    89           module = "area",
    90           view = "show",
    91           id = area.id
    92         }
    93         slot.put(" ")
    94         ui.tag{ content = "" }
    95       end }
    97       if not hide_membership then
    98         ui.container{ attr = { class = "membership" }, content = function()
    99           if area.is_member then
   100             local text = _"Member of area"
   101             ui.image{
   102               attr = { title = text, alt = text },
   103               static = "icons/16/user_gray.png",
   104             }
   105           else
   106             slot.put('<img src="null.png" width="16" height="1" alt="" />')
   107           end
   108         end }
   109       end
   111       ui.container{ attr = { class = "delegatee" }, content = function()
   112         if area.trustee_member_id then
   113           local trustee_member = Member:by_id(area.trustee_member_id)
   114           local text = _("Area delegated to '#{name}'", { name = area.trustee_member_name })
   115           ui.image{
   116             attr = { class = "delegation_arrow", alt = text, title = text },
   117             static = "delegation_arrow_24_horizontal.png"
   118           }
   119           execute.view{
   120             module = "member_image",
   121             view = "_show",
   122             params = {
   123               member = trustee_member,
   124               image_type = "avatar",
   125               show_dummy = true,
   126               class = "micro_avatar",
   127               popup_text = text
   128             }
   129           }
   130         else
   131           slot.put('<img src="null.png" width="41" height="1" alt="" />')
   132         end
   133       end }
   135       ui.container{ attr = { class = "phases" }, content = function()
   137         ui.container{ attr = { class = "admission" }, content = function()
   138           ui.link{
   139             text = tostring(area.issues_new_count),
   140             module = "area",
   141             view = "show",
   142             id = area.id,
   143             params = { filter = "new", tab = "open" }
   144           }
   145         end }
   147         ui.container{ attr = { class = "discussion" }, content = function()
   148           ui.link{
   149             text = tostring(area.issues_discussion_count),
   150             module = "area",
   151             view = "show",
   152             id = area.id,
   153             params = { filter = "accepted", tab = "open" }
   154           }
   155         end }
   157         ui.container{ attr = { class = "verification" }, content = function()
   158           ui.link{
   159             text = tostring(area.issues_frozen_count),
   160             module = "area",
   161             view = "show",
   162             id = area.id,
   163             params = { filter = "half_frozen", tab = "open" }
   164           }
   165         end }
   167         ui.container{ attr = { class = "voting" }, content = function()
   168           ui.link{
   169             text = tostring(area.issues_voting_count),
   170             module = "area",
   171             view = "show",
   172             id = area.id,
   173             params = { filter = "frozen", tab = "open" }
   174           }
   175         end }
   177         ui.container{ attr = { class = "finished" }, content = function()
   178           ui.link{
   179             text = tostring(area.issues_finished_count),
   180             module = "area",
   181             view = "show",
   182             id = area.id,
   183             params = { filter = "finished", tab = "closed" }
   184           }
   185         end }
   187         ui.container{ attr = { class = "cancelled" }, content = function()
   188           ui.link{
   189             text = tostring(area.issues_cancelled_count),
   190             module = "area",
   191             view = "show",
   192             id = area.id,
   193             params = { filter = "cancelled", issue_list = "newest", tab = "closed" }
   194           }
   195         end }
   197       end }
   199       slot.put("<br style='clear: right;' />")
   200     end }
   202   end
   204 end }
