diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 72fa3dd2d7..a713be3bad 100755 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -43,9 +43,10 @@ document_edit_metadata = {'text':_('edit metadata'), 'view':'document_edit_metad document_preview = {'text':_('preview'), 'class':'fancybox', 'view':'document_preview', 'args':'object.id', 'famfam':'magnifier', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_VIEW]}} document_download = {'text':_('download'), 'view':'document_download', 'args':'object.id', 'famfam':'page_save', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_DOWNLOAD]}} -#document_transformation_list = {'text':_(u'transformations'), 'view':'document_transformation_list', 'args':'object.id', 'famfam':'page_paintbrush', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} -#document_transformation_delete = {'text':_('delete'), 'view':'document_transformation_delete', 'args':'object.id', 'famfam':'delete'}#, 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} - +document_page_transformation_create = {'text':_('create new transformation'), 'view':'document_page_transformation_create', 'args':'object.id', 'famfam':'pencil_add', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} +document_page_transformation_edit = {'text':_('edit'), 'view':'document_page_transformation_edit', 'args':'object.id', 'famfam':'pencil_go', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} +document_page_transformation_delete = {'text':_('delete'), 'view':'document_page_transformation_delete', 'args':'object.id', 'famfam':'pencil_delete', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} +#document_page_transformation_go_back = {'text':_('delete'), 'view':'document_page_transformation_delete', 'args':'object.id', 'famfam':'pencil_delete', 'permissions':{'namespace':'documents', 'permissions':[PERMISSION_DOCUMENT_TRANSFORM]}} staging_file_preview = {'text':_('preview'), 'class':'fancybox-noscaling', 'view':'staging_file_preview', 'args':'object.id', 'famfam':'drive_magnify'} staging_file_delete = {'text':_('delete'), 'view':'staging_file_delete', 'args':'object.id', 'famfam':'drive_delete'} @@ -54,7 +55,8 @@ register_links(Document, [document_view, document_edit, document_edit_metadata, register_links(Document, [document_list, document_create, document_create_multiple, document_create_sibling], 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(DocumentTransformation, [document_transformation_delete]) +register_links(DocumentPageTransformation, [document_page_transformation_edit, document_page_transformation_delete]) +register_links(['document_page_view', 'document_page_transformation_edit', 'document_page_transformation_delete', 'document_page_transformation_create'], [document_page_transformation_create], menu_name='sidebar') diff --git a/apps/documents/forms.py b/apps/documents/forms.py index f14bfad548..75df7bae0a 100755 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -13,12 +13,43 @@ from common.wizard import BoundFormWizard from common.utils import urlquote from common.forms import DetailForm -from models import Document, DocumentType, DocumentTypeMetadataType +from models import Document, DocumentType, DocumentTypeMetadataType, \ + DocumentPage, DocumentPageTransformation from documents.conf.settings import AVAILABLE_FUNCTIONS from documents.conf.settings import AVAILABLE_MODELS +class DocumentPageTransformationForm(forms.ModelForm): + class Meta: + model = DocumentPageTransformation + + def __init__(self, *args, **kwargs): + super(DocumentPageTransformationForm, self).__init__(*args, **kwargs) + self.fields['document_page'].widget = forms.HiddenInput() + + +class DocumentPageImageWidget(forms.widgets.Widget): + def render(self, name, value, attrs=None): + output = [] + output.append('' % { + 'img':reverse('document_preview', args=[value.document.id]), + 'page':value.page_number, + }) + #output.append(super(ImageWidget, self).render(name, value, attrs)) + return mark_safe(u''.join(output)) + + +class DocumentPageForm(forms.ModelForm): + class Meta: + model = DocumentPage + + def __init__(self, *args, **kwargs): + super(DocumentPageForm, self).__init__(*args, **kwargs) + self.fields['page_image'].initial = self.instance + + page_image = forms.CharField(widget=DocumentPageImageWidget()) + class ImageWidget(forms.widgets.Widget): def render(self, name, value, attrs=None): @@ -40,6 +71,11 @@ class ImageWidget(forms.widgets.Widget): }) output.append('
%s' % ugettext(u'Click on the image for full size view')) + + #for document_page in value.documentpage_set.all(): + # output.append('
%s)%s' % (document_page.page_number, + # reverse('document_page_view', args=[document_page.id]), + # ugettext(u'page view'))) #output.append(super(ImageWidget, self).render(name, value, attrs)) return mark_safe(u''.join(output)) diff --git a/apps/documents/models.py b/apps/documents/models.py index e12e4b59ba..89de945b2f 100755 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -400,7 +400,7 @@ class DocumentPage(models.Model): page_number = models.PositiveIntegerField(default=1, editable=False, verbose_name=_(u'page number')) def __unicode__(self): - return '%s - %s - %s' % (self.document, self.page_number, self.page_label) + return '%s - %d - %s' % (unicode(self.document), self.page_number, self.page_label) class Meta: verbose_name = _(u'document page') @@ -471,12 +471,12 @@ available_transformations = ([(name, data['label']) for name, data in AVAILABLE_ class DocumentPageTransformation(models.Model): document_page = models.ForeignKey(DocumentPage, verbose_name=_(u'document page')) - order = models.PositiveIntegerField(blank=True, null=True, verbose_name=_(u'order')) + order = models.PositiveIntegerField(default=0, blank=True, null=True, verbose_name=_(u'order')) transformation = models.CharField(choices=available_transformations, max_length=128, verbose_name=_(u'transformation')) - arguments = models.TextField(blank=True, null=True, verbose_name=_(u'arguments'), help_text=_(u'Use directories to indentify arguments, example: {\'degrees\':90}')) + arguments = models.TextField(blank=True, null=True, verbose_name=_(u'arguments'), help_text=_(u'Use dictionaries to indentify arguments, example: {\'degrees\':90}')) def __unicode__(self): - return '%s - %s' % (self.document_page, self.get_transformation_display()) + return '%s - %s' % (unicode(self.document_page), self.get_transformation_display()) class Meta: ordering = ('order',) diff --git a/apps/documents/urls.py b/apps/documents/urls.py index d60622b73a..c00262e869 100755 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -27,10 +27,11 @@ urlpatterns = patterns('documents.views', url(r'^document/(?P\d+)/download/$', 'document_download', (), 'document_download'), url(r'^document/(?P\d+)/create/siblings/$', 'document_create_sibling', {'multiple':False}, 'document_create_sibling'), - url(r'^document/(?P\d+)/tranformation/list/$', 'document_transformation_list', (), 'document_transformation_list'), - url(r'^document/tranformation/(?P\d+)/delete/$', 'document_transformation_delete', (), 'document_transformation_delete'), - - url(r'^staging_file/(?P\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'), url(r'^staging_file/(?P\w+)/delete/$', 'staging_file_delete', (), 'staging_file_delete'), + + url(r'^document/page/(?P\d+)/$', 'document_page_view', (), 'document_page_view'), + url(r'^document/page/(?P\d+)/transformation/create/$', 'document_page_transformation_create', (), 'document_page_transformation_create'), + url(r'^document/page/transformation/(?P\d+)/edit/$', 'document_page_transformation_edit', (), 'document_page_transformation_edit'), + url(r'^document/page/transformation/(?P\d+)/delete/$', 'document_page_transformation_delete', (), 'document_page_transformation_delete'), ) diff --git a/apps/documents/views.py b/apps/documents/views.py index 5179c92585..6012d72050 100755 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -26,7 +26,7 @@ from models import Document, DocumentMetadata, DocumentType, MetadataType, \ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \ MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \ StagingDocumentForm, DocumentTypeMetadataType, DocumentPreviewForm, \ - MetadataFormSet + MetadataFormSet, DocumentPageForm, DocumentPageTransformationForm from staging import StagingFile @@ -461,7 +461,6 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_ try: #Catch invalid or non existing pages document_page = DocumentPage.objects.get(document=document, page_number=page) - for page_transformation in document_page.documentpagetransformation_set.all(): try: if page_transformation.transformation in TRANFORMATION_CHOICES: @@ -559,39 +558,118 @@ def staging_file_delete(request, staging_file_id): }, context_instance=RequestContext(request)) -def document_transformation_list(request, document_id): +def document_page_view(request, document_page_id): + permissions = [PERMISSION_DOCUMENT_VIEW] + try: + check_permissions(request.user, 'documents', permissions) + except Unauthorized, e: + raise Http404(e) + + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + document_page_form = DocumentPageForm(instance=document_page) + + form_list = [ + { + 'form':document_page_form, + 'title':_(u'document page'), + 'object':document_page, + 'grid':6, + }, + ] + subtemplates_dict = [ + { + 'name':'generic_list_subtemplate.html', + 'title':_(u'transformations'), + 'object_list':document_page.documentpagetransformation_set.all(), + '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, + 'grid':6, + 'grid_clear':True, + 'hide_header':True, + }, + ] + + return render_to_response('generic_detail.html', { + 'form_list':form_list, + 'object':document_page, + 'subtemplates_dict':subtemplates_dict, + }, context_instance=RequestContext(request)) + + +def document_page_transformation_create(request, document_page_id): permissions = [PERMISSION_DOCUMENT_TRANSFORM] try: check_permissions(request.user, 'documents', permissions) except Unauthorized, e: raise Http404(e) - - document = get_object_or_404(Document, pk=document_id) - - - return object_list( - request, - queryset=document.documenttransformation_set.all(), - template_name='generic_list.html', - extra_context={ - 'title':_(u'document transformations'), - }, - ) -def document_transformation_delete(request, document_transformation_id): + document_page = get_object_or_404(DocumentPage, pk=document_page_id) + + if request.method == 'POST': + form = DocumentPageTransformationForm(request.POST, initial={'document_page':document_page}) + if form.is_valid(): + form.save() + return HttpResponseRedirect(reverse('document_page_view', args=[document_page_id])) + else: + form = DocumentPageTransformationForm(initial={'document_page':document_page}) + + return render_to_response('generic_form.html', { + 'form':form, + 'object':document_page, + 'title':_(u'Create new transformation for page: %s of document: %s') % ( + document_page.page_number, document_page.document), + }, context_instance=RequestContext(request)) + + +def document_page_transformation_edit(request, document_page_transformation_id): + permissions = [PERMISSION_DOCUMENT_TRANSFORM] + try: + check_permissions(request.user, 'documents', permissions) + except Unauthorized, e: + raise Http404(e) + + document_page_transformation = get_object_or_404(DocumentPageTransformation, pk=document_page_transformation_id) + return update_object(request, template_name='generic_form.html', + form_class=DocumentPageTransformationForm, + object_id=document_page_transformation_id, + post_save_redirect=reverse('document_page_view', args=[document_page_transformation.document_page.id]), + extra_context={ + 'object_name':_(u'transformation')} + ) + + return render_to_response('generic_form.html', { + 'form':form, + 'object':document_page_transformation.document_page, + 'title':_(u'Edit transformation "%s" for page: %s of document: %s') % ( + document_page_transformation.get_transformation_display(), + document_page_transformation.document_page.page_number, + document_page_transformation.document_page.document), + }, context_instance=RequestContext(request)) + + +def document_page_transformation_delete(request, document_page_transformation_id): permissions = [PERMISSION_DOCUMENT_TRANSFORM] try: check_permissions(request.user, 'documents', permissions) except Unauthorized, e: raise Http404(e) - document_transformation = get_object_or_404(DocumentPageTransformation, pk=document_transformation_id) + document_page_transformation = get_object_or_404(DocumentPageTransformation, pk=document_page_transformation_id) - return delete_object(request, model=DocumentPageTransformation, object_id=document_transformation_id, + return delete_object(request, model=DocumentPageTransformation, object_id=document_page_transformation_id, template_name='generic_confirm.html', - post_delete_redirect=reverse('document_transformation_list'), + post_delete_redirect=reverse('document_page_view', args=[document_page_transformation.document_page.id]), extra_context={ 'delete_view':True, - 'object':document_transformation, + 'object':document_page_transformation, 'object_name':_(u'document transformation'), + 'title':_(u'Are you sure you wish to delete transformation "%s" for page: %s of document: %s') % ( + document_page_transformation.get_transformation_display(), + document_page_transformation.document_page.page_number, + document_page_transformation.document_page.document), })