Implemented multi item actions for document tags

This commit is contained in:
Roberto Rosario
2011-07-02 00:00:21 -04:00
parent 9823a59eea
commit 329b84b5ef
3 changed files with 57 additions and 48 deletions

View File

@@ -28,6 +28,7 @@ register_permission(PERMISSION_TAG_VIEW)
tag_list = {'text': _(u'tag list'), 'view': 'tag_list', 'famfam': 'tag_blue'}
tag_document_remove = {'text': _(u'remove'), 'view': 'tag_remove', 'args': ['object.id', 'document.id'], 'famfam': 'tag_blue_delete', 'permissions': [PERMISSION_TAG_REMOVE]}
tag_document_remove_multiple = {'text': _(u'remove'), 'view': 'tag_multiple_remove', 'args': 'document.id', 'famfam': 'tag_blue_delete', 'permissions': [PERMISSION_TAG_REMOVE]}
tag_document_list = {'text': _(u'tags'), 'view': 'document_tags', 'args': 'object.pk', 'famfam': 'tag_blue', 'permissions': [PERMISSION_TAG_REMOVE]}
tag_delete = {'text': _(u'delete'), 'view': 'tag_delete', 'args': 'object.id', 'famfam': 'tag_blue_delete', 'permissions': [PERMISSION_TAG_DELETE]}
tag_edit = {'text': _(u'edit'), 'view': 'tag_edit', 'args': 'object.id', 'famfam': 'tag_blue_edit', 'permissions': [PERMISSION_TAG_EDIT]}
@@ -56,3 +57,5 @@ register_sidebar_template(['document_tags'], 'tags_sidebar_template.html')
register_top_menu('tags', link={'text': _(u'tags'), 'view': 'tag_list', 'famfam': 'tag_blue'}, children_path_regex=[r'^tags/[^d]/'])
register_links(Document, [tag_document_list], menu_name='form_header')
register_multi_item_links(['document_tags'], [tag_document_remove_multiple])

View File

@@ -8,6 +8,7 @@ urlpatterns = patterns('tags.views',
url(r'^multiple/delete/$', 'tag_multiple_delete', (), 'tag_multiple_delete'),
url(r'^(?P<tag_id>\d+)/remove_from_document/(?P<document_id>\d+)/$', 'tag_remove', (), 'tag_remove'),
url(r'^multiple/remove_from_document/(?P<document_id>\d+)/$', 'tag_multiple_remove', (), 'tag_multiple_remove'),
url(r'^document/(?P<document_id>\d+)/add/$', 'tag_add', (), 'tag_add'),
url(r'^document/(?P<document_id>\d+)/list/$', 'document_tags', (), 'document_tags'),
)

View File

@@ -15,56 +15,9 @@ from tags.models import TagProperties
from tags import PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, \
PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, \
PERMISSION_TAG_VIEW
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, document_id, tag_id=None, tag_id_list=None):
check_permissions(request.user, [PERMISSION_TAG_REMOVE])
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', '/')))
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 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):
document = get_object_or_404(Document, pk=document_id)
@@ -222,9 +175,61 @@ def document_tags(request, document_id):
'title': _(u'tags for: %s') % document,
'object_list': document.tags.all(),
'hide_link': True,
'navigation_object_links': [tag_tagged_item_list_link, tag_document_remove_link],
'navigation_object_links': [tag_tagged_item_list_link],
'object': document,
'document': document,
'disable_auto_focus': True,
'multi_select_as_buttons': True,
},
context_instance=RequestContext(request))
def tag_remove(request, document_id, tag_id=None, tag_id_list=None):
check_permissions(request.user, [PERMISSION_TAG_REMOVE])
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', '/')))
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 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_multiple_remove(request, document_id):
return tag_remove(request, document_id=document_id, tag_id_list=request.GET.get('id_list', []))