Added preliminary views to add/remove document page transformations

This commit is contained in:
Roberto Rosario
2011-02-16 03:31:46 -04:00
parent f974950147
commit 15afaadc4c
5 changed files with 150 additions and 33 deletions

View File

@@ -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')

View File

@@ -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 src="%(img)s?page=%(page)s" />' % {
'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('<br /><span class="famfam active famfam-magnifier"></span>%s' % ugettext(u'Click on the image for full size view'))
#for document_page in value.documentpage_set.all():
# output.append('<br/>%s)<a href="%s">%s</a>' % (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))

View File

@@ -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',)

View File

@@ -27,10 +27,11 @@ urlpatterns = patterns('documents.views',
url(r'^document/(?P<document_id>\d+)/download/$', 'document_download', (), 'document_download'),
url(r'^document/(?P<document_id>\d+)/create/siblings/$', 'document_create_sibling', {'multiple':False}, 'document_create_sibling'),
url(r'^document/(?P<document_id>\d+)/tranformation/list/$', 'document_transformation_list', (), 'document_transformation_list'),
url(r'^document/tranformation/(?P<document_transformation_id>\d+)/delete/$', 'document_transformation_delete', (), 'document_transformation_delete'),
url(r'^staging_file/(?P<staging_file_id>\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'),
url(r'^staging_file/(?P<staging_file_id>\w+)/delete/$', 'staging_file_delete', (), 'staging_file_delete'),
url(r'^document/page/(?P<document_page_id>\d+)/$', 'document_page_view', (), 'document_page_view'),
url(r'^document/page/(?P<document_page_id>\d+)/transformation/create/$', 'document_page_transformation_create', (), 'document_page_transformation_create'),
url(r'^document/page/transformation/(?P<document_page_transformation_id>\d+)/edit/$', 'document_page_transformation_edit', (), 'document_page_transformation_edit'),
url(r'^document/page/transformation/(?P<document_page_transformation_id>\d+)/delete/$', 'document_page_transformation_delete', (), 'document_page_transformation_delete'),
)

View File

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