| rev | 
   line source | 
| 
bsw/jbe@0
 | 
     1 local areas_selector = param.get("areas_selector", "table")
 | 
| 
bsw/jbe@0
 | 
     2 
 | 
| 
bsw@9
 | 
     3 areas_selector
 | 
| 
bsw@9
 | 
     4   :reset_fields()
 | 
| 
bsw@9
 | 
     5   :add_field("area.id", nil, { "grouped" })
 | 
| 
bsw@9
 | 
     6   :add_field("area.name", nil, { "grouped" })
 | 
| 
bsw@9
 | 
     7   :add_field("member_weight", nil, { "grouped" })
 | 
| 
bsw@9
 | 
     8   :add_field("direct_member_count", nil, { "grouped" })
 | 
| 
bsw@9
 | 
     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
 | 
    10   :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
 | 
    11   :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
 | 
    12   :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
 | 
    13   :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
 | 
    14   :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
 | 
    15 
 | 
| 
bsw@51
 | 
    16 if app.session.member_id then
 | 
| 
bsw@51
 | 
    17   areas_selector
 | 
| 
bsw@51
 | 
    18     :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
 | 
    19     :left_join("membership", "_membership", { "_membership.area_id = area.id AND _membership.member_id = ?", app.session.member.id })
 | 
| 
bsw@51
 | 
    20     :add_field("_membership.member_id NOTNULL", "is_member", { "grouped" })
 | 
| 
bsw@51
 | 
    21 else
 | 
| 
bsw@51
 | 
    22   areas_selector:add_field("0", "issues_to_vote_count")
 | 
| 
bsw@51
 | 
    23 end
 | 
| 
bsw@9
 | 
    24 
 | 
| 
bsw/jbe@19
 | 
    25 local label_attr = { style = "text-align: right; width: 4em;" }
 | 
| 
bsw/jbe@19
 | 
    26 local field_attr = { style = "text-align: right; width: 4em;" }
 | 
| 
bsw/jbe@19
 | 
    27 
 | 
