Make new version upload link smarter

Use the new document pre save hooks to disable the
new version upload link via external functions.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-31 06:09:11 -04:00
parent cce6636b05
commit 9328a3e26e
2 changed files with 29 additions and 24 deletions

View File

@@ -1,5 +1,7 @@
from __future__ import absolute_import, unicode_literals
import logging
from django.apps import apps
from django.utils.translation import ugettext_lazy as _
@@ -23,6 +25,8 @@ from .permissions import (
permission_staging_file_delete
)
logger = logging.getLogger(__name__)
def condition_check_document_creation_acls(context):
AccessControlList = apps.get_model(
@@ -38,12 +42,13 @@ def condition_check_document_creation_acls(context):
).exists()
def document_new_version_not_blocked(context):
NewVersionBlock = apps.get_model(
app_label='checkouts', model_name='NewVersionBlock'
)
return not NewVersionBlock.objects.is_blocked(context['object'])
def condition_new_versions_allowed(context):
try:
context['object'].execute_pre_save_hooks()
except Exception as exception:
logger.debug('execute_pre_save_hooks raised and exception: %s', exception)
else:
return True
link_document_create_multiple = Link(
@@ -120,7 +125,7 @@ link_staging_file_delete = Link(
tags='dangerous', text=_('Delete'), view='sources:staging_file_delete'
)
link_upload_version = Link(
condition=document_new_version_not_blocked,
condition=condition_new_versions_allowed,
kwargs={'document_pk': 'resolved_object.pk'},
permission=permission_document_new_version, text=_('Upload new version'),
view='sources:upload_version'

View File

@@ -351,8 +351,6 @@ class UploadBaseView(ListModeMixin, MultiFormView):
class UploadInteractiveView(UploadBaseView):
def dispatch(self, request, *args, **kwargs):
self.subtemplates_list = []
self.document_type = get_object_or_404(
klass=DocumentType,
pk=self.request.GET.get(
@@ -361,8 +359,8 @@ class UploadInteractiveView(UploadBaseView):
)
AccessControlList.objects.check_access(
permission=permission_document_create, user=request.user,
obj=self.document_type
obj=self.document_type, permission=permission_document_create,
user=request.user
)
self.tab_links = UploadBaseView.get_active_tab_links()
@@ -521,30 +519,32 @@ class UploadInteractiveView(UploadBaseView):
class UploadInteractiveVersionView(UploadBaseView):
def dispatch(self, request, *args, **kwargs):
self.document = get_object_or_404(
klass=Document, pk=kwargs['document_id']
)
self.subtemplates_list = []
AccessControlList.objects.check_access(
obj=self.document, permission=permission_document_new_version,
user=self.request.user
)
self.document = get_object_or_404(klass=Document, pk=kwargs['document_id'])
# TODO: Try to remove this new version block check from here
if NewVersionBlock.objects.is_blocked(self.document):
try:
self.document.latest_version.execute_pre_save_hooks()
except Exception as exception:
messages.error(
message=_(
'Document "%s" is blocked from uploading new versions.'
) % self.document, request=self.request
'Unable to upload new versions for document '
'"%(document)s". %(exception)s'
) % {'document': self.document, 'exception': exception},
request=self.request
)
return HttpResponseRedirect(
redirect_to=reverse(
viewname='documents:document_version_list',
kwargs={'document_version_id': self.document.pk}
kwargs={'document_id': self.document.pk}
)
)
AccessControlList.objects.check_access(
permission=permission_document_new_version,
user=self.request.user, obj=self.document
)
self.tab_links = UploadBaseView.get_active_tab_links(self.document)
return super(