diff --git a/mayan/apps/sources/links.py b/mayan/apps/sources/links.py index a35c6ca796..f9c1ed8d78 100644 --- a/mayan/apps/sources/links.py +++ b/mayan/apps/sources/links.py @@ -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' diff --git a/mayan/apps/sources/views.py b/mayan/apps/sources/views.py index dc309c5338..21ec981473 100644 --- a/mayan/apps/sources/views.py +++ b/mayan/apps/sources/views.py @@ -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(