| 
bsw/jbe@19
 | 
    28 ui.filters{
 | 
| 
bsw/jbe@19
 | 
    29   label = _"Change order",
 | 
| 
bsw/jbe@0
 | 
    30   selector = areas_selector,
 | 
| 
bsw/jbe@19
 | 
    31   {
 | 
| 
bsw/jbe@19
 | 
    32     label = _"Order by",
 | 
| 
bsw/jbe@0
 | 
    33     {
 | 
| 
bsw/jbe@0
 | 
    34       name = "member_weight",
 | 
| 
bsw/jbe@0
 | 
    35       label = _"Population",
 | 
| 
bsw/jbe@19
 | 
    36       selector_modifier = function(selector) selector:add_order_by("area.member_weight DESC") end
 | 
| 
bsw/jbe@0
 | 
    37     },
 | 
| 
bsw/jbe@0
 | 
    38     {
 | 
| 
bsw/jbe@0
 | 
    39       name = "direct_member_count",
 | 
| 
bsw/jbe@0
 | 
    40       label = _"Direct member count",
 | 
| 
bsw/jbe@19
 | 
    41       selector_modifier = function(selector) selector:add_order_by("area.direct_member_count DESC") end
 | 
| 
bsw/jbe@0
 | 
    42     },
 | 
| 
bsw/jbe@0
 | 
    43     {
 | 
| 
bsw/jbe@0
 | 
    44       name = "az",
 | 
| 
bsw/jbe@0
 | 
    45       label = _"A-Z",
 | 
| 
bsw/jbe@19
 | 
    46       selector_modifier = function(selector) selector:add_order_by("area.name") end
 | 
| 
bsw/jbe@0
 | 
    47     },
 | 
| 
bsw/jbe@0
 | 
    48     {
 | 
| 
bsw/jbe@0
 | 
    49       name = "za",
 | 
| 
bsw/jbe@0
 | 
    50       label = _"Z-A",
 | 
| 
bsw/jbe@19
 | 
    51       selector_modifier = function(selector) selector:add_order_by("area.name DESC") end
 | 
| 
bsw/jbe@0
 | 
    52     }
 | 
| 
bsw/jbe@0
 | 
    53   },
 | 
| 
bsw/jbe@0
 | 
    54   content = function()
 | 
| 
bsw/jbe@0
 | 
    55     ui.list{
 | 
| 
bsw/jbe@19
 | 
    56       attr = { class = "area_list" },
 | 
| 
bsw/jbe@0
 | 
    57       records = areas_selector:exec(),
 | 
| 
bsw/jbe@0
 | 
    58       columns = {
 | 
| 
bsw/jbe@0
 | 
    59         {
 | 
| 
bsw/jbe@0
 | 
    60           content = function(record)
 | 
| 
bsw/jbe@19
 | 
    61             if record.is_member then
 | 
| 
bsw/jbe@19
 | 
    62               local text = _"Member of area"
 | 
| 
bsw/jbe@19
 | 
    63               ui.image{
 | 
| 
bsw/jbe@19
 | 
    64                 attr = { title = text, alt = text, style = "vertical-align: middle;" },
 | 
| 
bsw/jbe@19
 | 
    65                 static = "icons/16/user_gray.png",
 | 
| 
bsw/jbe@19
 | 
    66               }
 | 
| 
bsw/jbe@19
 | 
    67             end
 | 
| 
bsw/jbe@19
 | 
    68           end
 | 
| 
bsw/jbe@19
 | 
    69         },
 | 
| 
bsw/jbe@19
 | 
    70         {
 | 
| 
bsw/jbe@19
 | 
    71           content = function(record)
 | 
| 
bsw/jbe@0
 | 
    72             if record.member_weight and record.direct_member_count then
 | 
| 
bsw/jbe@0
 | 
    73               local max_value = MemberCount:get()
 | 
| 
bsw/jbe@0
 | 
    74               ui.bargraph{
 | 
| 
bsw/jbe@0
 | 
    75                 max_value = max_value,
 | 
| 
bsw/jbe@4
 | 
    76                 width = 100,
 | 
| 
bsw/jbe@0
 | 
    77                 bars = {
 | 
| 
bsw/jbe@0
 | 
    78                   { color = "#444", value = record.direct_member_count },
 | 
| 
bsw/jbe@0
 | 
    79                   { color = "#777", value = record.member_weight - record.direct_member_count },
 | 
| 
bsw/jbe@0
 | 
    80                   { color = "#ddd", value = max_value - record.member_weight },
 | 
| 
bsw/jbe@0
 | 
    81                 }
 | 
| 
bsw/jbe@0
 | 
    82               }
 | 
| 
bsw/jbe@0
 | 
    83             end
 | 
| 
bsw/jbe@0
 | 
    84           end
 | 
| 
bsw/jbe@0
 | 
    85         },
 | 
| 
bsw/jbe@0
 | 
    86         {
 | 
| 
bsw/jbe@0
 | 
    87           content = function(record)
 | 
| 
bsw/jbe@0
 | 
    88             ui.link{
 | 
| 
bsw/jbe@0
 | 
    89               text = record.name,
 | 
| 
bsw/jbe@0
 | 
    90               module = "area",
 | 
| 
bsw/jbe@0
 | 
    91               view = "show",
 | 
| 
bsw/jbe@0
 | 
    92               id = record.id
 | 
| 
bsw/jbe@0
 | 
    93             }
 | 
| 
bsw/jbe@0
 | 
    94           end
 | 
| 
bsw@9
 | 
    95         },
 | 
| 
bsw@9
 | 
    96         {
 | 
| 
bsw/jbe@19
 | 
    97           label = function()
 | 
| 
bsw/jbe@19
 | 
    98             local title = _"New"
 | 
| 
bsw/jbe@19
 | 
    99             ui.image{
 | 
| 
bsw/jbe@19
 | 
   100               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   101               static = "icons/16/new.png"
 | 
| 
bsw/jbe@19
 | 
   102             }
 | 
| 
bsw/jbe@19
 | 
   103           end,
 | 
| 
bsw/jbe@19
 | 
   104           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   105           label_attr = label_attr,
 | 
| 
bsw@9
 | 
   106           content = function(record)
 | 
| 
bsw@9
 | 
   107             ui.link{
 | 
| 
bsw@9
 | 
   108               text = tostring(record.issues_new_count),
 | 
| 
bsw@9
 | 
   109               module = "area",
 | 
| 
bsw@9
 | 
   110               view = "show",
 | 
| 
bsw@9
 | 
   111               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   112               params = { filter = "new", tab = "issues" }
 | 
| 
bsw@9
 | 
   113             }
 | 
| 
bsw@9
 | 
   114           end
 | 
| 
bsw@9
 | 
   115         },
 | 
| 
bsw@9
 | 
   116         {
 | 
| 
bsw/jbe@19
 | 
   117           label = function()
 | 
| 
bsw/jbe@19
 | 
   118             local title = _"Discussion"
 | 
| 
bsw/jbe@19
 | 
   119             ui.image{
 | 
| 
bsw/jbe@19
 | 
   120               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   121               static = "icons/16/comments.png"
 | 
| 
bsw/jbe@19
 | 
   122             }
 | 
| 
bsw/jbe@19
 | 
   123           end,
 | 
| 
bsw/jbe@19
 | 
   124           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   125           label_attr = label_attr,
 | 
| 
bsw@9
 | 
   126           content = function(record)
 | 
| 
bsw@9
 | 
   127             ui.link{
 | 
| 
bsw@9
 | 
   128               text = tostring(record.issues_discussion_count),
 | 
| 
bsw@9
 | 
   129               module = "area",
 | 
| 
bsw@9
 | 
   130               view = "show",
 | 
| 
bsw@9
 | 
   131               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   132               params = { filter = "accepted", tab = "issues" }
 | 
| 
bsw@9
 | 
   133             }
 | 
| 
bsw@9
 | 
   134           end
 | 
| 
bsw@9
 | 
   135         },
 | 
| 
bsw@9
 | 
   136         {
 | 
| 
bsw/jbe@19
 | 
   137           label = function()
 | 
| 
bsw/jbe@19
 | 
   138             local title = _"Frozen"
 | 
| 
bsw/jbe@19
 | 
   139             ui.image{
 | 
| 
bsw/jbe@19
 | 
   140               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   141               static = "icons/16/lock.png"
 | 
| 
bsw/jbe@19
 | 
   142             }
 | 
| 
bsw/jbe@19
 | 
   143           end,
 | 
| 
bsw/jbe@19
 | 
   144           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   145           label_attr = label_attr,
 | 
| 
bsw@9
 | 
   146           content = function(record)
 | 
| 
bsw@9
 | 
   147             ui.link{
 | 
| 
bsw@9
 | 
   148               text = tostring(record.issues_frozen_count),
 | 
| 
bsw@9
 | 
   149               module = "area",
 | 
| 
bsw@9
 | 
   150               view = "show",
 | 
| 
bsw@9
 | 
   151               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   152               params = { filter = "half_frozen", tab = "issues" }
 | 
| 
bsw@9
 | 
   153             }
 | 
| 
bsw@9
 | 
   154           end
 | 
| 
bsw@9
 | 
   155         },
 | 
| 
bsw@9
 | 
   156         {
 | 
| 
bsw/jbe@19
 | 
   157           label = function()
 | 
| 
bsw/jbe@19
 | 
   158             local title = _"Voting"
 | 
| 
bsw/jbe@19
 | 
   159             ui.image{
 | 
| 
bsw/jbe@19
 | 
   160               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   161               static = "icons/16/email_open.png"
 | 
| 
bsw/jbe@19
 | 
   162             }
 | 
| 
bsw/jbe@19
 | 
   163           end,
 | 
| 
bsw/jbe@19
 | 
   164           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   165           label_attr = label_attr,
 | 
| 
bsw@9
 | 
   166           content = function(record)
 | 
| 
bsw@9
 | 
   167             ui.link{
 | 
| 
bsw@9
 | 
   168               text = tostring(record.issues_voting_count),
 | 
| 
bsw@9
 | 
   169               module = "area",
 | 
| 
bsw@9
 | 
   170               view = "show",
 | 
| 
bsw@9
 | 
   171               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   172               params = { filter = "frozen", tab = "issues" }
 | 
| 
bsw@9
 | 
   173             }
 | 
| 
bsw@9
 | 
   174           end
 | 
| 
bsw@9
 | 
   175         },
 | 
| 
bsw@9
 | 
   176         {
 | 
| 
bsw/jbe@19
 | 
   177           label = function()
 | 
| 
bsw/jbe@19
 | 
   178             local title = _"Finished"
 | 
| 
bsw/jbe@19
 | 
   179             ui.image{
 | 
| 
bsw/jbe@19
 | 
   180               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   181               static = "icons/16/tick.png"
 | 
| 
bsw@9
 | 
   182             }
 | 
| 
bsw/jbe@19
 | 
   183           end,
 | 
| 
bsw/jbe@19
 | 
   184           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   185           label_attr = label_attr,
 | 
| 
bsw@10
 | 
   186           content = function(record)
 | 
| 
bsw@10
 | 
   187             ui.link{
 | 
| 
bsw@10
 | 
   188               text = tostring(record.issues_finished_count),
 | 
| 
bsw@10
 | 
   189               module = "area",
 | 
| 
bsw@10
 | 
   190               view = "show",
 | 
| 
bsw@10
 | 
   191               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   192               params = { filter = "finished", issue_list = "newest", tab = "issues" }
 | 
| 
bsw@10
 | 
   193             }
 | 
| 
bsw@10
 | 
   194           end
 | 
| 
bsw@10
 | 
   195         },
 | 
| 
bsw@10
 | 
   196         {
 | 
| 
bsw/jbe@19
 | 
   197           label = function()
 | 
| 
bsw/jbe@19
 | 
   198             local title = _"Cancelled"
 | 
| 
bsw/jbe@19
 | 
   199             ui.image{
 | 
| 
bsw/jbe@19
 | 
   200               attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   201               static = "icons/16/cross.png"
 | 
| 
bsw/jbe@19
 | 
   202             }
 | 
| 
bsw/jbe@19
 | 
   203           end,
 | 
| 
bsw/jbe@19
 | 
   204           field_attr = field_attr,
 | 
| 
bsw/jbe@19
 | 
   205           label_attr = label_attr,
 | 
| 
bsw@10
 | 
   206           content = function(record)
 | 
| 
bsw@10
 | 
   207             ui.link{
 | 
| 
bsw@10
 | 
   208               text = tostring(record.issues_cancelled_count),
 | 
| 
bsw@10
 | 
   209               module = "area",
 | 
| 
bsw@10
 | 
   210               view = "show",
 | 
| 
bsw@10
 | 
   211               id = record.id,
 | 
| 
bsw/jbe@19
 | 
   212               params = { filter = "cancelled", issue_list = "newest", tab = "issues" }
 | 
| 
bsw@10
 | 
   213             }
 | 
| 
bsw@10
 | 
   214           end
 | 
| 
bsw@10
 | 
   215         },
 | 
| 
bsw/jbe@19
 | 
   216         {
 | 
| 
bsw/jbe@19
 | 
   217           content = function(record)
 | 
| 
bsw/jbe@19
 | 
   218             if record.issues_to_vote_count > 0 then
 | 
| 
bsw/jbe@19
 | 
   219               ui.link{
 | 
| 
bsw/jbe@19
 | 
   220                 attr = { class = "not_voted" },
 | 
| 
bsw/jbe@19
 | 
   221                 text = _"Not yet voted" .. ": " .. tostring(record.issues_to_vote_count),
 | 
| 
bsw/jbe@19
 | 
   222                 module = "area",
 | 
| 
bsw/jbe@19
 | 
   223                 view = "show",
 | 
| 
bsw/jbe@19
 | 
   224                 id = record.id,
 | 
| 
bsw/jbe@19
 | 
   225                 params = {
 | 
| 
bsw/jbe@19
 | 
   226                   filter = "frozen",
 | 
| 
bsw/jbe@19
 | 
   227                   filter_voting = "not_voted",
 | 
| 
bsw/jbe@19
 | 
   228                   tab = "issues"
 | 
| 
bsw/jbe@19
 | 
   229                 }
 | 
| 
bsw/jbe@19
 | 
   230               }
 | 
| 
bsw/jbe@19
 | 
   231             end
 | 
| 
bsw/jbe@19
 | 
   232           end
 | 
| 
bsw/jbe@19
 | 
   233         },
 | 
| 
bsw/jbe@0
 | 
   234       }
 | 
| 
bsw/jbe@0
 | 
   235     }
 | 
| 
bsw/jbe@0
 | 
   236   end
 | 
| 
bsw/jbe@4
 | 
   237 }
 | 
