diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 9e638a5c66..c750866566 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -20,8 +20,8 @@ from .conf.settings import ZOOM_MIN_LEVEL from .conf import settings as document_settings from .events import (HISTORY_DOCUMENT_CREATED, HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) -from .links import (document_list, document_list_recent, document_create_multiple, - document_create_siblings, document_view_simple, document_view_advanced, +from .links import (document_list, document_list_recent, + document_view_simple, document_view_advanced, document_delete, document_multiple_delete, document_edit, document_preview, document_download, document_multiple_download, document_version_download, document_find_duplicates, document_find_all_duplicates, document_update_page_count, @@ -62,13 +62,13 @@ register_links(['setup_document_type_metadata', 'document_type_filename_delete', register_links([DocumentTypeFilename, 'document_type_filename_list', 'document_type_filename_create'], [document_type_filename_create], menu_name='sidebar') # Register document links -register_links(Document, [document_view_simple, document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_create_siblings]) +register_links(Document, [document_view_simple, document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations]) register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_node_view', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent', 'tag_tagged_item_list'], [document_multiple_clear_transformations, document_multiple_delete, document_multiple_download]) # Document Version links register_links(DocumentVersion, [document_version_revert, document_version_download]) -secondary_menu_links = [document_list_recent, document_list, document_create_multiple] +secondary_menu_links = [document_list_recent, document_list] register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'staging_file_delete'], secondary_menu_links, menu_name='secondary_menu') register_links(Document, secondary_menu_links, menu_name='secondary_menu') diff --git a/apps/documents/links.py b/apps/documents/links.py index bd0a3464fe..1ba3691061 100644 --- a/apps/documents/links.py +++ b/apps/documents/links.py @@ -38,8 +38,6 @@ def is_current_version(context): document_list = {'text': _(u'all documents'), 'view': 'document_list', 'famfam': 'page'} document_list_recent = {'text': _(u'recent documents'), 'view': 'document_list_recent', 'famfam': 'page'} -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']} -document_create_siblings = {'text': _(u'clone metadata'), 'view': 'document_create_siblings', 'args': 'object.id', 'famfam': 'page_copy', 'permissions': [PERMISSION_DOCUMENT_CREATE]} document_view_simple = {'text': _(u'details'), 'view': 'document_view_simple', 'args': 'object.id', 'famfam': 'page', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_view_advanced = {'text': _(u'properties'), 'view': 'document_view_advanced', 'args': 'object.id', 'famfam': 'page_gear', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_delete = {'text': _(u'delete'), 'view': 'document_delete', 'args': 'object.id', 'famfam': 'page_delete', 'permissions': [PERMISSION_DOCUMENT_DELETE]} diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 0303438fdd..e70bba4bfb 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -8,7 +8,6 @@ from .conf.settings import (PREVIEW_SIZE, PRINT_SIZE, THUMBNAIL_SIZE, urlpatterns = patterns('documents.views', url(r'^list/$', 'document_list', (), 'document_list'), url(r'^list/recent/$', 'document_list_recent', (), 'document_list_recent'), - url(r'^create/from/local/multiple/$', 'document_create', (), 'document_create_multiple'), url(r'^(?P\d+)/view/$', 'document_view', (), 'document_view_simple'), url(r'^(?P\d+)/view/advanced/$', 'document_view', {'advanced': True}, 'document_view_advanced'), @@ -30,7 +29,6 @@ urlpatterns = patterns('documents.views', url(r'^(?P\d+)/download/$', 'document_download', (), 'document_download'), url(r'^multiple/download/$', 'document_multiple_download', (), 'document_multiple_download'), - url(r'^(?P\d+)/create/siblings/$', 'document_create_siblings', (), 'document_create_siblings'), url(r'^(?P\d+)/find_duplicates/$', 'document_find_duplicates', (), 'document_find_duplicates'), url(r'^(?P\d+)/clear_transformations/$', 'document_clear_transformations', (), 'document_clear_transformations'), diff --git a/apps/documents/views.py b/apps/documents/views.py index f162352bc1..f6d54d5a4a 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1,37 +1,38 @@ from __future__ import absolute_import -import urlparse import copy import logging +import urlparse -from django.utils.translation import ugettext_lazy as _ +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, HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext -from django.contrib import messages -from django.views.generic.list_detail import object_list -from django.core.urlresolvers import reverse from django.utils.http import urlencode -from django.core.exceptions import PermissionDenied -from django.conf import settings +from django.utils.translation import ugettext_lazy as _ +from django.views.generic.list_detail import object_list import sendfile from acls.models import AccessEntry from common.compressed_files import CompressedFile -from common.utils import (pretty_size, parse_range, urlquote, - return_diff, encapsulate) from common.literals import (PAGE_SIZE_DIMENSIONS, PAGE_ORIENTATION_PORTRAIT, PAGE_ORIENTATION_LANDSCAPE) +from common.utils import (pretty_size, parse_range, urlquote, + return_diff, encapsulate) from common.widgets import two_state_template from common.conf.settings import DEFAULT_PAPER_SIZE from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_PAGE_NUMBER, DEFAULT_FILE_FORMAT_MIMETYPE) from converter.office_converter import OfficeConverter +# TODO: do not import from document_indexing, update document_indexing to +# catch Document model after save and after delete signals from document_indexing.api import update_indexes, delete_indexes from filetransfers.api import serve_file from history.api import create_history -from metadata.forms import MetadataFormSet, MetadataSelectionForm from navigation.utils import resolve_to_name from permissions.models import Permission @@ -57,7 +58,6 @@ from .permissions import (PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW) -from .wizards import DocumentCreateWizard logger = logging.getLogger(__name__) @@ -88,30 +88,6 @@ def document_list(request, object_list=None, title=None, extra_context=None): 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) - - -def document_create_siblings(request, document_id): - Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) - - document = get_object_or_404(Document, pk=document_id) - query_dict = {} - for pk, metadata in enumerate(document.documentmetadata_set.all()): - query_dict['metadata%s_id' % pk] = metadata.metadata_type_id - query_dict['metadata%s_value' % pk] = metadata.value - - if document.document_type_id: - query_dict['document_type_id'] = document.document_type_id - - url = reverse('upload_interactive') - return HttpResponseRedirect('%s?%s' % (url, urlencode(query_dict))) - - def document_view(request, document_id, advanced=False): document = get_object_or_404(Document, pk=document_id) diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 4596235c3a..d58f9a4536 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -2,12 +2,12 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ -from navigation.api import (register_links, - register_model_list_columns) from common.utils import encapsulate -from project_setup.api import register_setup -from documents.permissions import (PERMISSION_DOCUMENT_NEW_VERSION, +from documents.models import Document +from documents.permissions import (PERMISSION_DOCUMENT_NEW_VERSION, PERMISSION_DOCUMENT_CREATE) +from navigation.api import register_links, register_model_list_columns +from project_setup.api import register_setup from .staging import StagingFile from .models import (WebForm, StagingFolder, SourceTransformation, @@ -17,6 +17,9 @@ 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']} +document_create_siblings = {'text': _(u'clone metadata'), 'view': 'document_create_siblings', 'args': 'object.id', 'famfam': 'page_copy', 'permissions': [PERMISSION_DOCUMENT_CREATE]} + 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,6 @@ 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_siblings]) diff --git a/apps/sources/urls.py b/apps/sources/urls.py index 9b8f6ad59f..d7791f3dfc 100644 --- a/apps/sources/urls.py +++ b/apps/sources/urls.py @@ -16,7 +16,7 @@ urlpatterns = patterns('sources.views', url(r'^upload/document/(?P\d+)/version/interactive/(?P\w+)/(?P\d+)/$', 'upload_interactive', (), 'upload_version'), url(r'^upload/document/(?P\d+)/version/interactive/$', 'upload_interactive', (), 'upload_version'), - #Setup views + # Setup views url(r'^setup/interactive/%s/list/$' % SOURCE_CHOICE_WEB_FORM, 'setup_source_list', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_list'), url(r'^setup/interactive/%s/list/$' % SOURCE_CHOICE_STAGING, 'setup_source_list', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_list'), @@ -31,4 +31,9 @@ urlpatterns = patterns('sources.views', url(r'^setup/interactive/(?P\w+)/(?P\d+)/transformation/create/$', 'setup_source_transformation_create', (), 'setup_source_transformation_create'), url(r'^setup/interactive/source/transformation/(?P\d+)/edit/$', 'setup_source_transformation_edit', (), 'setup_source_transformation_edit'), url(r'^setup/interactive/source/transformation/(?P\d+)/delete/$', 'setup_source_transformation_delete', (), 'setup_source_transformation_delete'), + + # Document create views + + url(r'^create/from/local/multiple/$', 'document_create', (), 'document_create_multiple'), + url(r'^(?P\d+)/create/siblings/$', 'document_create_siblings', (), 'document_create_siblings'), ) diff --git a/apps/sources/views.py b/apps/sources/views.py index d5a41deea1..62bc09c490 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -1,41 +1,67 @@ from __future__ import absolute_import +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 render_to_response, get_object_or_404 from django.template import RequestContext -from django.contrib import messages -from django.core.urlresolvers import reverse -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import ugettext +from django.utils.http import urlencode from django.utils.safestring import mark_safe -from django.conf import settings -from django.core.exceptions import PermissionDenied +from django.utils.translation import ugettext +from django.utils.translation import ugettext_lazy as _ -from documents.permissions import (PERMISSION_DOCUMENT_CREATE, - PERMISSION_DOCUMENT_NEW_VERSION) -from documents.models import DocumentType, Document +import sendfile + +from acls.models import AccessEntry +from common.utils import encapsulate from documents.conf.settings import THUMBNAIL_SIZE from documents.exceptions import NewDocumentVersionNotAllowed +from documents.forms import DocumentTypeSelectForm +from documents.models import DocumentType, Document +from documents.permissions import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_NEW_VERSION) from metadata.api import decode_metadata_from_url, metadata_repr_as_list +from metadata.forms import MetadataSelectionForm, MetadataFormSet from permissions.models import Permission -from common.utils import encapsulate -import sendfile -from acls.models import AccessEntry -from sources.models import (WebForm, StagingFolder, SourceTransformation, - WatchFolder) -from sources.literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, - SOURCE_CHOICE_WATCH) -from sources.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 (SourceTransformationForm, SourceTransformationForm_create, + WebFormSetupForm, StagingFolderSetupForm, StagingDocumentForm, WebFormForm, WatchFolderSetupForm) -from sources.forms import WebFormSetupForm, StagingFolderSetupForm -from sources.forms import SourceTransformationForm, SourceTransformationForm_create +from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, + SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICE_Y, SOURCE_UNCOMPRESS_CHOICE_ASK) +from .models import (WebForm, StagingFolder, SourceTransformation, + WatchFolder) from .permissions import (PERMISSION_SOURCES_SETUP_VIEW, PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE, PERMISSION_SOURCES_SETUP_CREATE) +from .staging import create_staging_file_class +from .wizards import DocumentCreateWizard + + +def document_create(request): + Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) + + wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataSelectionForm, MetadataFormSet]) + + return wizard(request) + + +def document_create_siblings(request, document_id): + Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) + + document = get_object_or_404(Document, pk=document_id) + query_dict = {} + for pk, metadata in enumerate(document.documentmetadata_set.all()): + query_dict['metadata%s_id' % pk] = metadata.metadata_type_id + query_dict['metadata%s_value' % pk] = metadata.value + + if document.document_type_id: + query_dict['document_type_id'] = document.document_type_id + + url = reverse('upload_interactive') + return HttpResponseRedirect('%s?%s' % (url, urlencode(query_dict))) def return_function(obj): diff --git a/apps/documents/wizards.py b/apps/sources/wizards.py similarity index 95% rename from apps/documents/wizards.py rename to apps/sources/wizards.py index 816a77b608..c71d204bd5 100644 --- a/apps/documents/wizards.py +++ b/apps/sources/wizards.py @@ -1,16 +1,15 @@ +# DEPRECATION: This module is scheduled to be delete once the update to Django 1.6.X is complete 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 django.utils.translation import ugettext_lazy as _ from common.wizard import BoundFormWizard - +from documents.forms import DocumentTypeSelectForm from metadata.forms import MetadataSelectionForm, MetadataFormSet -from .forms import DocumentTypeSelectForm - class DocumentCreateWizard(BoundFormWizard): def generate_metadata_initial_values(self):