View review group members
Updated 4 months, 2 weeks ago
| Florian Föbel | Reviewers | ||
| reviewboard | |||
| None | Review Board SVN | ||
This one's a request from one of my users who wanted to see who's attending a group: - Adds a member count column to the group datagrid. - The new column links to a modified version of the submitter datagrid which only shows the members of the specified group.
Tested using my local test instance.
Diff revision 2 (Latest)
|
1
2
|
|
|
1
2
|
- /trunk/reviewboard/urls.py: 1 change [ 1 ]
- /trunk/reviewboard/reviews/datagrids.py: 4 changes [ 1 2 3 4 ]
- /trunk/reviewboard/reviews/views.py: 1 change [ 1 ]
| /trunk/reviewboard/urls.py | |||
|---|---|---|---|
| Revision 1449 | New Change | ||
| ... | 74 lines hidden [Expand] | ||
| 75 | name="user"), |
75 | name="user"), |
| 76 | 76 | ||
| 77 | # Groups |
77 | # Groups |
| 78 | url(r'^groups/$', 'group_list', name="all-groups"), |
78 | url(r'^groups/$', 'group_list', name="all-groups"), |
| 79 | url(r'^groups/(?P<name>[A-Za-z0-9_-]+)/$', 'group', name="group"), |
79 | url(r'^groups/(?P<name>[A-Za-z0-9_-]+)/$', 'group', name="group"), |
| 80 | url(r'^groups/(?P<name>[A-Za-z0-9_-]+)/members/$', 'group_members', name="group_members"), |
||
| 80 | ) |
81 | ) |
| 81 | 82 | ||
| 82 | 83 | ||
| 83 | # django.contrib |
84 | # django.contrib |
| 84 | urlpatterns += patterns('django.contrib', |
85 | urlpatterns += patterns('django.contrib', |
| ... | 43 lines hidden [Expand] | ||
| /trunk/reviewboard/reviews/datagrids.py | |||
|---|---|---|---|
| Revision 1449 | New Change | ||
| ... | 161 lines hidden [Expand] | ||
| 162 | def render_data(self, obj): |
162 | def render_data(self, obj): |
| 163 | return str(getattr(obj, self.field_name).filter(public=True, |
163 | return str(getattr(obj, self.field_name).filter(public=True, |
| 164 | status='P').count()) |
164 | status='P').count()) |
| 165 | 165 | ||
| 166 | 166 | ||
| 167 | class GroupMemberCountColumn(Column): |
||
| 168 | """ |
||
| 169 | A column used to show the number of users that registered for a group. |
||
| 170 | """ |
||
| 171 | def __init__(self, *args, **kwargs): |
||
| 172 | Column.__init__(self, *args, **kwargs) |
||
| 173 | self.link = True |
||
| 174 | self.link_func = self.link_to_object |
||
| 175 | |||
| 176 | def render_data(self, group): |
||
| 177 | return str(group.users.count()) |
||
| 178 | |||
| 179 | def link_to_object(self, group, value): |
||
| 180 | return reverse('group_members', args=[group.name]) |
||
| 181 | |||
| 182 | |||
| 167 | class ReviewCountColumn(Column): |
183 | class ReviewCountColumn(Column): |
| 168 | """ |
184 | """ |
| 169 | A column showing the number of reviews for a review request. |
185 | A column showing the number of reviews for a review request. |
| 170 | """ |
186 | """ |
| 171 | def __init__(self, label=_("Reviews"), |
187 | def __init__(self, label=_("Reviews"), |
| ... | 183 lines hidden [Expand] | ||
| 355 | link=True, expand=True) |
371 | link=True, expand=True) |
| 356 | pending_count = PendingCountColumn(_("Pending Reviews"), |
372 | pending_count = PendingCountColumn(_("Pending Reviews"), |
| 357 | field_name="directed_review_requests", |
373 | field_name="directed_review_requests", |
| 358 | shrink=True) |
374 | shrink=True) |
| 359 | 375 | ||
| 360 | def __init__(self, request): |
376 | def __init__(self, request, |
| 361 | DataGrid.__init__(self, request, User.objects.filter(is_active=True), |
377 | queryset=User.objects.filter(is_active=True), |
| 362 | _("All submitters")) |
378 | title=_("All submitters")): |
| 379 | DataGrid.__init__(self, request, queryset, title) |
||
| 363 | self.default_sort = ["username"] |
380 | self.default_sort = ["username"] |
| 364 | self.profile_sort_field = 'sort_submitter_columns' |
381 | self.profile_sort_field = 'sort_submitter_columns' |
| 365 | self.profile_columns_field = 'submitter_columns' |
382 | self.profile_columns_field = 'submitter_columns' |
| 366 | self.default_columns = [ |
383 | self.default_columns = [ |
| 367 | "username", "fullname", "pending_count" |
384 | "username", "fullname", "pending_count" |
| ... | 12 lines hidden [Expand] | ||
| 380 | name = Column(_("Group ID"), link=True, sortable=True) |
397 | name = Column(_("Group ID"), link=True, sortable=True) |
| 381 | displayname = Column(_("Group Name"), field_name="display_name", |
398 | displayname = Column(_("Group Name"), field_name="display_name", |
| 382 | link=True, expand=True) |
399 | link=True, expand=True) |
| 383 | pending_count = PendingCountColumn(_("Pending Reviews"), |
400 | pending_count = PendingCountColumn(_("Pending Reviews"), |
| 384 | field_name="review_requests", |
401 | field_name="review_requests", |
| 402 | link=True, |
||
| 403 | shrink=True) |
||
| 404 | member_count = GroupMemberCountColumn(_("Members"), |
||
| 405 | field_name="members", |
||
| 385 | shrink=True) |
406 | shrink=True) |
| 386 | 407 | ||
| 387 | def __init__(self, request, title=_("All groups")): |
408 | def __init__(self, request, title=_("All groups")): |
| 388 | DataGrid.__init__(self, request, Group.objects.all(), title) |
409 | DataGrid.__init__(self, request, Group.objects.all(), title) |
| 389 | self.profile_sort_field = 'sort_group_columns' |
410 | self.profile_sort_field = 'sort_group_columns' |
| ... | 19 lines hidden [Expand] | ||
| /trunk/reviewboard/reviews/views.py | |||
|---|---|---|---|
| Revision 1449 | New Change | ||
| ... | 192 lines hidden [Expand] | ||
| 193 | 193 | ||
| 194 | return datagrid.render_to_response(template_name) |
194 | return datagrid.render_to_response(template_name) |
| 195 | 195 | ||
| 196 | 196 | ||
| 197 | @check_login_required |
197 | @check_login_required |
| 198 | def group_members(request, name, template_name='reviews/datagrid.html'): |
||
| 199 | """ |
||
| 200 | A list of users registered for a particular group. |
||
| 201 | """ |
||
| 202 | # Make sure the group exists |
||
| 203 | get_object_or_404(Group, name=name) |
||
| 204 | |||
| 205 | datagrid = SubmitterDataGrid(request, |
||
| 206 | Group.objects.get(name=name).users.filter(is_active=True), |
||
| 207 | _("Members of group %s") % name) |
||
| 208 | |||
| 209 | return datagrid.render_to_response(template_name) |
||
| 210 | |||
| 211 | |||
| 212 | @check_login_required |
||
| 198 | def submitter(request, username, template_name='reviews/datagrid.html'): |
213 | def submitter(request, username, template_name='reviews/datagrid.html'): |
| 199 | """ |
214 | """ |
| 200 | A list of review requests owned by a particular user. |
215 | A list of review requests owned by a particular user. |
| 201 | """ |
216 | """ |
| 202 | # Make sure the user exists |
217 | # Make sure the user exists |
| ... | 396 lines hidden [Expand] | ||
- /trunk/reviewboard/urls.py: 1 change [ 1 ]
- /trunk/reviewboard/reviews/datagrids.py: 4 changes [ 1 2 3 4 ]
- /trunk/reviewboard/reviews/views.py: 1 change [ 1 ]
Other reviews