| 
bsw/jbe@4
 | 
   238 
 | 
| 
bsw/jbe@4
 | 
   239 ui.bargraph_legend{
 | 
| 
bsw/jbe@4
 | 
   240   width = 25,
 | 
| 
bsw/jbe@4
 | 
   241   bars = {
 | 
| 
bsw/jbe@4
 | 
   242     { color = "#444", label = _"Direct membership" },
 | 
| 
bsw/jbe@4
 | 
   243     { color = "#777", label = _"Membership by delegation" },
 | 
| 
bsw/jbe@4
 | 
   244     { color = "#ddd", label = _"No membership at all" },
 | 
| 
bsw/jbe@4
 | 
   245   }
 | 
| 
bsw/jbe@4
 | 
   246 }
 | 
| 
bsw/jbe@4
 | 
   247 
 | 
| 
bsw/jbe@19
 | 
   248 slot.put("<br />   ")
 | 
| 
bsw/jbe@19
 | 
   249 
 | 
| 
bsw/jbe@19
 | 
   250 
 | 
| 
bsw@51
 | 
   251 if app.session.member_id then
 | 
| 
bsw@51
 | 
   252   ui.image{
 | 
| 
bsw@51
 | 
   253     attr = { title = title, alt = title },
 | 
| 
bsw@51
 | 
   254     static = "icons/16/user_gray.png"
 | 
| 
bsw@51
 | 
   255   }
 | 
