diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index 1e339448b1..16d3b00716 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -133,7 +133,7 @@ def resolve_links(context, links, current_view, current_path, parsed_query_strin for cls in link.get('children_classes', []): obj, object_name = get_navigation_object(context) - if type(obj) == cls: + if type(obj) == cls or obj == cls: new_link['active'] = True context_links.append(new_link) diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 952addc609..a65f6aabab 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -11,19 +11,14 @@ staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'v 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', 'children_classes': [WebForm]} -setup_web_form_edit = {'text': _(u'edit'), 'view': 'setup_web_form_edit', 'args': 'source.pk', 'famfam': 'application_form_edit'} -setup_web_form_delete = {'text': _(u'delete'), 'view': 'setup_web_form_delete', 'args': 'source.pk', 'famfam': 'application_form_delete'} -setup_web_form_create = {'text': _(u'add new'), 'view': 'setup_web_form_create', 'famfam': 'application_form_add'} - -setup_web_form_transformation_list = {'text': _(u'transformations'), 'view': 'setup_web_form_transformation_list', 'args': 'source.pk', 'famfam': 'shape_move_front'} - setup_staging_folder_list = {'text': _(u'staging folders'), 'view': 'setup_staging_folder_list', 'famfam': 'folder_magnify', 'children_classes': [StagingFolder]} -setup_staging_folder_edit = {'text': _(u'edit'), 'view': 'setup_staging_folder_edit', 'args': 'source.pk', 'famfam': 'folder_edit'} -setup_staging_folder_delete = {'text': _(u'delete'), 'view': 'setup_staging_folder_delete', 'args': 'source.pk', 'famfam': 'folder_delete'} -setup_staging_folder_create = {'text': _(u'add new'), 'view': 'setup_staging_folder_create', 'famfam': 'folder_add'} -setup_staging_folder_transformation_list = {'text': _(u'transformations'), 'view': 'setup_staging_folder_transformation_list', 'args': 'source.pk', 'famfam': 'shape_move_front'} +setup_source_edit = {'text': _(u'edit'), 'view': 'setup_source_edit', 'args': ['source.source_type', 'source.pk'], 'famfam': 'application_form_edit'} +setup_source_delete = {'text': _(u'delete'), 'view': 'setup_source_delete', 'args': ['source.source_type', 'source.pk'], 'famfam': 'application_form_delete'} +setup_source_create = {'text': _(u'add new'), 'view': 'setup_source_create', 'args': 'source_type', 'famfam': 'application_form_add'} +setup_source_transformation_list = {'text': _(u'transformations'), 'view': 'setup_source_transformation_list', 'args': ['source.source_type', 'source.pk'], 'famfam': 'shape_move_front'} +setup_source_transformation_create = {'text': _(u'add transformation'), 'view': 'setup_source_transformation_create', 'args': ['source.source_type', 'source.pk'], 'famfam': 'shape_square_add'} setup_source_transformation_edit = {'text': _(u'edit'), 'view': 'setup_source_transformation_edit', 'args': 'transformation.pk', 'famfam': 'shape_square_edit'} setup_source_transformation_delete = {'text': _(u'delete'), 'view': 'setup_source_transformation_delete', 'args': 'transformation.pk', 'famfam': 'shape_square_delete'} @@ -33,14 +28,16 @@ register_links(StagingFile, [staging_file_preview, staging_file_delete]) register_links(SourceTransformation, [setup_source_transformation_edit, setup_source_transformation_delete]) -register_links(['setup_web_form_list', 'setup_web_form_create', 'setup_staging_folder_list', 'setup_staging_folder_create'], [setup_web_form_list, setup_staging_folder_list], menu_name='form_header') +register_links(['setup_web_form_list', 'setup_staging_folder_list', 'setup_source_create'], [setup_web_form_list, setup_staging_folder_list], menu_name='form_header') register_links(WebForm, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header') -register_links(WebForm, [setup_web_form_transformation_list, setup_web_form_edit, setup_web_form_delete]) -register_links(['setup_web_form_list', 'setup_web_form_edit', 'setup_web_form_delete', 'setup_web_form_create'], [setup_web_form_create], menu_name='sidebar') +register_links(WebForm, [setup_source_transformation_list, setup_source_edit, setup_source_delete]) + +register_links(['setup_web_form_list', 'setup_staging_folder_list', 'setup_source_edit', 'setup_source_delete', 'setup_source_create'], [setup_source_create], menu_name='sidebar') register_links(StagingFolder, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header') -register_links(StagingFolder, [setup_staging_folder_transformation_list, setup_staging_folder_edit, setup_staging_folder_delete]) -register_links(['setup_staging_folder_list', 'setup_staging_folder_edit', 'setup_staging_folder_delete', 'setup_staging_folder_create'], [setup_staging_folder_create], menu_name='sidebar') +register_links(StagingFolder, [setup_source_transformation_list, setup_source_edit, setup_source_delete]) -source_views = ['setup_web_form_list', 'setup_web_form_edit', 'setup_web_form_delete', 'setup_web_form_create', 'setup_staging_folder_list', 'setup_staging_folder_edit', 'setup_staging_folder_delete', 'setup_staging_folder_create', 'setup_web_form_transformation_list', 'setup_staging_folder_transformation_list', 'setup_source_transformation_edit', 'setup_source_transformation_delete'] +register_links(['setup_source_transformation_create', 'setup_source_transformation_edit', 'setup_source_transformation_delete', 'setup_source_transformation_list'], [setup_source_transformation_create], menu_name='sidebar') + +source_views = ['setup_web_form_list', 'setup_staging_folder_list', 'setup_source_edit', 'setup_source_delete', 'setup_source_create', 'setup_source_transformation_list', 'setup_source_transformation_edit', 'setup_source_transformation_delete', 'setup_source_transformation_create'] diff --git a/apps/sources/forms.py b/apps/sources/forms.py index d4eb81d1c0..1bc06a6871 100644 --- a/apps/sources/forms.py +++ b/apps/sources/forms.py @@ -95,3 +95,9 @@ class SourceTransformationForm(forms.ModelForm): super(SourceTransformationForm, self).__init__(*args, **kwargs) self.fields['content_type'].widget = forms.HiddenInput() self.fields['object_id'].widget = forms.HiddenInput() + + +class SourceTransformationForm_create(forms.ModelForm): + class Meta: + model = SourceTransformation + exclude = ('content_type', 'object_id') diff --git a/apps/sources/models.py b/apps/sources/models.py index 82598a290b..70eaf2d4e4 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -55,8 +55,13 @@ SOURCE_CHOICE_WEB_FORM = 'webform' SOURCE_CHOICE_STAGING = 'staging' SOURCE_CHOICES = ( - (SOURCE_CHOICE_WEB_FORM, _(u'Web form')), - (SOURCE_CHOICE_STAGING, _(u'Server staging folder')), + (SOURCE_CHOICE_WEB_FORM, _(u'web form')), + (SOURCE_CHOICE_STAGING, _(u'server staging folder')), +) + +SOURCE_CHOICES_PLURAL = ( + (SOURCE_CHOICE_WEB_FORM, _(u'web forms')), + (SOURCE_CHOICE_STAGING, _(u'server staging folders')), ) @@ -70,6 +75,17 @@ class BaseModel(models.Model): def __unicode__(self): return u'%s' % self.title + def fullname(self): + return u' '.join([self.class_fullname(), '"%s"' % self.title]) + + @classmethod + def class_fullname(cls): + return unicode(dict(SOURCE_CHOICES).get(cls.source_type)) + + @classmethod + def class_fullname_plural(cls): + return unicode(dict(SOURCE_CHOICES_PLURAL).get(cls.source_type)) + class Meta: ordering = ('title',) abstract = True diff --git a/apps/sources/urls.py b/apps/sources/urls.py index 664739b005..354ec22b0a 100644 --- a/apps/sources/urls.py +++ b/apps/sources/urls.py @@ -12,17 +12,16 @@ urlpatterns = patterns('sources.views', #Setup views url(r'^setup/interactive/webforms/list/$', 'setup_source_list', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_list'), - url(r'^setup/interactive/webforms/(?P\w+)/edit/$', 'setup_source_edit', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_edit'), - url(r'^setup/interactive/webforms/(?P\w+)/delete/$', 'setup_source_delete', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_delete'), - url(r'^setup/interactive/webforms/create/$', 'setup_source_create', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_create'), - url(r'^setup/interactive/webforms/(?P\w+)/transformation/list/$', 'setup_source_transformation_list', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_transformation_list'), url(r'^setup/interactive/staging_folder/list/$', 'setup_source_list', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_list'), - url(r'^setup/interactive/staging_folder/(?P\w+)/edit/$', 'setup_source_edit', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_edit'), - url(r'^setup/interactive/staging_folder/(?P\w+)/delete/$', 'setup_source_delete', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_delete'), - url(r'^setup/interactive/staging_folder/create/$', 'setup_source_create', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_create'), - url(r'^setup/interactive/staging_folder/(?P\w+)/transformation/list/$', 'setup_source_transformation_list', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_transformation_list'), + url(r'^setup/interactive/(?P\w+)/list/$', 'setup_source_list', (), 'setup_source_list'), + url(r'^setup/interactive/(?P\w+)/(?P\w+)/edit/$', 'setup_source_edit', (), 'setup_source_edit'), + url(r'^setup/interactive/(?P\w+)/(?P\w+)/delete/$', 'setup_source_delete', (), 'setup_source_delete'), + url(r'^setup/interactive/(?P\w+)/create/$', 'setup_source_create', (), 'setup_source_create'), + + url(r'^setup/interactive/(?P\w+)/(?P\w+)/transformation/list/$', 'setup_source_transformation_list', (), 'setup_source_transformation_list'), + url(r'^setup/interactive/(?P\w+)/(?P\w+)/transformation/create/$', 'setup_source_transformation_create', (), 'setup_source_transformation_create'), url(r'^setup/interactive/source/transformation/(?P\w+)/edit/$', 'setup_source_transformation_edit', (), 'setup_source_transformation_edit'), url(r'^setup/interactive/source/transformation/(?P\w+)/delete/$', 'setup_source_transformation_delete', (), 'setup_source_transformation_delete'), ) diff --git a/apps/sources/views.py b/apps/sources/views.py index 5a10c50438..5ce2f18eb6 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -30,7 +30,7 @@ from sources.models import SOURCE_UNCOMPRESS_CHOICE_Y, \ from sources.staging import create_staging_file_class, StagingFile from sources.forms import StagingDocumentForm, WebFormForm from sources.forms import WebFormSetupForm, StagingFolderSetupForm -from sources.forms import SourceTransformationForm +from sources.forms import SourceTransformationForm, SourceTransformationForm_create def return_function(obj): @@ -339,16 +339,15 @@ def setup_source_list(request, source_type): if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm - title = _(u'web form sources') elif source_type == SOURCE_CHOICE_STAGING: cls = StagingFolder - title = _(u'staging folder sources') context = { 'object_list': cls.objects.all(), - 'title': title, + 'title': cls.class_fullname_plural(), 'hide_link': True, - 'list_object_variable_name': 'source' + 'list_object_variable_name': 'source', + 'source_type': source_type, } return render_to_response('generic_list.html', context, @@ -361,11 +360,9 @@ def setup_source_edit(request, source_type, source_id): if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm form_class = WebFormSetupForm - title = _(u'edit web form source: %s') elif source_type == SOURCE_CHOICE_STAGING: cls = StagingFolder form_class = StagingFolderSetupForm - title = _(u'edit staging folder source: %s') source = get_object_or_404(cls, pk=source_id) next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) @@ -383,12 +380,13 @@ def setup_source_edit(request, source_type, source_id): form = form_class(instance=source) return render_to_response('generic_form.html', { - 'title': title % source, + 'title': _(u'edit source: %s') % source.fullname(), 'form': form, 'source': source, 'navigation_object_name': 'source', 'next': next, 'object_name': _(u'source'), + 'source_type': source_type, }, context_instance=RequestContext(request)) @@ -397,15 +395,16 @@ def setup_source_delete(request, source_type, source_id): #check_permissions(request.user, [PERMISSION_SOURCES_SETUP_DELETE]) if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm - title = _(u'Are you sure you wish to delete the web form source: %s?') form_icon = u'application_form_delete.png' redirect_view = 'setup_web_form_list' elif source_type == SOURCE_CHOICE_STAGING: cls = StagingFolder - title = _(u'Are you sure you wish to delete the staging folder source: %s?') form_icon = u'folder_delete.png' redirect_view = 'setup_staging_folder_list' + redirect_view = reverse('setup_source_list', args=[source_type]) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view))) + source = get_object_or_404(cls, pk=source_id) if request.method == 'POST': @@ -417,16 +416,17 @@ def setup_source_delete(request, source_type, source_id): 'source': source, 'error': e }) - return HttpResponseRedirect(reverse(redirect_view)) + return HttpResponseRedirect(redirect_view) context = { - 'title': title % source, + 'title': _(u'Are you sure you wish to delete the source: %s?') % source.fullname(), 'source': source, 'object_name': _(u'source'), 'navigation_object_name': 'source', 'delete_view': True, - 'previous': reverse(redirect_view), + 'previous': previous, 'form_icon': form_icon, + 'source_type': source_type, } return render_to_response('generic_confirm.html', context, @@ -437,16 +437,12 @@ def setup_source_create(request, source_type): #check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) if source_type == SOURCE_CHOICE_WEB_FORM: - #cls = WebForm + cls = WebForm form_class = WebFormSetupForm - title = _(u'Creating web form source') elif source_type == SOURCE_CHOICE_STAGING: - #cls = StagingFolder + cls = StagingFolder form_class = StagingFolderSetupForm - title = _(u'Creating staging folder source') - #source = get_object_or_404(cls, pk=source_id) - if request.method == 'POST': form = form_class(data=request.POST) if form.is_valid(): @@ -460,9 +456,11 @@ def setup_source_create(request, source_type): form = form_class() return render_to_response('generic_form.html', { - 'title': title, + 'title': _(u'Create new source of type: %s') % cls.class_fullname(), 'form': form, - #'object_name': _(u'source'), + 'source_type': source_type, + 'source': cls, + 'navigation_object_name': 'source', }, context_instance=RequestContext(request)) @@ -472,16 +470,14 @@ def setup_source_transformation_list(request, source_type, source_id): if source_type == SOURCE_CHOICE_WEB_FORM: cls = WebForm - #title = _(u'web form sources') elif source_type == SOURCE_CHOICE_STAGING: cls = StagingFolder - #title = _(u'staging folder sources') source = get_object_or_404(cls, pk=source_id) context = { 'object_list': SourceTransformation.objects.get_for_object(source), - 'title': _(u'transformations for: %s') % source, + 'title': _(u'transformations for: %s') % source.fullname(), 'source': source, 'object_name': _(u'source'), 'navigation_object_name': 'source', @@ -503,7 +499,8 @@ def setup_source_transformation_edit(request, transformation_id): #check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT]) source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id) - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) + redirect_view = reverse('setup_source_transformation_list', args=[source_transformation.content_object.source_type, source_transformation.content_object.pk]) + next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', redirect_view))) if request.method == 'POST': form = SourceTransformationForm(instance=source_transformation, data=request.POST) @@ -522,12 +519,10 @@ def setup_source_transformation_edit(request, transformation_id): 'form': form, 'source': source_transformation.content_object, 'transformation': source_transformation, - #'navigation_object_name_list': ['source', 'transformation'], 'navigation_object_list': [ {'object': 'source', 'name': _(u'source')}, {'object': 'transformation', 'name': _(u'transformation')} ], - #'object_name_list': [_(u'source'), _(u'transformation')], 'next': next, }, context_instance=RequestContext(request)) @@ -537,7 +532,8 @@ def setup_source_transformation_delete(request, transformation_id): #check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM]) source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id) - next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) + redirect_view = reverse('setup_source_transformation_list', args=[source_transformation.content_object.source_type, source_transformation.content_object.pk]) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view))) if request.method == 'POST': try: @@ -547,12 +543,11 @@ def setup_source_transformation_delete(request, transformation_id): messages.error(request, _(u'Error deleting transformation; %(error)s') % { 'error': e} ) - return HttpResponseRedirect(next) + return HttpResponseRedirect(redirect_view) return render_to_response('generic_confirm.html', { 'delete_view': True, 'transformation': source_transformation, - #'object_name': _(u'document transformation'), 'source': source_transformation.content_object, 'navigation_object_list': [ {'object': 'source', 'name': _(u'source')}, @@ -560,38 +555,60 @@ def setup_source_transformation_delete(request, transformation_id): ], 'title': _(u'Are you sure you wish to delete transformation "%(transformation)s"') % { 'transformation': source_transformation.get_transformation_display(), - #'document_page': document_page_transformation.document_page }, - 'next': next, - 'previous': next, + 'previous': previous, 'form_icon': u'shape_square_delete.png', }, context_instance=RequestContext(request)) -''' -def document_page_transformation_create(request, document_page_id): - check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM]) - document_page = get_object_or_404(DocumentPage, pk=document_page_id) +def setup_source_transformation_create(request, source_type, source_id): + #check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM]) + if source_type == SOURCE_CHOICE_WEB_FORM: + cls = WebForm + elif source_type == SOURCE_CHOICE_STAGING: + cls = StagingFolder + + source = get_object_or_404(cls, pk=source_id) + + context = { + 'object_list': SourceTransformation.objects.get_for_object(source), + 'title': _(u'transformations for: %s') % source.fullname(), + 'source': source, + 'object_name': _(u'source'), + 'navigation_object_name': 'source', + 'list_object_variable_name': 'transformation', + 'extra_columns': [ + {'name': _(u'order'), 'attribute': 'order'}, + {'name': _(u'transformation'), 'attribute': lambda x: x.get_transformation_display()}, + {'name': _(u'arguments'), 'attribute': 'arguments'} + ], + 'hide_link': True, + 'hide_object': True, + } + + redirect_view = reverse('setup_source_transformation_list', args=[source.source_type, source.pk]) + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view))) + if request.method == 'POST': - form = DocumentPageTransformationForm(request.POST, initial={'document_page': document_page}) + form = SourceTransformationForm_create(request.POST) if form.is_valid(): - form.save() - return HttpResponseRedirect(reverse('document_page_view', args=[document_page_id])) + try: + source_tranformation = form.save(commit=False) + source_tranformation.content_object = source + source_tranformation.save() + messages.success(request, _(u'Source transformation created successfully')) + return HttpResponseRedirect(redirect_view) + except Exception, e: + messages.error(request, _(u'Error creating source transformation; %s') % e) else: - form = DocumentPageTransformationForm(initial={'document_page': document_page}) - + form = SourceTransformationForm_create() + return render_to_response('generic_form.html', { 'form': form, - 'object': document_page, - 'title': _(u'Create new transformation for page: %(page)s of document: %(document)s') % { - 'page': document_page.page_number, 'document': document_page.document}, - 'web_theme_hide_menus': True, + 'source': source, + 'object_name': _(u'source'), + 'navigation_object_name': 'source', + 'title': _(u'Create new transformation for source: %s') % source, }, context_instance=RequestContext(request)) - - - - - -'''