Detect when a selected document or documents do not have any metadata, display a proper message and return user to the last previous view. Issue #144

This commit is contained in:
Roberto Rosario
2015-01-16 02:06:24 -04:00
parent d7546c8fb7
commit 6c854116b5
+25 -13
View File
@@ -4,11 +4,12 @@ from django.conf import settings
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import (get_list_or_404, get_object_or_404,
render_to_response)
from django.template import RequestContext
from django.utils.http import urlencode
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext_lazy as _, ungettext
from acls.models import AccessEntry
from documents.models import Document, DocumentType
@@ -36,15 +37,9 @@ from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
def metadata_edit(request, document_id=None, document_id_list=None):
if document_id:
documents = [get_object_or_404(Document, pk=document_id)]
if documents[0].metadata.count() == 0:
messages.warning(request, _(u'The selected document doesn\'t have any metadata.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
elif document_id_list:
documents = [get_object_or_404(Document.objects.select_related('document_type'), pk=document_id) for document_id in document_id_list.split(',')]
if len(set([document.document_type.pk for document in documents])) > 1:
messages.error(request, _(u'Only select documents of the same type.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
document_id_list = unicode(document_id)
documents = Document.objects.select_related('metadata').filter(pk__in=document_id_list.split(','))
try:
Permission.objects.check_permissions(request.user, [PERMISSION_METADATA_DOCUMENT_EDIT])
@@ -52,7 +47,23 @@ def metadata_edit(request, document_id=None, document_id_list=None):
documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_METADATA_DOCUMENT_EDIT, request.user, documents)
if not documents:
messages.error(request, _(u'Must provide at least one document.'))
if document_id:
raise Http404
else:
messages.error(request, _(u'Must provide at least one document.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
if len(set([document.document_type.pk for document in documents])) > 1:
messages.error(request, _(u'Only select documents of the same type.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
if set(documents.values_list('metadata__value' ,flat=True)) == set([None]):
message = ungettext(
u'The selected document doesn\'t have any metadata.',
u'The selected documents doesn\'t have any metadata.',
len(documents)
)
messages.warning(request, message)
return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse('main:home')))
post_action_redirect = reverse('documents:document_list_recent')
@@ -111,6 +122,7 @@ def metadata_edit(request, document_id=None, document_id_list=None):
'form': formset,
'next': next,
}
if len(documents) == 1:
context['object'] = documents[0]
context['title'] = _(u'Edit metadata for document: %s') % ', '.join([unicode(d) for d in documents])