From 6a9db45cf10d1442ae5077669c8077141bf90e6d Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 18 Mar 2011 15:01:02 -0400 Subject: [PATCH] Added multi document delete --- apps/common/views.py | 1 + apps/documents/__init__.py | 3 +- apps/documents/urls.py | 1 + apps/documents/views.py | 57 ++++++++++++++++++++++++++------------ 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/apps/common/views.py b/apps/common/views.py index d9dde52e54..46c6c09711 100644 --- a/apps/common/views.py +++ b/apps/common/views.py @@ -10,6 +10,7 @@ def password_change_done(request): def multi_object_action_view(request): + print 'request', request.GET action = request.GET.get('action', None) id_list = u','.join([key[3:] for key in request.GET.keys() if key.startswith('pk_')]) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index fcb2889b33..1e57cb99c6 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -42,6 +42,7 @@ document_create_sibling = {'text':_('upload new document using same metadata'), document_view = {'text':_('details (advanced)'), 'view':'document_view', 'args':'object.id', 'famfam':'page', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_VIEW]}} document_view_simple = {'text':_('details (simple)'), 'view':'document_view_simple', 'args':'object.id', 'famfam':'page', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_VIEW]}} document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_DELETE]}} +document_multiple_delete = {'text':_('delete'), 'view':'document_multiple_delete', 'famfam':'page_delete', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_DELETE]}} document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_PROPERTIES_EDIT]}} document_edit_metadata = {'text':_('edit metadata'), 'view':'document_edit_metadata', 'args':'object.id', 'famfam':'page_edit', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_METADATA_EDIT]}} document_preview = {'text':_('preview'), 'class':'fancybox', 'view':'document_preview', 'args':'object.id', 'famfam':'magnifier', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_VIEW]}} @@ -63,7 +64,7 @@ staging_file_delete = {'text':_('delete'), 'view':'staging_file_delete', 'args': register_links(Document, [document_view_simple, document_view, document_edit, document_edit_metadata, document_delete, document_download, document_find_duplicates, document_clear_transformations], menu_name='sidebar') register_links(Document, [document_list, document_create, document_create_multiple, document_create_sibling], menu_name='sidebar') -register_multi_item_links(['document_list'], [document_multiple_clear_transformations]) +register_multi_item_links(['document_list'], [document_multiple_clear_transformations, document_multiple_delete]) if ENABLE_SINGLE_DOCUMENT_UPLOAD: register_links(['document_list', 'document_create', 'document_create_multiple', 'upload_document_with_type', 'upload_multiple_documents_with_type'], [document_list, document_create, document_create_multiple], menu_name='sidebar') diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 3361505a18..6bbf94370c 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -21,6 +21,7 @@ urlpatterns = patterns('documents.views', url(r'^document/(?P\d+)/$', 'document_view', (), 'document_view'), url(r'^document/(?P\d+)/simple/$', 'document_view_simple', (), 'document_view_simple'), url(r'^document/(?P\d+)/delete/$', 'document_delete', (), 'document_delete'), + url(r'^document/multiple/delete/$', 'document_multiple_delete', (), 'document_multiple_delete'), url(r'^document/(?P\d+)/edit/$', 'document_edit', (), 'document_edit'), url(r'^document/(?P\d+)/edit/metadata/$', 'document_edit_metadata', (), 'document_edit_metadata'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 522395e2cd..40fea6a53e 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -343,31 +343,54 @@ def document_view(request, document_id): 'sidebar_subtemplates_dict':sidebar_groups, }, context_instance=RequestContext(request)) - -def document_delete(request, document_id): + +def document_delete(request, document_id=None, document_id_list=None): check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_DELETE]) + + if document_id: + documents = [get_object_or_404(Document, pk=document_id)] + post_redirect = reverse('document_view', args=[documents[0].pk]) + elif document_id_list: + documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] + post_redirect = None + else: + messages.error(request, _(u'Must provide at least one document.')) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) - document = get_object_or_404(Document, pk=document_id) - - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', post_redirect or reverse('document_list')))) + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_redirect or reverse('document_list')))) if request.method == 'POST': - try: - document_delete_fs_links(document) - document.delete() - messages.success(request, _(u'Document deleted successfully.')) - return HttpResponseRedirect(reverse('document_list')) - except Exception, e: - messages.error(request, _(u'Document delete error: %s') % e) - return HttpResponseRedirect(previous) + for document in documents: + try: + document_delete_fs_links(document) + document.delete() + messages.success(request, _(u'Document: %s deleted successfully.') % document) + except Exception, e: + messages.error(request, _(u'Document: %s delete error: %s') % (document, e)) + + return HttpResponseRedirect(next) - return render_to_response('generic_confirm.html', { - 'object':document, - 'delete_view':True, + context = { 'object_name':_(u'document'), + 'delete_view':True, 'previous':previous, - }, context_instance=RequestContext(request)) + 'next':next, + } + if len(documents) == 1: + context['object'] = documents[0] + context['title'] = _(u'Are you sure you with to delete the document: %s?') % ', '.join([unicode(d) for d in documents]) + elif len(documents) > 1: + context['title'] = _(u'Are you sure you with to delete the documents: %s?') % ', '.join([unicode(d) for d in documents]) + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request)) + + +def document_multiple_delete(request): + return document_delete(request, document_id_list=request.GET.get('id_list', [])) + def document_edit(request, document_id): check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_PROPERTIES_EDIT])