diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py
index 184a584bc3..e977271df3 100644
--- a/apps/documents/__init__.py
+++ b/apps/documents/__init__.py
@@ -16,6 +16,7 @@ from conf.settings import ENABLE_SINGLE_DOCUMENT_UPLOAD
PERMISSION_DOCUMENT_CREATE = 'document_create'
PERMISSION_DOCUMENT_PROPERTIES_EDIT = 'document_properties_edit'
+PERMISSION_DOCUMENT_EDIT = 'document_edit'
PERMISSION_DOCUMENT_METADATA_EDIT = 'document_metadata_edit'
PERMISSION_DOCUMENT_VIEW = 'document_view'
PERMISSION_DOCUMENT_DELETE = 'document_delete'
@@ -26,6 +27,7 @@ PERMISSION_DOCUMENT_TOOLS = 'document_tools'
register_permissions('documents', [
{'name': PERMISSION_DOCUMENT_CREATE, 'label': _(u'Create document')},
{'name': PERMISSION_DOCUMENT_PROPERTIES_EDIT, 'label': _(u'Edit document properties')},
+ {'name': PERMISSION_DOCUMENT_EDIT, 'label': _(u'Edit document')},
{'name': PERMISSION_DOCUMENT_METADATA_EDIT, 'label': _(u'Edit document metadata')},
{'name': PERMISSION_DOCUMENT_VIEW, 'label': _(u'View document')},
{'name': PERMISSION_DOCUMENT_DELETE, 'label': _(u'Delete document')},
@@ -58,7 +60,8 @@ document_page_transformation_edit = {'text': _('edit'), 'view': 'document_page_t
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': _('page view'), 'view': 'document_page_view', 'args': 'object.document_page.id', 'famfam': 'page_white', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}}
-document_page_go_back = {'text': _('page view'), 'view': 'document_page_view', 'args': 'object.id', 'famfam': 'page_white', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}}
+document_page_go_back = {'text': _('page details'), 'view': 'document_page_view', 'args': 'object.id', 'famfam': 'page_white', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}}
+document_page_edit = {'text': _('edit page'), 'view': 'document_page_edit', 'args': 'object.id', 'famfam': 'page_white', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_EDIT]}}
document_missing_list = {'text': _('Find missing document files'), 'view': 'document_missing_list', 'famfam': 'folder_page', 'permissions': {'namespace': 'documents', 'permissions': [PERMISSION_DOCUMENT_VIEW]}}
@@ -74,13 +77,13 @@ if ENABLE_SINGLE_DOCUMENT_UPLOAD:
else:
register_links(['document_list', 'document_create', 'document_create_multiple', 'upload_document_with_type', 'upload_multiple_documents_with_type'], [document_list, document_create_multiple], menu_name='sidebar')
-register_links(DocumentPage, [document_page_go_back], menu_name='sidebar')
+register_links(DocumentPage, [document_page_edit, document_page_go_back], menu_name='sidebar')
register_links('document_page_transformation_list', [document_page_transformation_create, document_page_transformation_list], menu_name='sidebar')
register_links('document_page_transformation_create', [document_page_transformation_create], menu_name='sidebar')
register_links(DocumentPageTransformation, [document_page_transformation_edit, document_page_transformation_delete])
-register_links(DocumentPageTransformation, [document_page_transformation_go_back], menu_name='sidebar')
-register_links(['document_page_view', 'document_page_transformation_edit', 'document_page_transformation_delete', 'document_page_transformation_create'], [document_page_transformation_list], menu_name='sidebar')
+register_links(DocumentPageTransformation, [document_page_edit, document_page_transformation_go_back], menu_name='sidebar')
+register_links(['document_page_edit', 'document_page_view', 'document_page_transformation_edit', 'document_page_transformation_delete', 'document_page_transformation_create'], [document_page_transformation_list], menu_name='sidebar')
register_links(StagingFile, [staging_file_preview, staging_file_delete])
diff --git a/apps/documents/forms.py b/apps/documents/forms.py
index 1b9971ae74..851d72ebb5 100644
--- a/apps/documents/forms.py
+++ b/apps/documents/forms.py
@@ -30,12 +30,15 @@ class DocumentPageTransformationForm(forms.ModelForm):
class DocumentPageImageWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
- output = []
- output.append('
s?page=%(page)s)
' % {
- 'img': reverse('document_display', args=[value.document.id]),
- 'page': value.page_number,
- })
- return mark_safe(u''.join(output))
+ if value:
+ output = []
+ output.append('s?page=%(page)s)
' % {
+ 'img': reverse('document_display', args=[value.document.id]),
+ 'page': value.page_number,
+ })
+ return mark_safe(u''.join(output))
+ else:
+ return u''
class DocumentPageForm(DetailForm):
@@ -55,6 +58,22 @@ class DocumentPageForm(DetailForm):
page_image = forms.CharField(widget=DocumentPageImageWidget())
+class DocumentPageForm_edit(forms.ModelForm):
+ class Meta:
+ model = DocumentPage
+ fields = ('page_label', 'content')
+
+ def __init__(self, *args, **kwargs):
+ super(DocumentPageForm_edit, self).__init__(*args, **kwargs)
+ self.fields['page_image'].initial = self.instance
+ self.fields.keyOrder = [
+ 'page_image',
+ 'page_label',
+ 'content',
+ ]
+ page_image = forms.CharField(required=False, widget=DocumentPageImageWidget())
+
+
class ImageWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
output = []
@@ -64,7 +83,6 @@ class ImageWidget(forms.widgets.Widget):
ugettext(u'Pages'))
for page in value.documentpage_set.all():
output.append(
- #'%(page)s)
' % {
'%(page)s)
' % {
'url': reverse('document_page_view', args=[page.id]),
'img': reverse('document_preview_multipage', args=[value.id]),
diff --git a/apps/documents/models.py b/apps/documents/models.py
index 49e530ec61..839b49f0af 100644
--- a/apps/documents/models.py
+++ b/apps/documents/models.py
@@ -298,6 +298,10 @@ class DocumentPage(models.Model):
verbose_name = _(u'document page')
verbose_name_plural = _(u'document pages')
+ @models.permalink
+ def get_absolute_url(self):
+ return ('document_page_view', [self.id])
+
class MetadataGroup(models.Model):
document_type = models.ManyToManyField(DocumentType, null=True, blank=True,
diff --git a/apps/documents/urls.py b/apps/documents/urls.py
index 1618c3b501..c80137a43d 100644
--- a/apps/documents/urls.py
+++ b/apps/documents/urls.py
@@ -43,6 +43,7 @@ urlpatterns = patterns('documents.views',
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+)/edit/$', 'document_page_edit', (), 'document_page_edit'),
url(r'^document/page/(?P\d+)/transformation/list/$', 'document_page_transformation_list', (), 'document_page_transformation_list'),
url(r'^document/page/(?P\d+)/transformation/create/$', 'document_page_transformation_create', (), 'document_page_transformation_create'),
diff --git a/apps/documents/views.py b/apps/documents/views.py
index 5c00ef09ec..2307467a77 100644
--- a/apps/documents/views.py
+++ b/apps/documents/views.py
@@ -40,13 +40,14 @@ from documents import PERMISSION_DOCUMENT_CREATE, \
PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_PROPERTIES_EDIT, \
PERMISSION_DOCUMENT_METADATA_EDIT, PERMISSION_DOCUMENT_VIEW, \
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \
- PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS
+ PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \
+ PERMISSION_DOCUMENT_EDIT
from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
MetadataForm, DocumentForm, DocumentForm_edit, DocumentForm_view, \
StagingDocumentForm, DocumentTypeMetadataType, DocumentPreviewForm, \
MetadataFormSet, DocumentPageForm, DocumentPageTransformationForm, \
- DocumentContentForm
+ DocumentContentForm, DocumentPageForm_edit
from metadata import save_metadata_list, \
decode_metadata_from_url, metadata_repr_as_list
@@ -906,7 +907,6 @@ def document_page_view(request, document_page_id):
{
'form': document_page_form,
'title': _(u'details for page: %s') % document_page.page_number,
- 'object': document_page,
},
]
return render_to_response('generic_detail.html', {
@@ -914,3 +914,27 @@ def document_page_view(request, document_page_id):
'object': document_page,
'web_theme_hide_menus': True,
}, context_instance=RequestContext(request))
+
+
+def document_page_edit(request, document_page_id):
+ check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_EDIT])
+
+ document_page = get_object_or_404(DocumentPage, pk=document_page_id)
+
+ if request.method == 'POST':
+ form = DocumentPageForm_edit(request.POST, instance=document_page)
+ if form.is_valid():
+ document_page.page_label = form.cleaned_data['page_label']
+ document_page.content = form.cleaned_data['content']
+ document_page.save()
+ messages.success(request, _(u'Document page edited successfully.'))
+ return HttpResponseRedirect(document_page.get_absolute_url())
+ else:
+ form = DocumentPageForm_edit(instance=document_page)
+
+ return render_to_response('generic_form.html', {
+ 'form': form,
+ 'object': document_page,
+ 'title': _(u'edit page: %s') % document_page.page_number,
+ 'web_theme_hide_menus': True,
+ }, context_instance=RequestContext(request))