| 
bsw@51
 | 
   256   slot.put(" ")
 | 
| 
bsw@51
 | 
   257   slot.put(_"Member of area")
 | 
| 
bsw@51
 | 
   258   slot.put("   ")
 | 
| 
bsw@51
 | 
   259 end
 | 
| 
bsw/jbe@19
 | 
   260 
 | 
| 
bsw/jbe@19
 | 
   261 ui.image{
 | 
| 
bsw/jbe@19
 | 
   262   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   263   static = "icons/16/new.png"
 | 
| 
bsw/jbe@19
 | 
   264 }
 | 
| 
bsw/jbe@19
 | 
   265 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   266 slot.put(_"New")
 | 
| 
bsw/jbe@19
 | 
   267 slot.put("   ")
 | 
| 
bsw/jbe@19
 | 
   268 
 | 
| 
bsw/jbe@19
 | 
   269 ui.image{
 | 
| 
bsw/jbe@19
 | 
   270   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   271   static = "icons/16/comments.png"
 | 
| 
bsw/jbe@19
 | 
   272 }
 | 
| 
bsw/jbe@19
 | 
   273 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   274 slot.put(_"Discussion")
 | 
| 
bsw/jbe@19
 | 
   275 slot.put("   ")
 | 
| 
bsw/jbe@19
 | 
   276 
 | 
