Convert workflows document type selection, smart link document type selection, role members list, user group and group users views to CBV assign remove. Remove now obsolete assign remove function based view

This commit is contained in:
Roberto Rosario
2015-04-07 15:48:27 -04:00
parent 0476e66903
commit 69a7efd6f0
11 changed files with 257 additions and 289 deletions

View File

@@ -5,7 +5,6 @@ from json import loads
import operator
from django.contrib import messages
from django.contrib.auth.models import Group, User
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
from django.core.urlresolvers import reverse_lazy
@@ -15,15 +14,14 @@ from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
from acls.classes import EncapsulatedObject
from common.models import AnonymousUserSingleton
from common.views import (
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView,
assign_remove
AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
SingleObjectEditView
)
from common.utils import encapsulate, get_object_name
from common.utils import encapsulate
from common.widgets import two_state_template
from .classes import Member
from .forms import RoleForm, RoleForm_view
from .models import Permission, Role
from .permissions import (
@@ -31,6 +29,7 @@ from .permissions import (
PERMISSION_ROLE_VIEW, PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE,
PERMISSION_ROLE_EDIT
)
from .utils import get_non_role_members, get_role_members
class RoleCreateView(SingleObjectCreateView):
@@ -51,6 +50,40 @@ class RoleEditView(SingleObjectEditView):
view_permission = PERMISSION_ROLE_EDIT
class SetupRoleMembersView(AssignRemoveView):
grouped = True
def add(self, item):
member = Member.get(item).source_object
self.role.add_member(member)
def dispatch(self, request, *args, **kwargs):
Permission.objects.check_permissions(request.user, [PERMISSION_ROLE_EDIT])
self.role = get_object_or_404(Role, pk=self.kwargs['role_id'])
self.left_list_title = _('Non members of role: %s') % self.role
self.right_list_title = _('Members of role: %s') % self.role
return super(SetupRoleMembersView, self).dispatch(request, *args, **kwargs)
def left_list(self):
return get_non_role_members(self.role)
def right_list(self):
return get_role_members(self.role)
def remove(self, item):
member = Member.get(item).source_object
self.role.remove_member(member)
def get_context_data(self, **kwargs):
data = super(SetupRoleMembersView, self).get_context_data(**kwargs)
data.update({
'object': self.role,
})
return data
def role_list(request):
Permission.objects.check_permissions(request.user, [PERMISSION_ROLE_VIEW])
@@ -221,90 +254,3 @@ def permission_revoke(request):
return render_to_response('appearance/generic_confirm.html', context,
context_instance=RequestContext(request))
class Member(EncapsulatedObject):
source_object_name = 'member_object'
def _as_choice_list(items):
return sorted([(Member.encapsulate(item).gid, get_object_name(item, display_object_type=False)) for item in items], key=lambda x: x[1])
def get_role_members(role, separate=False):
user_ct = ContentType.objects.get(model='user')
group_ct = ContentType.objects.get(model='group')
anonymous = ContentType.objects.get(model='anonymoususersingleton')
users = role.members(filter_dict={'member_type': user_ct})
groups = role.members(filter_dict={'member_type': group_ct})
anonymous = role.members(filter_dict={'member_type': anonymous})
if separate:
return users, groups, anonymous
else:
members = []
if users:
members.append((_('Users'), _as_choice_list(list(users))))
if groups:
members.append((_('Groups'), _as_choice_list(list(groups))))
if anonymous:
members.append((_('Special'), _as_choice_list(list(anonymous))))
return members
def get_non_role_members(role):
# non members = all users - members - staff - super users
member_users, member_groups, member_anonymous = get_role_members(role, separate=True)
staff_users = User.objects.filter(is_staff=True)
super_users = User.objects.filter(is_superuser=True)
users = set(User.objects.all()) - set(member_users) - set(staff_users) - set(super_users)
groups = set(Group.objects.all()) - set(member_groups)
anonymous = set([AnonymousUserSingleton.objects.get()]) - set(member_anonymous)
non_members = []
if users:
non_members.append((_('Users'), _as_choice_list(list(users))))
if groups:
non_members.append((_('Groups'), _as_choice_list(list(groups))))
if anonymous:
non_members.append((_('Special'), _as_choice_list(list(anonymous))))
return non_members
def add_role_member(role, selection):
member = Member.get(selection).source_object
role.add_member(member)
def remove_role_member(role, selection):
member = Member.get(selection).source_object
role.remove_member(member)
def role_members(request, role_id):
Permission.objects.check_permissions(request.user, [PERMISSION_ROLE_EDIT])
role = get_object_or_404(Role, pk=role_id)
return assign_remove(
request,
left_list=lambda: get_non_role_members(role),
right_list=lambda: get_role_members(role),
add_method=lambda x: add_role_member(role, x),
remove_method=lambda x: remove_role_member(role, x),
left_list_title=_('Non members of role: %s') % role,
right_list_title=_('Members of role: %s') % role,
extra_context={
'object': role,
},
grouped=True,
)