Files
mayan-edms/mayan/apps/history/views.py

106 lines
3.9 KiB
Python

from __future__ import absolute_import
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.db.models.loading import get_model
from django.http import Http404
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _
from acls.models import AccessEntry
from common.utils import encapsulate
from permissions.models import Permission
from .forms import HistoryDetailForm
from .models import History, HistoryType
from .permissions import PERMISSION_HISTORY_VIEW
from .widgets import history_entry_object_link
def history_list(request, object_list=None, title=None, extra_context=None):
pre_object_list = object_list if not (object_list is None) else History.objects.all()
try:
Permission.objects.check_permissions(request.user, [PERMISSION_HISTORY_VIEW])
except PermissionDenied:
# If user doesn't have global permission, get a list of document
# for which he/she does hace access use it to filter the
# provided object_list
final_object_list = AccessEntry.objects.filter_objects_by_access(PERMISSION_HISTORY_VIEW, request.user, pre_object_list, related='content_object')
else:
final_object_list = pre_object_list
context = {
'object_list': final_object_list,
'title': title if title else _(u'History events'),
'extra_columns': [
{
'name': _(u'Object link'),
'attribute': encapsulate(lambda x: history_entry_object_link(x))
},
],
'hide_object': True,
}
if extra_context:
context.update(extra_context)
return render_to_response('main/generic_list.html', context,
context_instance=RequestContext(request))
def history_for_object(request, app_label, module_name, object_id):
model = get_model(app_label, module_name)
if not model:
raise Http404
content_object = get_object_or_404(model, pk=object_id)
content_type = ContentType.objects.get_for_model(model)
try:
Permission.objects.check_permissions(request.user, [PERMISSION_HISTORY_VIEW])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_HISTORY_VIEW, request.user, content_object)
context = {
'object_list': History.objects.filter(content_type=content_type, object_id=object_id),
'title': _(u'History events for: %s') % content_object,
'object': content_object,
'hide_object': True,
}
return render_to_response('main/generic_list.html', context,
context_instance=RequestContext(request))
def history_view(request, object_id):
history = get_object_or_404(History, pk=object_id)
try:
Permission.objects.check_permissions(request.user, [PERMISSION_HISTORY_VIEW])
except PermissionDenied:
AccessEntry.objects.check_access(PERMISSION_HISTORY_VIEW, request.user, history.content_object)
form = HistoryDetailForm(instance=history, extra_fields=[
{'label': _(u'Date'), 'field': lambda x: x.datetime.date()},
{'label': _(u'Time'), 'field': lambda x: unicode(x.datetime.time()).split('.')[0]},
{'label': _(u'Object'), 'field': 'content_object'},
{'label': _(u'Event type'), 'field': lambda x: x.get_label()},
{'label': _(u'Additional details'), 'field': lambda x: x.get_processed_details() or _(u'None')},
])
return render_to_response('main/generic_detail.html', {
'title': _(u'Details for: %s') % history.get_processed_summary(),
'form': form,
}, context_instance=RequestContext(request))
def history_type_list(request, history_type_pk):
history_type = get_object_or_404(HistoryType, pk=history_type_pk)
return history_list(
request,
object_list=History.objects.filter(history_type=history_type),
title=_(u'History events of type: %s') % history_type,
)