Review Board

beta

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

  1. /trunk/reviewboard/urls.py: 1 change [ 1 ]
  2. /trunk/reviewboard/reviews/datagrids.py: 4 changes [ 1 2 3 4 ]
  3. /trunk/reviewboard/reviews/views.py: 1 change [ 1 ]
/trunk/reviewboard/urls.py
Revision 1449 New Change
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',
/trunk/reviewboard/reviews/datagrids.py
Revision 1449 New Change
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"),
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"
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'
/trunk/reviewboard/reviews/views.py
Revision 1449 New Change
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
  1. /trunk/reviewboard/urls.py: 1 change [ 1 ]
  2. /trunk/reviewboard/reviews/datagrids.py: 4 changes [ 1 2 3 4 ]
  3. /trunk/reviewboard/reviews/views.py: 1 change [ 1 ]