diff --git a/apps/trash/__init__.py b/apps/trash/__init__.py index 9c08d0af97..cfe4608c3c 100644 --- a/apps/trash/__init__.py +++ b/apps/trash/__init__.py @@ -8,13 +8,13 @@ from navigation.api import bind_links from project_tools.api import register_tool from .api import make_trashable -from .links import trash_can_list, trash_can_items, trash_can_item_restore +from .links import trash_can_list, trash_can_items, trash_can_item_restore, trash_can_item_delete from .models import TrashCan, TrashCanItem register_tool(trash_can_list) -bind_links(['trash_can_list', TrashCan, TrashCanItem], trash_can_list, menu_name='secondary_menu') +bind_links(['trash_can_list', TrashCan], trash_can_list, menu_name='secondary_menu') bind_links([TrashCan], trash_can_items) -bind_links([TrashCanItem], trash_can_item_restore) +bind_links([TrashCanItem], [trash_can_item_restore, trash_can_item_delete]) @transaction.commit_on_success def create_trash_cans(): diff --git a/apps/trash/links.py b/apps/trash/links.py index 2aeaeb7098..109bb069cc 100644 --- a/apps/trash/links.py +++ b/apps/trash/links.py @@ -6,5 +6,6 @@ from navigation.api import Link trash_can_list = Link(text=_(u'trash cans'), view='trash_can_list', sprite='bin_closed', icon='bin_closed.png') -trash_can_items = Link(text=_(u'items'), view='trash_can_items', args='object.pk', sprite='bin') -trash_can_item_restore = Link(text=_(u'restore'), view='trash_can_item_restore', args='object.pk', sprite='bin_empty') +trash_can_items = Link(text=_(u'items'), view='trash_can_items', args='trash_can.pk', sprite='bin') +trash_can_item_restore = Link(text=_(u'restore'), view='trash_can_item_restore', args='trash_can_item.pk', sprite='bin_empty') +trash_can_item_delete = Link(text=_(u'delete'), view='trash_can_item_delete', args='trash_can_item.pk', sprite='delete') diff --git a/apps/trash/models.py b/apps/trash/models.py index a76ac32d6a..18acba0078 100644 --- a/apps/trash/models.py +++ b/apps/trash/models.py @@ -10,7 +10,6 @@ from common.managers import CustomizableQuerySetManager class TrashCanManager(models.Manager): def get_or_create(self, *args, **kwargs): - #job_queue_labels[kwargs.get('name')] = kwargs.get('defaults', {}).get('label') instance, created = super(TrashCanManager, self).get_or_create(*args, **kwargs) instance.label = kwargs.get('defaults', {}).get('label') instance.save() @@ -85,6 +84,10 @@ class TrashCanItem(models.Model): def restore(self): self.delete() + + def purge(self): + self.content_object.delete(trash=False) + self.delete() def save(self, *args, **kwargs): if not self.pk: diff --git a/apps/trash/urls.py b/apps/trash/urls.py index ba8deaf2b8..58f7965ef2 100644 --- a/apps/trash/urls.py +++ b/apps/trash/urls.py @@ -4,4 +4,5 @@ urlpatterns = patterns('trash.views', url(r'^list/$', 'trash_can_list', (), 'trash_can_list'), url(r'^trash_can/(?P\d+)/items/$', 'trash_can_items', (), 'trash_can_items'), url(r'^trash_can/item/(?P\d+)/restore/$', 'trash_can_item_restore', (), 'trash_can_item_restore'), + url(r'^trash_can/item/(?P\d+)/delete/$', 'trash_can_item_delete', (), 'trash_can_item_delete'), ) diff --git a/apps/trash/views.py b/apps/trash/views.py index 4f7b63df75..34efb7f22f 100644 --- a/apps/trash/views.py +++ b/apps/trash/views.py @@ -1,6 +1,8 @@ from __future__ import absolute_import from django.contrib import messages +from django.core.urlresolvers import reverse +from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -18,6 +20,7 @@ def trash_can_list(request): context = { 'object_list': TrashCan.objects.all(), + 'list_object_variable_name': 'trash_can', 'title': _(u'trash cans'), 'extra_columns': [ { @@ -47,7 +50,9 @@ def trash_can_items(request, trash_can_pk): context = { 'object_list': trash_can.items.all(), - 'object': trash_can, + 'trash_can': trash_can, + 'list_object_variable_name': 'trash_can_item', + 'navigation_object_name': 'trash_can', 'title': _(u'items in trash can: %s') % trash_can, 'extra_columns': [ { @@ -65,7 +70,6 @@ def trash_can_items(request, trash_can_pk): def trash_can_item_restore(request, trash_can_item_pk): #Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None))) previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) trash_can_item = get_object_or_404(TrashCanItem, pk=trash_can_item_pk) @@ -74,16 +78,50 @@ def trash_can_item_restore(request, trash_can_item_pk): try: trash_can_item.restore() except Exception, exc: - messages.warning(request, _(u'Error restoring item; %s') % exc) + messages.warning(request, _(u'Error restoring trash can item; %s') % exc) return HttpResponseRedirect(previous) else: - messages.success(request, _(u'Item restored successfully.')) - return HttpResponseRedirect(next) + messages.success(request, _(u'Trash can item "%s" restored successfully.') % trash_can_item) + return HttpResponseRedirect(reverse('trash_can_items', args=[trash_can_item.trash_can.pk])) return render_to_response('generic_confirm.html', { - 'object': trash_can_item, + 'trash_can': trash_can_item.trash_can, + 'trash_can_item': trash_can_item, + 'navigation_object_list': [ + {'object': 'trash_can', 'name': _(u'trash can')}, + {'object': 'trash_can_item', 'name': _(u'trash can item')}, + ], 'title': _(u'Are you sure you wish to restore trash can item: %s?') % trash_can_item, - 'next': next, 'previous': previous, 'form_icon': 'bin_empty.png', }, context_instance=RequestContext(request)) + + +def trash_can_item_delete(request, trash_can_item_pk): + #Permission.objects.check_permissions(request.user, [PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) + + trash_can_item = get_object_or_404(TrashCanItem, pk=trash_can_item_pk) + + if request.method == 'POST': + try: + trash_can_item.purge() + except Exception, exc: + messages.warning(request, _(u'Error deleting trash can item; %s') % exc) + return HttpResponseRedirect(previous) + else: + messages.success(request, _(u'Trash can item deleted successfully.') % trash_can_item) + return HttpResponseRedirect(reverse('trash_can_items', args=[trash_can_item.trash_can.pk])) + + return render_to_response('generic_confirm.html', { + 'trash_can': trash_can_item.trash_can, + 'trash_can_item': trash_can_item, + 'navigation_object_list': [ + {'object': 'trash_can', 'name': _(u'trash can')}, + {'object': 'trash_can_item', 'name': _(u'trash can item')}, + ], + 'title': _(u'Are you sure you wish to delete trash can item: %s?') % trash_can_item, + 'previous': previous, + 'form_icon': 'delete.png', + }, context_instance=RequestContext(request))