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('
' % { - 'img': reverse('document_display', args=[value.document.id]), - 'page': value.page_number, - }) - return mark_safe(u''.join(output)) + if value: + output = [] + output.append('
' % { + '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))