Backport ACL computation improvements
Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
@@ -3,13 +3,13 @@ from __future__ import absolute_import, unicode_literals
|
||||
import logging
|
||||
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
||||
|
||||
from mayan.apps.acls.models import AccessControlList
|
||||
from mayan.apps.common.generics import ConfirmView
|
||||
from mayan.apps.common.mixins import MultipleInstanceActionMixin
|
||||
from mayan.apps.common.generics import (
|
||||
ConfirmView, MultipleObjectConfirmActionView
|
||||
)
|
||||
|
||||
from ..icons import icon_document_list_deleted
|
||||
from ..models import DeletedDocument, Document
|
||||
@@ -23,64 +23,100 @@ from ..tasks import task_delete_document
|
||||
from .document_views import DocumentListView
|
||||
|
||||
__all__ = (
|
||||
'DeletedDocumentDeleteView', 'DeletedDocumentDeleteManyView',
|
||||
'DeletedDocumentListView', 'DocumentRestoreView', 'DocumentRestoreManyView',
|
||||
'DocumentTrashView', 'DocumentTrashManyView', 'EmptyTrashCanView'
|
||||
'DocumentTrashView', 'EmptyTrashCanView', 'TrashedDocumentDeleteView',
|
||||
'TrashedDocumentListView', 'TrashedDocumentRestoreView'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DeletedDocumentDeleteView(ConfirmView):
|
||||
class DocumentTrashView(MultipleObjectConfirmActionView):
|
||||
model = Document
|
||||
object_permission = permission_document_trash
|
||||
pk_url_kwarg = 'pk'
|
||||
success_message_singular = _(
|
||||
'%(count)d document moved to the trash.'
|
||||
)
|
||||
success_message_plural = _(
|
||||
'%(count)d documents moved to the trash.'
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
queryset = self.get_object_list()
|
||||
|
||||
result = {
|
||||
'title': ungettext(
|
||||
single='Move the selected document to the trash?',
|
||||
plural='Move the selected documents to the trash?',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
def object_action(self, form, instance):
|
||||
instance.delete()
|
||||
|
||||
|
||||
class EmptyTrashCanView(ConfirmView):
|
||||
extra_context = {
|
||||
'title': _('Delete the selected document?')
|
||||
'title': _('Empty trash?')
|
||||
}
|
||||
|
||||
def object_action(self, instance):
|
||||
source_document = get_object_or_404(
|
||||
klass=Document.passthrough, pk=instance.pk
|
||||
)
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_delete, user=self.request.user,
|
||||
obj=source_document
|
||||
)
|
||||
|
||||
task_delete_document.apply_async(
|
||||
kwargs={'deleted_document_id': instance.pk}
|
||||
)
|
||||
view_permission = permission_empty_trash
|
||||
action_cancel_redirect = post_action_redirect = reverse_lazy(
|
||||
'documents:document_list_deleted'
|
||||
)
|
||||
|
||||
def view_action(self):
|
||||
instance = get_object_or_404(
|
||||
klass=DeletedDocument, pk=self.kwargs['pk']
|
||||
)
|
||||
self.object_action(instance=instance)
|
||||
messages.success(
|
||||
self.request, _('Document: %(document)s deleted.') % {
|
||||
'document': instance
|
||||
}
|
||||
)
|
||||
for deleted_document in DeletedDocument.objects.all():
|
||||
task_delete_document.apply_async(
|
||||
kwargs={'trashed_document_id': deleted_document.pk}
|
||||
)
|
||||
|
||||
messages.success(self.request, _('Trash emptied successfully'))
|
||||
|
||||
|
||||
class DeletedDocumentDeleteManyView(MultipleInstanceActionMixin, DeletedDocumentDeleteView):
|
||||
extra_context = {
|
||||
'title': _('Delete the selected documents?')
|
||||
}
|
||||
class TrashedDocumentDeleteView(MultipleObjectConfirmActionView):
|
||||
model = DeletedDocument
|
||||
success_message = '%(count)d document deleted.'
|
||||
success_message_plural = '%(count)d documents deleted.'
|
||||
object_permission = permission_document_delete
|
||||
pk_url_kwarg = 'pk'
|
||||
success_message_singular = _(
|
||||
'%(count)d trashed document deleted.'
|
||||
)
|
||||
success_message_plural = _(
|
||||
'%(count)d trashed documents deleted.'
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
queryset = self.get_object_list()
|
||||
|
||||
result = {
|
||||
'title': ungettext(
|
||||
single='Delete the selected trashed document?',
|
||||
plural='Delete the selected trashed documents?',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
def object_action(self, form, instance):
|
||||
task_delete_document.apply_async(
|
||||
kwargs={'trashed_document_id': instance.pk}
|
||||
)
|
||||
|
||||
|
||||
class DeletedDocumentListView(DocumentListView):
|
||||
class TrashedDocumentListView(DocumentListView):
|
||||
object_permission = None
|
||||
|
||||
def get_document_queryset(self):
|
||||
return AccessControlList.objects.filter_by_access(
|
||||
permission_document_view, self.request.user,
|
||||
queryset=DeletedDocument.trash.all()
|
||||
permission=permission_document_view,
|
||||
queryset=DeletedDocument.trash.all(),
|
||||
user=self.request.user
|
||||
)
|
||||
|
||||
def get_extra_context(self):
|
||||
context = super(DeletedDocumentListView, self).get_extra_context()
|
||||
context = super(TrashedDocumentListView, self).get_extra_context()
|
||||
context.update(
|
||||
{
|
||||
'hide_link': True,
|
||||
@@ -99,103 +135,29 @@ class DeletedDocumentListView(DocumentListView):
|
||||
return context
|
||||
|
||||
|
||||
class DocumentRestoreView(ConfirmView):
|
||||
extra_context = {
|
||||
'title': _('Restore the selected document?')
|
||||
}
|
||||
|
||||
def object_action(self, instance):
|
||||
source_document = get_object_or_404(
|
||||
klass=Document.passthrough, pk=instance.pk
|
||||
)
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_restore, user=self.request.user,
|
||||
obj=source_document
|
||||
)
|
||||
|
||||
instance.restore()
|
||||
|
||||
def view_action(self):
|
||||
instance = get_object_or_404(
|
||||
klass=DeletedDocument, pk=self.kwargs['pk']
|
||||
)
|
||||
|
||||
self.object_action(instance=instance)
|
||||
|
||||
messages.success(
|
||||
self.request, _('Document: %(document)s restored.') % {
|
||||
'document': instance
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class DocumentRestoreManyView(MultipleInstanceActionMixin, DocumentRestoreView):
|
||||
extra_context = {
|
||||
'title': _('Restore the selected documents?')
|
||||
}
|
||||
class TrashedDocumentRestoreView(MultipleObjectConfirmActionView):
|
||||
model = DeletedDocument
|
||||
success_message = '%(count)d document restored.'
|
||||
success_message_plural = '%(count)d documents restored.'
|
||||
|
||||
|
||||
class DocumentTrashView(ConfirmView):
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'object': self.get_object(),
|
||||
'title': _('Move "%s" to the trash?') % self.get_object()
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
|
||||
|
||||
def get_post_action_redirect(self):
|
||||
return reverse('documents:document_list_recent_access')
|
||||
|
||||
def object_action(self, instance):
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_document_trash, user=self.request.user,
|
||||
obj=instance
|
||||
)
|
||||
|
||||
instance.delete()
|
||||
|
||||
def view_action(self):
|
||||
instance = self.get_object()
|
||||
|
||||
self.object_action(instance=instance)
|
||||
|
||||
messages.success(
|
||||
self.request, _('Document: %(document)s moved to trash successfully.') % {
|
||||
'document': instance
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class DocumentTrashManyView(MultipleInstanceActionMixin, DocumentTrashView):
|
||||
model = Document
|
||||
success_message = '%(count)d document moved to the trash.'
|
||||
success_message_plural = '%(count)d documents moved to the trash.'
|
||||
|
||||
def get_extra_context(self):
|
||||
return {
|
||||
'title': _('Move the selected documents to the trash?')
|
||||
}
|
||||
|
||||
|
||||
class EmptyTrashCanView(ConfirmView):
|
||||
extra_context = {
|
||||
'title': _('Empty trash?')
|
||||
}
|
||||
view_permission = permission_empty_trash
|
||||
action_cancel_redirect = post_action_redirect = reverse_lazy(
|
||||
'documents:document_list_deleted'
|
||||
object_permission = permission_document_restore
|
||||
pk_url_kwarg = 'pk'
|
||||
success_message_singular = _(
|
||||
'%(count)d trashed document restored.'
|
||||
)
|
||||
success_message_plural = _(
|
||||
'%(count)d trashed documents restored.'
|
||||
)
|
||||
|
||||
def view_action(self):
|
||||
for deleted_document in DeletedDocument.objects.all():
|
||||
task_delete_document.apply_async(
|
||||
kwargs={'deleted_document_id': deleted_document.pk}
|
||||
)
|
||||
def get_extra_context(self):
|
||||
queryset = self.get_object_list()
|
||||
|
||||
messages.success(self.request, _('Trash emptied successfully'))
|
||||
result = {
|
||||
'title': ungettext(
|
||||
single='Restore the selected trashed document?',
|
||||
plural='Restore the selected trashed documents?',
|
||||
number=queryset.count()
|
||||
)
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
def object_action(self, form, instance):
|
||||
instance.restore()
|
||||
|
||||
Reference in New Issue
Block a user