| 
bsw/jbe@19
 | 
   277 ui.image{
 | 
| 
bsw/jbe@19
 | 
   278   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   279   static = "icons/16/lock.png"
 | 
| 
bsw/jbe@19
 | 
   280 }
 | 
| 
bsw/jbe@19
 | 
   281 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   282 slot.put(_"Frozen")
 | 
| 
bsw/jbe@19
 | 
   283 slot.put("   ")
 | 
| 
bsw/jbe@19
 | 
   284 
 | 
| 
bsw/jbe@19
 | 
   285 ui.image{
 | 
| 
bsw/jbe@19
 | 
   286   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   287   static = "icons/16/email_open.png"
 | 
| 
bsw/jbe@19
 | 
   288 }
 | 
| 
bsw/jbe@19
 | 
   289 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   290 slot.put(_"Voting")
 | 
| 
bsw/jbe@19
 | 
   291 slot.put("   ")
 | 
| 
bsw/jbe@19
 | 
   292 
 | 
| 
bsw/jbe@19
 | 
   293 ui.image{
 | 
| 
bsw/jbe@19
 | 
   294   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   295   static = "icons/16/tick.png"
 | 
| 
bsw/jbe@19
 | 
   296 }
 | 
| 
bsw/jbe@19
 | 
   297 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   298 slot.put(_"Finished")
 | 
| 
bsw/jbe@19
 | 
   299 slot.put("   ")
 | 
| 
bsw/jbe@19
 | 
   300 
 | 
| 
bsw/jbe@19
 | 
   301 ui.image{
 | 
| 
bsw/jbe@19
 | 
   302   attr = { title = title, alt = title },
 | 
| 
bsw/jbe@19
 | 
   303   static = "icons/16/cross.png"
 | 
| 
bsw/jbe@19
 | 
   304 }
 | 
| 
bsw/jbe@19
 | 
   305 slot.put(" ")
 | 
| 
bsw/jbe@19
 | 
   306 slot.put(_"Cancelled")
 | 
| 
bsw/jbe@19
 | 
   307 
 |