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:
@@ -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'
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user