From 5a5721c618b844e2d10f54b4750230031e85f149 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 9 Oct 2012 12:34:55 -0400 Subject: [PATCH] Add support to add and remove a user from many groups at once from the user edit view --- apps/user_management/__init__.py | 5 +++-- apps/user_management/urls.py | 1 + apps/user_management/views.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/apps/user_management/__init__.py b/apps/user_management/__init__.py index 00d0e50533..2c18f0e3f1 100644 --- a/apps/user_management/__init__.py +++ b/apps/user_management/__init__.py @@ -18,6 +18,7 @@ user_delete = {u'text': _('delete'), 'view': 'user_delete', 'args': 'object.id', user_multiple_delete = {u'text': _('delete'), 'view': 'user_multiple_delete', 'famfam': 'user_delete', 'permissions': [PERMISSION_USER_DELETE]} user_set_password = {u'text': _('reset password'), 'view': 'user_set_password', 'args': 'object.id', 'famfam': 'lock_edit', 'permissions': [PERMISSION_USER_EDIT]} user_multiple_set_password = {u'text': _('reset password'), 'view': 'user_multiple_set_password', 'famfam': 'lock_edit', 'permissions': [PERMISSION_USER_EDIT]} +user_groups = {'text': _(u'groups'), 'view': 'user_groups', 'args': 'object.id', 'famfam': 'group_link', 'permissions': [PERMISSION_USER_EDIT]} group_list = {'text': _(u'group list'), 'view': 'group_list', 'famfam': 'group', 'permissions': [PERMISSION_GROUP_VIEW]} group_setup = {'text': _(u'groups'), 'view': 'group_list', 'famfam': 'group', 'icon': 'group.png', 'permissions': [PERMISSION_GROUP_VIEW], 'children_view_regex': [r'^group_']} @@ -27,8 +28,8 @@ group_delete = {u'text': _('delete'), 'view': 'group_delete', 'args': 'object.id group_multiple_delete = {u'text': _('delete'), 'view': 'group_multiple_delete', 'famfam': 'group_delete', 'permissions': [PERMISSION_GROUP_DELETE]} group_members = {'text': _(u'members'), 'view': 'group_members', 'args': 'object.id', 'famfam': 'group_link', 'permissions': [PERMISSION_GROUP_EDIT]} -register_links(User, [user_edit, user_set_password, user_delete]) -register_links(['user_multiple_set_password', 'user_set_password', 'user_multiple_delete', 'user_delete', 'user_edit', 'user_list', 'user_add'], [user_list, user_add], menu_name=u'secondary_menu') +register_links(User, [user_edit, user_set_password, user_groups, user_delete]) +register_links([User, 'user_multiple_set_password', 'user_multiple_delete', 'user_list', 'user_add'], [user_list, user_add], menu_name=u'secondary_menu') register_multi_item_links(['user_list'], [user_multiple_set_password, user_multiple_delete]) register_links(Group, [group_edit, group_members, group_delete]) diff --git a/apps/user_management/urls.py b/apps/user_management/urls.py index 4343e2d47f..fceaea2b4e 100644 --- a/apps/user_management/urls.py +++ b/apps/user_management/urls.py @@ -8,6 +8,7 @@ urlpatterns = patterns('user_management.views', url(r'^user/multiple/delete/$', 'user_multiple_delete', (), 'user_multiple_delete'), url(r'^user/(?P\d+)/set_password/$', 'user_set_password', (), 'user_set_password'), url(r'^user/multiple/set_password/$', 'user_multiple_set_password', (), 'user_multiple_set_password'), + url(r'^user/(?P\d+)/groups/$', 'user_groups', (), 'user_groups'), url(r'^group/list/$', 'group_list', (), 'group_list'), url(r'^group/add/$', 'group_add', (), 'group_add'), diff --git a/apps/user_management/views.py b/apps/user_management/views.py index 85fea6a198..74b058cf51 100644 --- a/apps/user_management/views.py +++ b/apps/user_management/views.py @@ -216,6 +216,35 @@ def user_multiple_set_password(request): ) +def get_user_groups(user): + #return user.group_set.all() + return Group.objects.filter(user=user) + + +def get_user_non_groups(user): + return Group.objects.exclude(user=user) + + +def user_groups(request, user_id): + Permission.objects.check_permissions(request.user, [PERMISSION_USER_EDIT]) + user = get_object_or_404(User, pk=user_id) + + return assign_remove( + request, + left_list=lambda: generate_choices_w_labels(get_user_non_groups(user), display_object_type=False), + right_list=lambda: generate_choices_w_labels(get_user_groups(user), display_object_type=False), + add_method=lambda x: x.user_set.add(user), + remove_method=lambda x: x.user_set.remove(user), + left_list_title=_(u'non groups of user: %s') % user, + right_list_title=_(u'groups of user: %s') % user, + decode_content_type=True, + extra_context={ + 'object': user, + 'object_name': _(u'user'), + } + ) + + # Group views def group_list(request): Permission.objects.check_permissions(request.user, [PERMISSION_GROUP_VIEW])