diff --git a/apps/tags/__init__.py b/apps/tags/__init__.py index 978f433702..60b201b77a 100644 --- a/apps/tags/__init__.py +++ b/apps/tags/__init__.py @@ -47,7 +47,7 @@ register_links(Tag, [tag_tagged_item_list, tag_edit, tag_delete]) register_multi_item_links(['tag_list'], [tag_multiple_delete]) -register_links(['tag_list', 'tag_remove', 'tag_delete', 'tag_edit', 'tag_tagged_item_list', 'tag_multiple_delete'], [tag_list], menu_name='secondary_menu') +register_links(['tag_list', 'tag_delete', 'tag_edit', 'tag_tagged_item_list', 'tag_multiple_delete'], [tag_list], menu_name='secondary_menu') register_sidebar_template(['document_tags'], 'tags_sidebar_template.html') diff --git a/apps/tags/views.py b/apps/tags/views.py index 1b8f3a0eb0..a175e26e8e 100644 --- a/apps/tags/views.py +++ b/apps/tags/views.py @@ -18,17 +18,50 @@ from tags import tag_document_remove as tag_document_remove_link from tags import tag_tagged_item_list as tag_tagged_item_list_link -def tag_remove(request, tag_id, document_id): +def tag_remove(request, document_id, tag_id=None, tag_id_list=None): check_permissions(request.user, [PERMISSION_TAG_REMOVE]) - tag = get_object_or_404(Tag, pk=tag_id) + post_action_redirect = None + + if tag_id: + tags = [get_object_or_404(Tag, pk=tag_id)] + elif tag_id_list: + tags = [get_object_or_404(Tag, pk=tag_id) for tag_id in tag_id_list.split(',')] + else: + messages.error(request, _(u'Must provide at least one tag.')) + 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))) - document.tags.remove(tag) - messages.success(request, _(u'Tag "%s" removed successfully.') % tag) + 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', '/'))) - return HttpResponseRedirect(previous) + if request.method == 'POST': + for tag in tags: + try: + document.tags.remove(tag) + messages.success(request, _(u'Tag "%s" removed successfully.') % tag) + except Exception, e: + messages.error(request, _(u'Error deleting tag "%(tag)s": %(error)s') % { + 'tag': tag, 'error': e + }) + + return HttpResponseRedirect(next) + + context = { + 'previous': previous, + 'next': next, + 'form_icon': u'tag_blue_delete.png', + 'object': document, + } + + if len(tags) == 1: + context['title'] = _(u'Are you sure you wish to remove the tag: %s?') % ', '.join([unicode(d) for d in tags]) + elif len(tags) > 1: + context['title'] = _(u'Are you sure you wish to remove the tags: %s?') % ', '.join([unicode(d) for d in tags]) + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request)) def tag_add(request, document_id):