From 6cbe1301cae300f116e4069c225a1b3efaa27168 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Mon, 19 Mar 2012 00:04:33 -0400 Subject: [PATCH] Add transition delete view and transition setup permissions --- apps/workflows/__init__.py | 12 +++--- apps/workflows/permissions.py | 5 +++ apps/workflows/urls.py | 2 +- apps/workflows/views.py | 69 ++++++++++++++++++++++++++++++----- 4 files changed, 73 insertions(+), 15 deletions(-) diff --git a/apps/workflows/__init__.py b/apps/workflows/__init__.py index 6b712e5496..194b613727 100644 --- a/apps/workflows/__init__.py +++ b/apps/workflows/__init__.py @@ -9,7 +9,9 @@ from .permissions import (PERMISSION_WORKFLOW_SETUP_VIEW, PERMISSION_WORKFLOW_SETUP_CREATE, PERMISSION_WORKFLOW_SETUP_EDIT, PERMISSION_WORKFLOW_SETUP_DELETE, PERMISSION_STATE_SETUP_VIEW, PERMISSION_STATE_SETUP_CREATE, PERMISSION_STATE_SETUP_EDIT, - PERMISSION_STATE_SETUP_DELETE) + PERMISSION_STATE_SETUP_DELETE, PERMISSION_TRANSITION_SETUP_VIEW, + PERMISSION_TRANSITION_SETUP_CREATE, PERMISSION_TRANSITION_SETUP_EDIT, + PERMISSION_TRANSITION_SETUP_DELETE) from .models import Workflow, State, Transition, WorkflowState @@ -27,10 +29,10 @@ setup_state_create_link = Link(text=_(u'create new state'), view='setup_state_cr setup_state_edit_link = Link(text=_(u'edit'), view='setup_state_edit', args='object.pk', sprite='transmit_edit', permissions=[PERMISSION_STATE_SETUP_EDIT]) setup_state_delete_link = Link(text=_(u'delete'), view='setup_state_delete', args='object.pk', sprite='transmit_delete', permissions=[PERMISSION_STATE_SETUP_DELETE]) -setup_transition_list_link = Link(text=_(u'transition list'), view='setup_transition_list', sprite='chart_line', permissions=[PERMISSION_WORKFLOW_SETUP_VIEW]) -setup_transition_create_link = Link(text=_(u'create new transition'), view='setup_transition_create', sprite='chart_line_add', permissions=[PERMISSION_WORKFLOW_SETUP_CREATE]) -setup_transition_edit_link = Link(text=_(u'edit'), view='setup_transition_edit', args='transition.pk', sprite='chart_line', permissions=[PERMISSION_WORKFLOW_SETUP_EDIT]) -setup_transition_delete_link = Link(text=_(u'delete'), view='setup_transition_delete', args='transition.pk', sprite='chart_line_delete', permissions=[PERMISSION_WORKFLOW_SETUP_DELETE]) +setup_transition_list_link = Link(text=_(u'transition list'), view='setup_transition_list', sprite='chart_line', permissions=[PERMISSION_TRANSITION_SETUP_VIEW]) +setup_transition_create_link = Link(text=_(u'create new transition'), view='setup_transition_create', sprite='chart_line_add', permissions=[PERMISSION_TRANSITION_SETUP_CREATE]) +setup_transition_edit_link = Link(text=_(u'edit'), view='setup_transition_edit', args='transition.pk', sprite='chart_line', permissions=[PERMISSION_TRANSITION_SETUP_EDIT]) +setup_transition_delete_link = Link(text=_(u'delete'), view='setup_transition_delete', args='transition.pk', sprite='chart_line_delete', permissions=[PERMISSION_TRANSITION_SETUP_DELETE]) bind_links( [ diff --git a/apps/workflows/permissions.py b/apps/workflows/permissions.py index dcce9281bd..5f27a47854 100644 --- a/apps/workflows/permissions.py +++ b/apps/workflows/permissions.py @@ -16,3 +16,8 @@ PERMISSION_STATE_SETUP_CREATE = Permission.objects.register(namespace, 'state_se PERMISSION_STATE_SETUP_EDIT = Permission.objects.register(namespace, 'state_setup_edit', _(u'Edit existing state templates')) PERMISSION_STATE_SETUP_DELETE = Permission.objects.register(namespace, 'state_setup_delete', _(u'Delete existing state templates')) +PERMISSION_TRANSITION_SETUP_VIEW = Permission.objects.register(namespace, 'transition_setup_view', _(u'View existing transition templates')) +PERMISSION_TRANSITION_SETUP_CREATE = Permission.objects.register(namespace, 'transition_setup_create', _(u'Create new transition templates')) +PERMISSION_TRANSITION_SETUP_EDIT = Permission.objects.register(namespace, 'transition_setup_edit', _(u'Edit existing transition templates')) +PERMISSION_TRANSITION_SETUP_DELETE = Permission.objects.register(namespace, 'transition_setup_delete', _(u'Delete existing transition templates')) + diff --git a/apps/workflows/urls.py b/apps/workflows/urls.py index 1c12a9e89b..f8e137e3b8 100644 --- a/apps/workflows/urls.py +++ b/apps/workflows/urls.py @@ -18,6 +18,6 @@ urlpatterns = patterns('workflows.views', url(r'^setup/transition/list/$', 'setup_transition_list', (), 'setup_transition_list'), url(r'^setup/transition/create/$', 'setup_transition_create', (), 'setup_transition_create'), url(r'^setup/transition/(?P\d+)/edit/$', 'setup_transition_edit', (), 'setup_transition_edit'), - #url(r'^setup/transition/(?P\d+)/delete/$', 'setup_transition_delete', (), 'setup_transition_delete'), + url(r'^setup/transition/(?P\d+)/delete/$', 'setup_transition_delete', (), 'setup_transition_delete'), ) diff --git a/apps/workflows/views.py b/apps/workflows/views.py index c2cd175813..d548078845 100644 --- a/apps/workflows/views.py +++ b/apps/workflows/views.py @@ -25,7 +25,9 @@ from .permissions import (PERMISSION_WORKFLOW_SETUP_VIEW, PERMISSION_WORKFLOW_SETUP_CREATE, PERMISSION_WORKFLOW_SETUP_EDIT, PERMISSION_WORKFLOW_SETUP_DELETE, PERMISSION_STATE_SETUP_VIEW, PERMISSION_STATE_SETUP_CREATE, PERMISSION_STATE_SETUP_EDIT, - PERMISSION_STATE_SETUP_DELETE) + PERMISSION_STATE_SETUP_DELETE, PERMISSION_TRANSITION_SETUP_VIEW, + PERMISSION_TRANSITION_SETUP_CREATE, PERMISSION_TRANSITION_SETUP_EDIT, + PERMISSION_TRANSITION_SETUP_DELETE) logger = logging.getLogger(__name__) @@ -294,11 +296,6 @@ def setup_state_list(request): 'object_list': State.objects.all(), 'title': _(u'states'), 'hide_link': True, - #'list_object_variable_name': 'source', - #'source_type': source_type, - #'extra_columns': [ - # {'name': _(u'Initial state'), 'attribute': encapsulate(lambda workflow: workflow.initial_state or _(u'None'))}, - #], } return render_to_response('generic_list.html', context, @@ -400,7 +397,7 @@ def setup_state_delete(request, state_pk=None, state_pk_list=None): # Transitions def setup_transition_list(request): - Permission.objects.check_permissions(request.user, [PERMISSION_WORKFLOW_SETUP_VIEW]) + Permission.objects.check_permissions(request.user, [PERMISSION_TRANSITION_SETUP_VIEW]) context = { 'object_list': Transition.objects.all(), @@ -417,7 +414,7 @@ def setup_transition_list(request): def setup_transition_create(request): - Permission.objects.check_permissions(request.user, [PERMISSION_WORKFLOW_SETUP_CREATE]) + Permission.objects.check_permissions(request.user, [PERMISSION_TRANSITION_SETUP_CREATE]) redirect_url = reverse('setup_transition_list') if request.method == 'POST': @@ -437,7 +434,7 @@ def setup_transition_create(request): def setup_transition_edit(request, transition_pk): - Permission.objects.check_permissions(request.user, [PERMISSION_WORKFLOW_SETUP_EDIT]) + Permission.objects.check_permissions(request.user, [PERMISSION_TRANSITION_SETUP_EDIT]) transition = get_object_or_404(Transition, pk=transition_pk) if request.method == 'POST': @@ -458,3 +455,57 @@ def setup_transition_edit(request, transition_pk): ], }, context_instance=RequestContext(request)) + + +def setup_transition_delete(request, transition_pk=None, transition_pk_list=None): + post_action_redirect = None + + if transition_pk: + transitions = [get_object_or_404(Transition, pk=transition_pk)] + post_action_redirect = reverse('setup_transition_list') + elif transition_pk_list: + transitions = [get_object_or_404(Transition, pk=transition_pk) for transition_pk in transition_pk_list.split(',')] + else: + messages.error(request, _(u'Must provide at least one transition.')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + + try: + Permission.objects.check_permissions(request.user, [PERMISSION_TRANSITION_SETUP_DELETE]) + except PermissionDenied: + transitions = AccessEntry.objects.filter_objects_by_access(PERMISSION_TRANSITION_SETUP_DELETE, request.user, transitions) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + for transition in transitions: + try: + transition.delete() + messages.success(request, _(u'Transitions "%s" deleted successfully.') % transition) + except Exception, e: + messages.error(request, _(u'Error deleting transition "%(transition)s": %(error)s') % { + 'transition': transition, 'error': e + }) + + return HttpResponseRedirect(next) + + context = { + 'object_name': _(u'transition'), + 'delete_view': True, + 'previous': previous, + 'next': next, + 'form_icon': u'transmit_delete.png', + 'navigation_object_list': [ + {'object': 'transition', 'name': _(u'transition')}, + ], + } + if len(transitions) == 1: + context['transition'] = transitions[0] + context['title'] = _(u'Are you sure you wish to delete the transition: %s?') % ', '.join([unicode(d) for d in transitions]) + context['message'] = _('Will be removed from all documents.') + elif len(transitions) > 1: + context['title'] = _(u'Are you sure you wish to delete the transitions: %s?') % ', '.join([unicode(d) for d in transitions]) + context['message'] = _('Will be removed from all documents.') + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request))