Added support for editing the metadata of multiple documents at the same time
This commit is contained in:
@@ -44,6 +44,7 @@ document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.
|
||||
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_multiple_edit_metadata = {'text':_('edit metadata'), 'view':'document_multiple_edit_metadata', '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]}}
|
||||
document_download = {'text':_('download'), 'view':'document_download', 'args':'object.id', 'famfam':'page_save', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_DOWNLOAD]}}
|
||||
document_find_duplicates = {'text':_('find duplicates'), 'view':'document_find_duplicates', 'args':'object.id', 'famfam':'page_refresh', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_VIEW]}}
|
||||
@@ -65,7 +66,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, document_multiple_delete])
|
||||
register_multi_item_links(['document_list'], [document_multiple_clear_transformations, document_multiple_edit_metadata, 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')
|
||||
|
||||
@@ -24,6 +24,7 @@ urlpatterns = patterns('documents.views',
|
||||
url(r'^document/multiple/delete/$', 'document_multiple_delete', (), 'document_multiple_delete'),
|
||||
url(r'^document/(?P<document_id>\d+)/edit/$', 'document_edit', (), 'document_edit'),
|
||||
url(r'^document/(?P<document_id>\d+)/edit/metadata/$', 'document_edit_metadata', (), 'document_edit_metadata'),
|
||||
url(r'^document/multiple/edit/metadata/$', 'document_multiple_edit_metadata', (), 'document_multiple_edit_metadata'),
|
||||
|
||||
url(r'^document/(?P<document_id>\d+)/display/preview/$', 'get_document_image', {'size':PREVIEW_SIZE}, 'document_preview'),
|
||||
url(r'^document/(?P<document_id>\d+)/display/preview/multipage/$', 'get_document_image', {'size':MULTIPAGE_PREVIEW_SIZE}, 'document_preview_multipage'),
|
||||
|
||||
@@ -441,61 +441,86 @@ def document_edit(request, document_id):
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def document_edit_metadata(request, document_id):
|
||||
def document_edit_metadata(request, document_id=None, document_id_list=None):
|
||||
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_METADATA_EDIT])
|
||||
|
||||
document = get_object_or_404(Document, pk=document_id)
|
||||
if document_id:
|
||||
documents = [get_object_or_404(Document, pk=document_id)]
|
||||
elif document_id_list:
|
||||
documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')]
|
||||
if len(set([document.document_type for document in documents])) > 1:
|
||||
messages.error(request, _(u'All documents must be from the same type.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
|
||||
else:
|
||||
messages.error(request, _(u'Must provide at least one document.'))
|
||||
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
|
||||
|
||||
metadata={}
|
||||
for document in documents:
|
||||
for item in DocumentTypeMetadataType.objects.filter(document_type=document.document_type):
|
||||
value = document.documentmetadata_set.get(metadata_type=item.metadata_type).value if document.documentmetadata_set.filter(metadata_type=item.metadata_type) else u''
|
||||
if item.metadata_type in metadata:
|
||||
if value not in metadata[item.metadata_type]:
|
||||
metadata[item.metadata_type].append(value)
|
||||
else:
|
||||
metadata[item.metadata_type] = [value]
|
||||
|
||||
initial=[]
|
||||
for item in DocumentTypeMetadataType.objects.filter(document_type=document.document_type):
|
||||
for key, value in metadata.items():
|
||||
initial.append({
|
||||
'metadata_type':item.metadata_type,
|
||||
'metadata_type':key,
|
||||
'document_type':document.document_type,
|
||||
'value':document.documentmetadata_set.get(metadata_type=item.metadata_type).value if document.documentmetadata_set.filter(metadata_type=item.metadata_type) else None
|
||||
'value': u', '.join(value)
|
||||
})
|
||||
#for metadata in document.documentmetadata_set.all():
|
||||
# initial.append({
|
||||
# 'metadata_type':metadata.metadata_type,
|
||||
# 'document_type':document.document_type,
|
||||
# 'value':metadata.value,
|
||||
# })
|
||||
|
||||
formset = MetadataFormSet(initial=initial)
|
||||
if request.method == 'POST':
|
||||
formset = MetadataFormSet(request.POST)
|
||||
if formset.is_valid():
|
||||
save_metadata_list(formset.cleaned_data, document)
|
||||
try:
|
||||
document_delete_fs_links(document)
|
||||
except Exception, e:
|
||||
messages.error(request, e)
|
||||
return HttpResponseRedirect(reverse('document_list'))
|
||||
|
||||
messages.success(request, _(u'Metadata for document %s edited successfully.') % document)
|
||||
|
||||
try:
|
||||
warnings = document_create_fs_links(document)
|
||||
|
||||
if request.user.is_staff or request.user.is_superuser:
|
||||
for warning in warnings:
|
||||
messages.warning(request, warning)
|
||||
|
||||
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
||||
except Exception, e:
|
||||
messages.error(request, e)
|
||||
return HttpResponseRedirect(document.get_absolute_url())
|
||||
for document in documents:
|
||||
save_metadata_list(formset.cleaned_data, document)
|
||||
try:
|
||||
document_delete_fs_links(document)
|
||||
except Exception, e:
|
||||
messages.error(request, _(u'Error deleting filesystem links for document: %(document)s; %(error)s') % {
|
||||
'document':document, 'error':e})
|
||||
|
||||
messages.success(request, _(u'Metadata for document %s edited successfully.') % document)
|
||||
|
||||
return HttpResponseRedirect(document.get_absolute_url())
|
||||
try:
|
||||
warnings = document_create_fs_links(document)
|
||||
|
||||
if request.user.is_staff or request.user.is_superuser:
|
||||
for warning in warnings:
|
||||
messages.warning(request, warning)
|
||||
|
||||
messages.success(request, _(u'Filesystem links updated successfully for document: %s.') % document)
|
||||
except Exception, e:
|
||||
messages.error(request, _('Error creating filesystem links for document: %(document)s; %(error)s') % {
|
||||
'document':document, 'error':e})
|
||||
|
||||
if len(documents) == 1:
|
||||
return HttpResponseRedirect(document.get_absolute_url())
|
||||
elif len(documents) > 1:
|
||||
return HttpResponseRedirect(reverse('document_list'))
|
||||
|
||||
|
||||
return render_to_response('generic_form.html', {
|
||||
context = {
|
||||
'form_display_mode_table':True,
|
||||
'form':formset,
|
||||
'object':document,
|
||||
}
|
||||
if len(documents) == 1:
|
||||
context['object'] = documents[0]
|
||||
context['title'] = _(u'Edit metadata for document: %s?') % ', '.join([unicode(d) for d in documents])
|
||||
elif len(documents) > 1:
|
||||
context['title'] = _(u'Edit metadata for documents: %s?') % ', '.join([unicode(d) for d in documents])
|
||||
|
||||
|
||||
return render_to_response('generic_form.html', context,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
}, context_instance=RequestContext(request))
|
||||
def document_multiple_edit_metadata(request):
|
||||
return document_edit_metadata(request, document_id_list=request.GET.get('id_list', []))
|
||||
|
||||
|
||||
def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_DEFAULT):
|
||||
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user