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),
})