diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 24ef2a7c59..35007412d7 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -38,6 +38,7 @@ register_permission(PERMISSION_DOCUMENT_TRANSFORM) register_permission(PERMISSION_DOCUMENT_TOOLS) # Document type permissions +set_namespace_title('documents_setup', _(u'Documents setup')) register_permission(PERMISSION_DOCUMENT_TYPE_EDIT) register_permission(PERMISSION_DOCUMENT_TYPE_DELETE) register_permission(PERMISSION_DOCUMENT_TYPE_CREATE) @@ -129,9 +130,12 @@ register_links(['document_type_filename_edit', 'document_type_filename_delete'], # Register document links register_links(Document, [document_edit, document_print, document_delete, document_download, document_find_duplicates, document_clear_transformations, document_create_siblings]) -register_multi_item_links(['folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) +register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) -register_links(['document_list_recent', 'document_list', 'document_create', 'document_create_multiple', 'upload_interactive', 'document_find_duplicates'], [document_list_recent, document_list, document_create_multiple], menu_name='secondary_menu') +secondary_menu_links = [document_list_recent, document_list, document_create_multiple] + +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='sidebar') # Document page links register_links(DocumentPage, [ diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 6963280e2f..650c677148 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -198,12 +198,7 @@ class DocumentForm_edit(DocumentForm): """ class Meta: model = Document - exclude = ('file', 'document_type', 'tags', 'expand') - - - def __init__(self, *args, **kwargs): - super(DocumentForm_edit, self).__init__(*args, **kwargs) - self.fields.pop('expand') + exclude = ('file', 'document_type', 'tags') class DocumentPropertiesForm(DetailForm): diff --git a/apps/documents/literals.py b/apps/documents/literals.py index b2c0f023c2..cbb3b919d9 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -14,9 +14,9 @@ PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_down PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform documents')} PERMISSION_DOCUMENT_TOOLS = {'namespace': 'documents', 'name': 'document_tools', 'label': _(u'Execute document modifying tools')} -PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents', 'name': 'document_type_edit', 'label': _(u'Edit document types')} -PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents', 'name': 'document_type_delete', 'label': _(u'Delete document types')} -PERMISSION_DOCUMENT_TYPE_CREATE = {'namespace': 'documents', 'name': 'document_type_create', 'label': _(u'Create document types')} +PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents_setup', 'name': 'document_type_edit', 'label': _(u'Edit document types')} +PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents_setup', 'name': 'document_type_delete', 'label': _(u'Delete document types')} +PERMISSION_DOCUMENT_TYPE_CREATE = {'namespace': 'documents_setup', 'name': 'document_type_create', 'label': _(u'Create document types')} HISTORY_DOCUMENT_CREATED = { 'namespace': 'documents', 'name': 'document_created', diff --git a/apps/documents/views.py b/apps/documents/views.py index 817164c693..4a3247c576 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -375,58 +375,6 @@ def document_download(request, document_id): messages.error(request, e) return HttpResponseRedirect(request.META['HTTP_REFERER']) -''' -def staging_file_preview(request, source, staging_file_id): - check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) - StagingFile = create_staging_file_class(request, source) - try: - output_file, errors = StagingFile.get(staging_file_id).preview() - if errors and (request.user.is_staff or request.user.is_superuser): - for error in errors: - messages.warning(request, _(u'Staging file transformation error: %(error)s') % { - 'error': error - }) - - except UnkownConvertError, e: - if request.user.is_staff or request.user.is_superuser: - messages.error(request, e) - - output_file = os.path.join(settings.MEDIA_ROOT, u'images', PICTURE_ERROR_MEDIUM) - except UnknownFormat: - output_file = os.path.join(settings.MEDIA_ROOT, u'images', PICTURE_UNKNOWN_MEDIUM) - except Exception, e: - if request.user.is_staff or request.user.is_superuser: - messages.error(request, e) - output_file = os.path.join(settings.MEDIA_ROOT, u'images', PICTURE_ERROR_MEDIUM) - finally: - return sendfile.sendfile(request, output_file) - - -def staging_file_delete(request, source, staging_file_id): - check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) - StagingFile = create_staging_file_class(request, source) - - staging_file = StagingFile.get(staging_file_id) - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None))) - previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) - - if request.method == 'POST': - try: - staging_file.delete() - messages.success(request, _(u'Staging file delete successfully.')) - except Exception, e: - messages.error(request, e) - return HttpResponseRedirect(next) - - return render_to_response('generic_confirm.html', { - 'source': source, - 'delete_view': True, - 'object': staging_file, - 'next': next, - 'previous': previous, - 'form_icon': u'drive_delete.png', - }, context_instance=RequestContext(request)) -''' def document_page_transformation_list(request, document_page_id): check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM]) @@ -519,10 +467,14 @@ def document_find_duplicates(request, document_id): check_permissions(request.user, [PERMISSION_DOCUMENT_VIEW]) document = get_object_or_404(Document, pk=document_id) - return _find_duplicate_list(request, [document], include_source=True, confirmation=False) + extra_context = { + 'title': _(u'duplicates of: %s') % document, + 'object': document, + } + return _find_duplicate_list(request, [document], include_source=True, confirmation=False, extra_context=extra_context) -def _find_duplicate_list(request, source_document_list=Document.objects.all(), include_source=False, confirmation=True): +def _find_duplicate_list(request, source_document_list=Document.objects.all(), include_source=False, confirmation=True, extra_context=None): previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None))) if confirmation and request.method != 'POST': @@ -542,10 +494,18 @@ def _find_duplicate_list(request, source_document_list=Document.objects.all(), i if include_source and results: duplicated.append(document.pk) - return render_to_response('generic_list.html', { + context = { 'object_list': Document.objects.filter(pk__in=duplicated), 'title': _(u'duplicated documents'), - }, context_instance=RequestContext(request)) + 'hide_links': True, + 'multi_select_as_buttons': True, + } + + if extra_context: + context.update(extra_context) + + return render_to_response('generic_list.html', context, + context_instance=RequestContext(request)) def document_find_all_duplicates(request): diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py index bf7629d985..1001dc1977 100644 --- a/apps/metadata/__init__.py +++ b/apps/metadata/__init__.py @@ -62,7 +62,7 @@ setup_document_type_metadata = {'text': _(u'default metadata'), 'view': 'setup_d #register_links(Document, [metadata_add, metadata_edit, metadata_remove]) register_links(['metadata_add', 'metadata_edit', 'metadata_remove', 'metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar') register_links(Document, [metadata_view], menu_name='form_header')#, metadata_edit, metadata_remove]) -register_multi_item_links(['folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) +register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete]) register_links(['setup_metadata_type_delete', 'setup_metadata_type_edit', 'setup_metadata_type_list', 'setup_metadata_type_create'], [setup_metadata_type_create], menu_name='sidebar') diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index d4c73b781b..2d9034bb16 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -123,6 +123,13 @@ def resolve_links(context, links, current_view, current_path, parsed_query_strin new_link['disabled'] = link['conditional_disable'](context) else: new_link['disabled'] = False + + if current_view in link.get('children_views', []): + new_link['active'] = True + + for child_url_regex in link.get('children_url_regex', []): + if re.compile(child_url_regex).match(current_path.lstrip('/')): + new_link['active'] = True context_links.append(new_link) return context_links diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 000e52a0ec..075f7fad31 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -8,7 +8,7 @@ from sources.staging import StagingFile from sources.models import WebForm, StagingFolder staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'zoom'} -staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete'} +staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete', 'keep_query': True} setup_web_form_list = {'text': _(u'web forms'), 'view': 'setup_web_form_list', 'famfam': 'application_form'} setup_web_form_edit = {'text': _(u'edit'), 'view': 'setup_web_form_edit', 'args': 'object.pk', 'famfam': 'application_form_edit'} @@ -20,7 +20,7 @@ setup_staging_folder_edit = {'text': _(u'edit'), 'view': 'setup_staging_folder_e setup_staging_folder_delete = {'text': _(u'delete'), 'view': 'setup_staging_folder_delete', 'args': 'object.pk', 'famfam': 'folder_delete'} setup_staging_folder_create = {'text': _(u'add new'), 'view': 'setup_staging_folder_create', 'famfam': 'folder_add'} -source_list = {'text': _(u'Document sources'), 'view': 'setup_web_form_list', 'famfam': 'page_add'} +source_list = {'text': _(u'Document sources'), 'view': 'setup_web_form_list', 'famfam': 'page_add', 'children_url_regex': [r'sources/setup']} register_links(StagingFile, [staging_file_preview, staging_file_delete]) diff --git a/apps/sources/views.py b/apps/sources/views.py index 90468349cf..3c8940cd24 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -27,24 +27,18 @@ from sources.models import WebForm, StagingFolder from sources.models import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING from sources.models import SOURCE_UNCOMPRESS_CHOICE_Y, \ SOURCE_UNCOMPRESS_CHOICE_ASK -from sources.staging import create_staging_file_class +from sources.staging import create_staging_file_class, StagingFile from sources.forms import StagingDocumentForm, WebFormForm from sources.forms import WebFormSetupForm, StagingFolderSetupForm def return_function(obj): return lambda context: context['source'].source_type == obj.source_type and context['source'].pk == obj.pk - -def upload_interactive(request, source_type=None, source_id=None): - check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) - - subtemplates_list = [] +def get_active_tab_links(): tab_links = [] - context = {} - web_forms = WebForm.objects.filter(enabled=True) for web_form in web_forms: tab_links.append({ @@ -66,8 +60,24 @@ def upload_interactive(request, source_type=None, source_id=None): 'keep_query': True, 'conditional_highlight': return_function(staging_folder), }) + + return { + 'tab_links': tab_links, + 'web_forms': web_forms, + 'staging_folders': staging_folders + } + - if web_forms.count() == 0 and staging_folders.count() == 0: +def upload_interactive(request, source_type=None, source_id=None): + check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE]) + + subtemplates_list = [] + + context = {} + + results = get_active_tab_links() + + if results['web_forms'].count() == 0 and results['staging_folders'].count() == 0: subtemplates_list.append( { 'name': 'generic_subtemplate.html', @@ -89,12 +99,12 @@ def upload_interactive(request, source_type=None, source_id=None): subtemplates_list = [] if source_type is None and source_id is None: - if web_forms.count(): - source_type = web_forms[0].source_type - source_id = web_forms[0].pk - elif staging_folders.count(): - source_type = staging_folders[0].source_type - source_id = staging_folders[0].pk + if results['web_forms'].count(): + source_type = results['web_forms'][0].source_type + source_id = results['web_forms'][0].pk + elif results['staging_folders'].count(): + source_type = results['staging_folders'][0].source_type + source_id = results['staging_folders'][0].pk if source_type and source_id: if source_type == SOURCE_CHOICE_WEB_FORM: @@ -210,7 +220,7 @@ def upload_interactive(request, source_type=None, source_id=None): 'side_bar': True, } }], - 'temporary_navigation_links': {'form_header': {'upload_interactive': {'links': tab_links}}} + 'temporary_navigation_links': {'form_header': {'upload_interactive': {'links': results['tab_links']}}}, }) return render_to_response('generic_form.html', context, context_instance=RequestContext(request)) @@ -303,6 +313,8 @@ def staging_file_delete(request, source_type, source_id, staging_file_id): messages.error(request, e) return HttpResponseRedirect(next) + results = get_active_tab_links() + return render_to_response('generic_confirm.html', { 'source': staging_folder, 'delete_view': True, @@ -310,6 +322,7 @@ def staging_file_delete(request, source_type, source_id, staging_file_id): 'next': next, 'previous': previous, 'form_icon': u'delete.png', + 'temporary_navigation_links': {'form_header': {'staging_file_delete': {'links': results['tab_links']}}}, }, context_instance=RequestContext(request)) @@ -326,8 +339,7 @@ def setup_source_list(request, source_type): context = { 'object_list': cls.objects.all(), 'title': title, - #'multi_select_as_buttons': True, - #'hide_links': True, + 'hide_link': True, } return render_to_response('generic_list.html', context, @@ -402,8 +414,7 @@ def setup_source_delete(request, source_type, source_id): 'object': source, 'object_name': _(u'source'), 'delete_view': True, - 'previous': next, - 'next': next, + 'previous': reverse(redirect_view), 'form_icon': form_icon, }