Move the document upload wizard to the sources app

This commit is contained in:
Roberto Rosario
2012-07-26 05:30:39 -04:00
parent ac65a6db76
commit e2e7e4bb49
7 changed files with 28 additions and 25 deletions

View File

@@ -8,6 +8,7 @@ from common.utils import encapsulate
from project_setup.api import register_setup
from documents.permissions import (PERMISSION_DOCUMENT_NEW_VERSION,
PERMISSION_DOCUMENT_CREATE)
from documents.models import Document
from .staging import StagingFile
from .models import (WebForm, StagingFolder, SourceTransformation,
@@ -17,6 +18,8 @@ from .permissions import (PERMISSION_SOURCES_SETUP_VIEW,
PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_CREATE)
document_create_multiple = {'text': _(u'upload new documents'), 'view': 'document_create_multiple', 'famfam': 'page_add', 'permissions': [PERMISSION_DOCUMENT_CREATE], 'children_view_regex': [r'upload_interactive']}
staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'zoom', 'permissions': [PERMISSION_DOCUMENT_NEW_VERSION, PERMISSION_DOCUMENT_CREATE]}
staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete', 'keep_query': True, 'permissions': [PERMISSION_DOCUMENT_NEW_VERSION, PERMISSION_DOCUMENT_CREATE]}
@@ -72,3 +75,5 @@ register_model_list_columns(StagingFile, [
])
register_setup(setup_sources)
register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], [document_create_multiple], menu_name='secondary_menu')
register_links(Document, [document_create_multiple], menu_name='secondary_menu')

View File

@@ -6,6 +6,8 @@ from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
SOURCE_CHOICE_WATCH)
urlpatterns = patterns('sources.views',
url(r'^create/from/local/multiple/$', 'document_create', (), 'document_create_multiple'),
url(r'^staging_file/type/(?P<source_type>\w+)/(?P<source_id>\d+)/(?P<staging_file_id>\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'),
url(r'^staging_file/type/(?P<source_type>\w+)/(?P<source_id>\d+)/(?P<staging_file_id>\w+)/delete/$', 'staging_file_delete', (), 'staging_file_delete'),
url(r'^staging_file/type/staging_folder/(?P<source_id>\d+)/(?P<staging_file_id>\w+)/thumbnail/$', 'staging_file_thumbnail', (), 'staging_file_thumbnail'),

View File

@@ -16,26 +16,29 @@ from documents.permissions import (PERMISSION_DOCUMENT_CREATE,
from documents.models import DocumentType, Document
from documents.conf.settings import THUMBNAIL_SIZE
from documents.exceptions import NewDocumentVersionNotAllowed
from documents.forms import DocumentTypeSelectForm
from metadata.forms import MetadataFormSet, MetadataSelectionForm
from metadata.api import decode_metadata_from_url, metadata_repr_as_list
from permissions.models import Permission
from common.utils import encapsulate
import sendfile
from acls.models import AccessEntry
from sources.models import (WebForm, StagingFolder, SourceTransformation,
from .models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder)
from sources.literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
SOURCE_CHOICE_WATCH)
from sources.literals import (SOURCE_UNCOMPRESS_CHOICE_Y,
from .literals import (SOURCE_UNCOMPRESS_CHOICE_Y,
SOURCE_UNCOMPRESS_CHOICE_ASK)
from sources.staging import create_staging_file_class
from sources.forms import (StagingDocumentForm, WebFormForm,
from .forms import (StagingDocumentForm, WebFormForm,
WatchFolderSetupForm)
from sources.forms import WebFormSetupForm, StagingFolderSetupForm
from sources.forms import SourceTransformationForm, SourceTransformationForm_create
from .forms import WebFormSetupForm, StagingFolderSetupForm
from .forms import SourceTransformationForm, SourceTransformationForm_create
from .permissions import (PERMISSION_SOURCES_SETUP_VIEW,
PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_CREATE)
from .wizards import DocumentCreateWizard
def return_function(obj):
@@ -706,3 +709,11 @@ def setup_source_transformation_create(request, source_type, source_id):
'navigation_object_name': 'source',
'title': _(u'Create new transformation for source: %s') % source,
}, context_instance=RequestContext(request))
def document_create(request):
Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE])
wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataSelectionForm, MetadataFormSet])
return wizard(request)

81
apps/sources/wizards.py Normal file
View File

@@ -0,0 +1,81 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.utils.http import urlencode
from common.wizard import BoundFormWizard
from metadata.forms import MetadataSelectionForm, MetadataFormSet
from documents.forms import DocumentTypeSelectForm
class DocumentCreateWizard(BoundFormWizard):
def generate_metadata_initial_values(self):
initial = []
for metadata_type in self.metadata_types:
initial.append({
'metadata_type': metadata_type,
})
for metadata_set in self.metadata_sets:
for metadata_set_item in metadata_set.metadatasetitem_set.all():
data = {
'metadata_type': metadata_set_item.metadata_type,
}
if data not in initial:
initial.append(data)
return initial
def __init__(self, *args, **kwargs):
self.query_dict = {}
self.step_titles = kwargs.pop('step_titles', [
_(u'step 1 of 3: Document type'),
_(u'step 2 of 3: Metadata selection'),
_(u'step 3 of 3: Document metadata'),
])
super(DocumentCreateWizard, self).__init__(*args, **kwargs)
def render_template(self, request, form, previous_fields, step, context=None):
context = {
'step_title': self.extra_context['step_titles'][step],
'submit_label': _(u'Next step'),
'submit_icon_famfam': 'arrow_right',
}
return super(DocumentCreateWizard, self).render_template(
request, form, previous_fields, step, context
)
def parse_params(self, request, *args, **kwargs):
self.extra_context = {'step_titles': self.step_titles}
def process_step(self, request, form, step):
if isinstance(form, DocumentTypeSelectForm):
self.document_type = form.cleaned_data['document_type']
self.initial = {1: {'document_type': self.document_type}}
if isinstance(form, MetadataSelectionForm):
self.metadata_sets = form.cleaned_data['metadata_sets']
self.metadata_types = form.cleaned_data['metadata_types']
initial_data = self.generate_metadata_initial_values()
self.initial = {2: initial_data}
if not initial_data:
# If there is no metadata selected, finish wizard
self.form_list = [DocumentTypeSelectForm, MetadataSelectionForm]
if isinstance(form, MetadataFormSet):
for identifier, metadata in enumerate(form.cleaned_data):
self.query_dict['metadata%s_id' % identifier] = metadata['id']
self.query_dict['metadata%s_value' % identifier] = metadata['value']
def get_template(self, step):
return 'generic_wizard.html'
def done(self, request, form_list):
if self.document_type:
self.query_dict['document_type_id'] = self.document_type.pk
url = '?'.join([reverse('upload_interactive'), urlencode(self.query_dict, doseq=True)])
return HttpResponseRedirect(url)