Added generic assign remove view and converted the user management and permissions apps to use it

This commit is contained in:
Roberto Rosario
2011-05-14 23:46:21 -04:00
parent 19c361937f
commit 1bd75a1d24
3 changed files with 154 additions and 148 deletions

View File

@@ -9,8 +9,8 @@ from django.contrib.auth.models import User, Group
from django.contrib.contenttypes.models import ContentType
from permissions.api import check_permissions
from common.forms import ChoiceForm
from common.utils import generate_choices_w_labels, two_state_template
from common.views import assign_remove
from user_management import PERMISSION_USER_VIEW, \
PERMISSION_USER_EDIT, PERMISSION_USER_CREATE, \
@@ -332,68 +332,16 @@ def get_non_group_members(group):
def group_members(request, group_id):
check_permissions(request.user, 'user_management', [PERMISSION_GROUP_EDIT])
group = get_object_or_404(Group, pk=group_id)
if request.method == 'POST':
if 'unselected-users-submit' in request.POST.keys():
unselected_users_form = ChoiceForm(request.POST,
prefix='unselected-users',
choices=generate_choices_w_labels(get_non_group_members(group), display_object_type=False))
if unselected_users_form.is_valid():
for selection in unselected_users_form.cleaned_data['selection']:
model, pk = selection.split(u',')
ct = ContentType.objects.get(model=model)
obj = ct.get_object_for_this_type(pk=pk)
group.user_set.add(obj)
messages.success(request, _(u'%(obj)s added successfully to the group: %(group)s.') % {
'obj': generate_choices_w_labels([obj])[0][1], 'group': group})
elif 'selected-users-submit' in request.POST.keys():
selected_users_form = ChoiceForm(request.POST,
prefix='selected-users',
choices=generate_choices_w_labels(get_group_members(group), display_object_type=False))
if selected_users_form.is_valid():
for selection in selected_users_form.cleaned_data['selection']:
model, pk = selection.split(u',')
ct = ContentType.objects.get(model=model)
obj = ct.get_object_for_this_type(pk=pk)
try:
group.user_set.remove(obj)
messages.success(request, _(u'%(obj)s removed successfully from the group: %(group)s.') % {
'obj': generate_choices_w_labels([obj])[0][1], 'group': group})
except obj.DoesNotExist:
messages.error(request, _(u'Unable to remove %(obj)s from the group: %(group)s.') % {
'obj': generate_choices_w_labels([obj])[0][1], 'group': group})
unselected_users_form = ChoiceForm(prefix='unselected-users',
choices=generate_choices_w_labels(get_non_group_members(group), display_object_type=False))
selected_users_form = ChoiceForm(prefix='selected-users',
choices=generate_choices_w_labels(get_group_members(group), display_object_type=False))
context = {
'object': group,
'object_name': _(u'group'),
'subtemplates_list': [
{
'name': u'generic_form_subtemplate.html',
'context': {
'form': unselected_users_form,
'title': _(u'non members of group: %s') % group,
'submit_label': _(u'Add'),
},
'grid': 6,
'grid_clear': False,
},
{
'name': u'generic_form_subtemplate.html',
'context': {
'form': selected_users_form,
'title': _(u'members of group: %s') % group,
'submit_label': _(u'Remove'),
},
'grid': 6,
'grid_clear': True,
},
],
}
return render_to_response('generic_form.html', context,
context_instance=RequestContext(request))
return assign_remove(
request,
left_list=lambda: generate_choices_w_labels(get_non_group_members(group), display_object_type=False),
right_list=lambda: generate_choices_w_labels(get_group_members(group), display_object_type=False),
add_method=lambda x: group.user_set.add(x),
remove_method=lambda x: group.user_set.remove(x),
left_list_title=_(u'non members of group: %s') % group,
right_list_title=_(u'members of group: %s') % group,
obj=group,
object_name=_(u'group'),
decode_content_type=True,
)