Files
mayan-edms/mayan/apps/documents/views/document_version_views.py
Roberto Rosario 48fc36d54e Convert the document version list view to item view mode.
Add document version preview and thumbnail widgets.
Update the new version upload event have the version
as the target and the document as the action object.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
2017-08-02 04:10:09 -04:00

130 lines
3.9 KiB
Python

from __future__ import absolute_import, unicode_literals
import logging
from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
from acls.models import AccessControlList
from common.generics import (
ConfirmView, SingleObjectDetailView, SingleObjectListView
)
from ..events import event_document_view
from ..forms import DocumentVersionPreviewForm
from ..models import Document, DocumentVersion
from ..permissions import (
permission_document_download, permission_document_version_revert,
permission_document_version_view
)
from .document_views import DocumentDownloadFormView, DocumentDownloadView
logger = logging.getLogger(__name__)
class DocumentVersionListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_document_version_view, user=request.user,
obj=self.get_document()
)
self.get_document().add_as_recent_document_for_user(request.user)
return super(
DocumentVersionListView, self
).dispatch(request, *args, **kwargs)
def get_document(self):
return get_object_or_404(Document, pk=self.kwargs['pk'])
def get_extra_context(self):
return {
'list_as_items': True,
'object': self.get_document(),
'title': _('Versions of document: %s') % self.get_document(),
}
def get_queryset(self):
return self.get_document().versions.order_by('-timestamp')
class DocumentVersionRevertView(ConfirmView):
object_permission = permission_document_version_revert
object_permission_related = 'document'
def get_extra_context(self):
return {
'message': _(
'All later version after this one will be deleted too.'
),
'object': self.get_object().document,
'title': _('Revert to this version?'),
}
def get_object(self):
return get_object_or_404(DocumentVersion, pk=self.kwargs['pk'])
def view_action(self):
try:
self.get_object().revert(_user=self.request.user)
messages.success(
self.request, _('Document version reverted successfully')
)
except Exception as exception:
messages.error(
self.request,
_('Error reverting document version; %s') % exception
)
class DocumentVersionDownloadFormView(DocumentDownloadFormView):
model = DocumentVersion
multiple_download_view = None
single_download_view = 'documents:document_version_download'
def get_document_queryset(self):
id_list = self.request.GET.get(
'id_list', self.request.POST.get('id_list', '')
)
if not id_list:
id_list = self.kwargs['pk']
return self.model.objects.filter(
pk__in=id_list.split(',')
)
class DocumentVersionDownloadView(DocumentDownloadView):
model = DocumentVersion
object_permission = permission_document_download
class DocumentVersionView(SingleObjectDetailView):
form_class = DocumentVersionPreviewForm
model = DocumentVersion
object_permission = permission_document_version_view
def dispatch(self, request, *args, **kwargs):
result = super(
DocumentVersionView, self
).dispatch(request, *args, **kwargs)
self.get_object().document.add_as_recent_document_for_user(
request.user
)
event_document_view.commit(
actor=request.user, target=self.get_object().document
)
return result
def get_extra_context(self):
return {
'hide_labels': True,
'object': self.get_object(),
'title': _('Preview of document version: %s') % self.get_object(),
}