Successfully merged staging file upload and local file upload views and forms
This commit is contained in:
@@ -12,14 +12,14 @@ document_view = {'text':_('details'), 'view':'document_view', 'args':'object.id'
|
|||||||
document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'}
|
document_delete = {'text':_('delete'), 'view':'document_delete', 'args':'object.id', 'famfam':'page_delete'}
|
||||||
document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit'}
|
document_edit = {'text':_('edit'), 'view':'document_edit', 'args':'object.id', 'famfam':'page_edit'}
|
||||||
|
|
||||||
document_create_from_staging = {'text':_('upload file'), 'view':'document_create_from_staging', 'args':{'file_id':'object.id', 'document_type_id': 'document_type_id'}, 'famfam':'page_add'}
|
#document_create_from_staging = {'text':_('upload file'), 'view':'document_create_from_staging', 'args':{'file_id':'object.id', 'document_type_id': 'document_type_id'}, 'famfam':'page_add'}
|
||||||
|
|
||||||
|
|
||||||
register_links(Document, [document_view, document_edit, document_delete])
|
register_links(Document, [document_view, document_edit, document_delete])
|
||||||
register_links(Document, [document_list, document_create, document_create_multiple], menu_name='sidebar')
|
register_links(Document, [document_list, document_create, document_create_multiple], menu_name='sidebar')
|
||||||
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')
|
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')
|
||||||
|
|
||||||
register_links(StagingFile, [document_create_from_staging])
|
#register_links(StagingFile, [document_create_from_staging])
|
||||||
|
|
||||||
|
|
||||||
register_menu([
|
register_menu([
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ from django.http import HttpResponseRedirect
|
|||||||
from django.utils.http import urlencode
|
from django.utils.http import urlencode
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
|
from staging import StagingFile
|
||||||
|
|
||||||
from common.wizard import BoundFormWizard
|
from common.wizard import BoundFormWizard
|
||||||
from common.utils import urlquote
|
from common.utils import urlquote
|
||||||
from common.forms import DetailForm
|
from common.forms import DetailForm
|
||||||
@@ -14,7 +16,7 @@ from models import Document, DocumentType, DocumentTypeMetadataType
|
|||||||
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
from documents.conf.settings import AVAILABLE_FUNCTIONS
|
||||||
from documents.conf.settings import AVAILABLE_MODELS
|
from documents.conf.settings import AVAILABLE_MODELS
|
||||||
|
|
||||||
|
#TODO: Turn this into a base form and let others inherit
|
||||||
class DocumentForm(forms.ModelForm):
|
class DocumentForm(forms.ModelForm):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(DocumentForm, self).__init__(*args, **kwargs)
|
super(DocumentForm, self).__init__(*args, **kwargs)
|
||||||
@@ -48,6 +50,22 @@ class DocumentForm_edit(DocumentForm):
|
|||||||
new_filename = forms.CharField(label=_(u'New document filename'), required=False)
|
new_filename = forms.CharField(label=_(u'New document filename'), required=False)
|
||||||
|
|
||||||
|
|
||||||
|
class StagingDocumentForm(forms.Form):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(StagingDocumentForm, self).__init__(*args, **kwargs)
|
||||||
|
self.fields['staging_file_id'].choices=[(staging_file.id, staging_file) for staging_file in StagingFile.get_all()]
|
||||||
|
if 'initial' in kwargs:
|
||||||
|
if 'document_type' in kwargs['initial']:
|
||||||
|
filenames_qs = kwargs['initial']['document_type'].documenttypefilename_set.filter(enabled=True)
|
||||||
|
if filenames_qs.count() > 0:
|
||||||
|
self.fields['document_type_available_filenames'] = forms.ModelChoiceField(
|
||||||
|
queryset=filenames_qs,
|
||||||
|
required=False,
|
||||||
|
label=_(u'Document type available filenames'))
|
||||||
|
|
||||||
|
staging_file_id = forms.ChoiceField()
|
||||||
|
|
||||||
|
|
||||||
class DocumentTypeSelectForm(forms.Form):
|
class DocumentTypeSelectForm(forms.Form):
|
||||||
document_type = forms.ModelChoiceField(queryset=DocumentType.objects.all())
|
document_type = forms.ModelChoiceField(queryset=DocumentType.objects.all())
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class Document(models.Model):
|
|||||||
Inherit this model to customise document metadata, see BasicDocument for an example.
|
Inherit this model to customise document metadata, see BasicDocument for an example.
|
||||||
"""
|
"""
|
||||||
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
|
||||||
file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND())
|
file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file'))
|
||||||
uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False)
|
uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False)
|
||||||
file_mimetype = models.CharField(max_length=64, default='', editable=False)
|
file_mimetype = models.CharField(max_length=64, default='', editable=False)
|
||||||
file_filename = models.CharField(max_length=64, default='', editable=False)
|
file_filename = models.CharField(max_length=64, default='', editable=False)
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ urlpatterns = patterns('documents.views',
|
|||||||
url(r'^document/(?P<document_id>\d+)/$', 'document_view', (), 'document_view'),
|
url(r'^document/(?P<document_id>\d+)/$', 'document_view', (), 'document_view'),
|
||||||
url(r'^document/(?P<document_id>\d+)/delete/$', 'document_delete', (), 'document_delete'),
|
url(r'^document/(?P<document_id>\d+)/delete/$', 'document_delete', (), 'document_delete'),
|
||||||
url(r'^document/(?P<document_id>\d+)/edit/$', 'document_edit', (), 'document_edit'),
|
url(r'^document/(?P<document_id>\d+)/edit/$', 'document_edit', (), 'document_edit'),
|
||||||
url(r'^document/type/(?P<document_type_id>\d+)/upload/from/staging/(?P<file_id>\d+)/single/$', 'document_create_from_staging', {'multiple':True}, 'document_create_from_staging'),
|
#url(r'^document/type/(?P<document_type_id>\d+)/upload/from/staging/(?P<file_id>\d+)/single/$', 'document_create_from_staging', {'multiple':True}, 'document_create_from_staging'),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -13,13 +13,14 @@ from django.forms.formsets import formset_factory
|
|||||||
|
|
||||||
from models import Document, DocumentMetadata, DocumentType, MetadataType
|
from models import Document, DocumentMetadata, DocumentType, MetadataType
|
||||||
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
||||||
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view
|
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \
|
||||||
|
StagingDocumentForm
|
||||||
|
|
||||||
from staging import StagingFile
|
from staging import StagingFile
|
||||||
|
|
||||||
from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD
|
from documents.conf.settings import DELETE_STAGING_FILE_AFTER_UPLOAD
|
||||||
from documents.conf.settings import USE_STAGING_DIRECTORY
|
from documents.conf.settings import USE_STAGING_DIRECTORY
|
||||||
|
DELETE_STAGING_FILE_AFTER_UPLOAD = True
|
||||||
|
|
||||||
def document_list(request):
|
def document_list(request):
|
||||||
return object_list(
|
return object_list(
|
||||||
@@ -68,33 +69,74 @@ def _save_metadata(url_dict, document):
|
|||||||
|
|
||||||
def upload_document_with_type(request, document_type_id, multiple=True):
|
def upload_document_with_type(request, document_type_id, multiple=True):
|
||||||
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
||||||
|
local_form = DocumentForm(prefix='local', initial={'document_type':document_type})
|
||||||
|
if USE_STAGING_DIRECTORY:
|
||||||
|
staging_form = StagingDocumentForm(prefix='staging',
|
||||||
|
initial={'document_type':document_type})
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = DocumentForm(request.POST, request.FILES, initial={'document_type':document_type})
|
if 'local-submit' in request.POST.keys():
|
||||||
if form.is_valid():
|
local_form = DocumentForm(request.POST, request.FILES,
|
||||||
instance = form.save()
|
prefix='local', initial={'document_type':document_type})
|
||||||
if 'document_type_available_filenames' in form.cleaned_data:
|
if local_form.is_valid():
|
||||||
if form.cleaned_data['document_type_available_filenames']:
|
instance = local_form.save()
|
||||||
instance.file_filename = form.cleaned_data['document_type_available_filenames'].filename
|
if 'document_type_available_filenames' in local_form.cleaned_data:
|
||||||
instance.save()
|
if local_form.cleaned_data['document_type_available_filenames']:
|
||||||
|
instance.file_filename = local_form.cleaned_data['document_type_available_filenames'].filename
|
||||||
_save_metadata(request.GET, instance)
|
instance.save()
|
||||||
messages.success(request, _(u'Document uploaded successfully.'))
|
|
||||||
try:
|
_save_metadata(request.GET, instance)
|
||||||
instance.create_fs_links()
|
messages.success(request, _(u'Document uploaded successfully.'))
|
||||||
except Exception, e:
|
try:
|
||||||
messages.error(request, e)
|
instance.create_fs_links()
|
||||||
|
except Exception, e:
|
||||||
|
messages.error(request, e)
|
||||||
|
|
||||||
|
if multiple:
|
||||||
|
return HttpResponseRedirect(request.get_full_path())
|
||||||
|
else:
|
||||||
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
|
elif 'staging-submit' in request.POST.keys() and USE_STAGING_DIRECTORY:
|
||||||
|
staging_form = StagingDocumentForm(request.POST, request.FILES,
|
||||||
|
prefix='staging', initial={'document_type':document_type})
|
||||||
|
if staging_form.is_valid():
|
||||||
|
staging_file_id = staging_form.cleaned_data['staging_file_id']
|
||||||
|
|
||||||
|
staging_file = StagingFile.get(int(staging_file_id))
|
||||||
|
try:
|
||||||
|
document = Document(file=staging_file.upload(), document_type=document_type)
|
||||||
|
document.save()
|
||||||
|
except Exception, e:
|
||||||
|
messages.error(request, e)
|
||||||
|
else:
|
||||||
|
_save_metadata(request.GET, document)
|
||||||
|
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
|
||||||
|
try:
|
||||||
|
document.create_fs_links()
|
||||||
|
except Exception, e:
|
||||||
|
messages.error(request, e)
|
||||||
|
|
||||||
|
if DELETE_STAGING_FILE_AFTER_UPLOAD:
|
||||||
|
try:
|
||||||
|
staging_file.delete()
|
||||||
|
messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename)
|
||||||
|
except Exception, e:
|
||||||
|
messages.error(request, e)
|
||||||
|
|
||||||
if multiple:
|
if multiple:
|
||||||
return HttpResponseRedirect(request.get_full_path())
|
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
else:
|
|
||||||
form = DocumentForm(initial={'document_type':document_type})
|
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
'form':form,
|
|
||||||
'title':_(u'upload a local document'),
|
|
||||||
'document_type_id':document_type_id,
|
'document_type_id':document_type_id,
|
||||||
|
'form_list':[
|
||||||
|
{
|
||||||
|
'form':local_form,
|
||||||
|
'title':_(u'upload a local document')
|
||||||
|
},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
if USE_STAGING_DIRECTORY:
|
if USE_STAGING_DIRECTORY:
|
||||||
@@ -110,9 +152,16 @@ def upload_document_with_type(request, document_type_id, multiple=True):
|
|||||||
'name':'generic_list_subtemplate.html',
|
'name':'generic_list_subtemplate.html',
|
||||||
'title':_(u'files in staging'),
|
'title':_(u'files in staging'),
|
||||||
'object_list':filelist,
|
'object_list':filelist,
|
||||||
|
'hide_link':True,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
context['form_list'].append(
|
||||||
|
{
|
||||||
|
'form':staging_form,
|
||||||
|
'title':_(u'upload a document from staging'),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
return render_to_response('generic_form.html', context,
|
return render_to_response('generic_form.html', context,
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
@@ -178,13 +227,15 @@ def document_edit(request, document_id):
|
|||||||
|
|
||||||
document.save()
|
document.save()
|
||||||
|
|
||||||
|
messages.success(request, _(u'Document edited successfully.'))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
document.create_fs_links()
|
document.create_fs_links()
|
||||||
|
messages.success(request, _(u'Document filesystem links updated successfully.'))
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
messages.error(request, e)
|
messages.error(request, e)
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
|
|
||||||
messages.success(request, _(u'Document edited and filesystem links updated.'))
|
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
else:
|
else:
|
||||||
form = DocumentForm_edit(instance=document, initial={
|
form = DocumentForm_edit(instance=document, initial={
|
||||||
@@ -196,7 +247,7 @@ def document_edit(request, document_id):
|
|||||||
|
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
'''
|
||||||
def document_create_from_staging(request, file_id, document_type_id, multiple=True):
|
def document_create_from_staging(request, file_id, document_type_id, multiple=True):
|
||||||
if USE_STAGING_DIRECTORY:
|
if USE_STAGING_DIRECTORY:
|
||||||
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
document_type = get_object_or_404(DocumentType, pk=document_type_id)
|
||||||
@@ -230,3 +281,4 @@ def document_create_from_staging(request, file_id, document_type_id, multiple=Tr
|
|||||||
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
return HttpResponseRedirect(request.META['HTTP_REFERER'])
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(reverse('document_list'))
|
return HttpResponseRedirect(reverse('document_list'))
|
||||||
|
'''
|
||||||
|
|||||||
Reference in New Issue
Block a user