Convert events app views to CBV.
This commit is contained in:
@@ -22,6 +22,7 @@ from converter.permissions import (
|
|||||||
permission_transformation_delete, permission_transformation_edit,
|
permission_transformation_delete, permission_transformation_edit,
|
||||||
permission_transformation_view,
|
permission_transformation_view,
|
||||||
)
|
)
|
||||||
|
from events.links import link_events_for_object
|
||||||
from events.permissions import permission_events_view
|
from events.permissions import permission_events_view
|
||||||
from mayan.celery import app
|
from mayan.celery import app
|
||||||
from navigation import SourceColumn
|
from navigation import SourceColumn
|
||||||
@@ -32,11 +33,10 @@ from .handlers import create_default_document_type
|
|||||||
from .links import (
|
from .links import (
|
||||||
link_clear_image_cache, link_document_clear_transformations,
|
link_clear_image_cache, link_document_clear_transformations,
|
||||||
link_document_delete, link_document_document_type_edit,
|
link_document_delete, link_document_document_type_edit,
|
||||||
link_document_events_view, link_document_multiple_document_type_edit,
|
link_document_multiple_document_type_edit, link_document_download,
|
||||||
link_document_download, link_document_edit, link_document_list,
|
link_document_edit, link_document_list, link_document_list_deleted,
|
||||||
link_document_list_deleted, link_document_list_recent,
|
link_document_list_recent, link_document_multiple_delete,
|
||||||
link_document_multiple_delete, link_document_multiple_trash,
|
link_document_multiple_trash, link_document_multiple_clear_transformations,
|
||||||
link_document_multiple_clear_transformations,
|
|
||||||
link_document_multiple_download, link_document_multiple_restore,
|
link_document_multiple_download, link_document_multiple_restore,
|
||||||
link_document_multiple_update_page_count,
|
link_document_multiple_update_page_count,
|
||||||
link_document_page_navigation_first, link_document_page_navigation_last,
|
link_document_page_navigation_first, link_document_page_navigation_last,
|
||||||
@@ -147,7 +147,7 @@ class DocumentsApp(MayanAppConfig):
|
|||||||
menu_facet.bind_links(links=[link_acl_list], sources=[Document])
|
menu_facet.bind_links(links=[link_acl_list], sources=[Document])
|
||||||
menu_facet.bind_links(links=[link_document_preview], sources=[Document], position=0)
|
menu_facet.bind_links(links=[link_document_preview], sources=[Document], position=0)
|
||||||
menu_facet.bind_links(links=[link_document_properties], sources=[Document], position=2)
|
menu_facet.bind_links(links=[link_document_properties], sources=[Document], position=2)
|
||||||
menu_facet.bind_links(links=[link_document_events_view, link_document_version_list], sources=[Document], position=2)
|
menu_facet.bind_links(links=[link_events_for_object, link_document_version_list], sources=[Document], position=2)
|
||||||
menu_facet.bind_links(links=[link_document_pages], sources=[Document])
|
menu_facet.bind_links(links=[link_document_pages], sources=[Document])
|
||||||
|
|
||||||
# Document actions
|
# Document actions
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from converter.permissions import permission_transformation_delete
|
from converter.permissions import permission_transformation_delete
|
||||||
from events.permissions import permission_events_view
|
|
||||||
from navigation import Link
|
from navigation import Link
|
||||||
|
|
||||||
from .permissions import (
|
from .permissions import (
|
||||||
@@ -39,7 +38,6 @@ def is_min_zoom(context):
|
|||||||
|
|
||||||
|
|
||||||
# Facet
|
# Facet
|
||||||
link_document_events_view = Link(permissions=[permission_events_view], text=_('Events'), view='events:events_for_object', args=['"documents"', '"document"', 'object.id'])
|
|
||||||
link_document_preview = Link(permissions=[permission_document_view], text=_('Preview'), view='documents:document_preview', args='object.id')
|
link_document_preview = Link(permissions=[permission_document_view], text=_('Preview'), view='documents:document_preview', args='object.id')
|
||||||
link_document_properties = Link(permissions=[permission_document_view], text=_('Properties'), view='documents:document_properties', args='object.id')
|
link_document_properties = Link(permissions=[permission_document_view], text=_('Properties'), view='documents:document_properties', args='object.id')
|
||||||
link_document_version_list = Link(permissions=[permission_document_view], text=_('Versions'), view='documents:document_version_list', args='object.pk')
|
link_document_version_list = Link(permissions=[permission_document_view], text=_('Versions'), view='documents:document_version_list', args='object.pk')
|
||||||
|
|||||||
@@ -1,7 +1,20 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from navigation import Link
|
from navigation import Link
|
||||||
|
|
||||||
link_events_list = Link(icon='fa fa-list-ol', text=_('Events'), view='events:events_list')
|
from .permissions import permission_events_view
|
||||||
|
|
||||||
|
|
||||||
|
def get_kwargs_factory(variable_name):
|
||||||
|
def get_kwargs(context):
|
||||||
|
content_type = ContentType.objects.get_for_model(context[variable_name])
|
||||||
|
return {'app_label': '"{}"'.format(content_type.app_label), 'model': '"{}"'.format(content_type.model), 'object_id': '{}.pk'.format(variable_name)}
|
||||||
|
|
||||||
|
return get_kwargs
|
||||||
|
|
||||||
|
|
||||||
|
link_events_list = Link(icon='fa fa-list-ol', permissions=[permission_events_view], text=_('Events'), view='events:events_list')
|
||||||
|
link_events_for_object = Link(permissions=[permission_events_view], text=_('Events'), view='events:events_for_object', kwargs=get_kwargs_factory('resolved_object'))
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
|
from .views import EventListView, ObjectEventListView, VerbEventListView
|
||||||
|
|
||||||
urlpatterns = patterns(
|
urlpatterns = patterns(
|
||||||
'events.views',
|
'events.views',
|
||||||
url(r'^all/$', 'events_list', name='events_list'),
|
url(r'^all/$', EventListView.as_view(), name='events_list'),
|
||||||
url(r'^for_object/(?P<app_label>[\w\-]+)/(?P<module_name>[\w\-]+)/(?P<object_id>\d+)/$', 'events_list', name='events_for_object'),
|
url(r'^for/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/$', ObjectEventListView.as_view(), name='events_for_object'),
|
||||||
url(r'^by_verb/(?P<verb>[\w\-]+)/$', 'events_list', name='events_by_verb'),
|
url(r'^by_verb/(?P<verb>[\w\-]+)/$', VerbEventListView.as_view(), name='events_by_verb'),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.db.models.loading import get_model
|
from django.db.models.loading import get_model
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
@@ -11,6 +12,7 @@ from actstream.models import Action, any_stream
|
|||||||
|
|
||||||
from acls.models import AccessControlList
|
from acls.models import AccessControlList
|
||||||
from common.utils import encapsulate
|
from common.utils import encapsulate
|
||||||
|
from common.views import SingleObjectListView
|
||||||
from permissions import Permission
|
from permissions import Permission
|
||||||
|
|
||||||
from .classes import Event
|
from .classes import Event
|
||||||
@@ -18,71 +20,66 @@ from .permissions import permission_events_view
|
|||||||
from .widgets import event_object_link
|
from .widgets import event_object_link
|
||||||
|
|
||||||
|
|
||||||
def events_list(request, app_label=None, module_name=None, object_id=None, verb=None):
|
class EventListView(SingleObjectListView):
|
||||||
extra_columns = []
|
view_permission = permission_events_view
|
||||||
|
|
||||||
context = {
|
def get_queryset(self):
|
||||||
'extra_columns': extra_columns,
|
return Action.objects.all()
|
||||||
'hide_object': True,
|
|
||||||
}
|
|
||||||
|
|
||||||
if app_label and module_name and object_id:
|
def get_extra_context(self):
|
||||||
model = get_model(app_label, module_name)
|
return {
|
||||||
if not model:
|
'extra_columns': [
|
||||||
raise Http404
|
|
||||||
content_object = get_object_or_404(model, pk=object_id)
|
|
||||||
|
|
||||||
try:
|
|
||||||
Permission.check_permissions(request.user, [permission_events_view])
|
|
||||||
except PermissionDenied:
|
|
||||||
AccessControlList.objects.check_access(permission_events_view, request.user, content_object)
|
|
||||||
|
|
||||||
context.update({
|
|
||||||
'object_list': any_stream(content_object),
|
|
||||||
'title': _('Events for: %s') % content_object,
|
|
||||||
'object': content_object
|
|
||||||
})
|
|
||||||
elif verb:
|
|
||||||
pre_object_list = Action.objects.filter(verb=verb)
|
|
||||||
|
|
||||||
try:
|
|
||||||
Permission.check_permissions(request.user, [permission_events_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
|
|
||||||
object_list = AccessControlList.objects.filter_by_access(permission_events_view, request.user, pre_object_list, related='content_object')
|
|
||||||
else:
|
|
||||||
object_list = pre_object_list
|
|
||||||
|
|
||||||
context.update({
|
|
||||||
'title': _('Events of type: %s') % Event.get_label(verb),
|
|
||||||
'object_list': object_list
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
pre_object_list = Action.objects.all()
|
|
||||||
|
|
||||||
try:
|
|
||||||
Permission.check_permissions(request.user, [permission_events_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
|
|
||||||
object_list = AccessControlList.objects.filter_by_access(permission_events_view, request.user, pre_object_list, related='content_object')
|
|
||||||
else:
|
|
||||||
object_list = pre_object_list
|
|
||||||
|
|
||||||
context.update({
|
|
||||||
'title': _('Events'),
|
|
||||||
'object_list': object_list
|
|
||||||
})
|
|
||||||
|
|
||||||
if not (app_label and module_name and object_id):
|
|
||||||
extra_columns.append(
|
|
||||||
{
|
{
|
||||||
'name': _('Target'),
|
'name': _('Target'),
|
||||||
'attribute': encapsulate(lambda entry: event_object_link(entry))
|
'attribute': encapsulate(lambda entry: event_object_link(entry))
|
||||||
}
|
}
|
||||||
)
|
],
|
||||||
return render_to_response('appearance/generic_list.html', context,
|
'hide_object': True,
|
||||||
context_instance=RequestContext(request))
|
'title': _('Events'),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectEventListView(EventListView):
|
||||||
|
view_permissions = None
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
self.content_type = get_object_or_404(ContentType, app_label=self.kwargs['app_label'], model=self.kwargs['model'])
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.content_object = self.content_type.get_object_for_this_type(pk=self.kwargs['object_id'])
|
||||||
|
except self.content_type.model_class().DoesNotExist:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
try:
|
||||||
|
Permission.check_permissions(request.user, permissions=(permission_events_view,))
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(permission_events_view, request.user, self.content_object)
|
||||||
|
|
||||||
|
return super(ObjectEventListView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return any_stream(self.content_object)
|
||||||
|
|
||||||
|
def extra_context(self):
|
||||||
|
return {
|
||||||
|
'hide_object': True,
|
||||||
|
'object': self.content_object,
|
||||||
|
'title': _('Events for: %s') % self.content_object,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class VerbEventListView(SingleObjectListView):
|
||||||
|
def get_queryset(self):
|
||||||
|
return Action.objects.filter(verb=self.kwargs['verb'])
|
||||||
|
|
||||||
|
def get_extra_context(self):
|
||||||
|
return {
|
||||||
|
'extra_columns': [
|
||||||
|
{
|
||||||
|
'name': _('Target'),
|
||||||
|
'attribute': encapsulate(lambda entry: event_object_link(entry))
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'hide_object': True,
|
||||||
|
'title': _('Events of type: %s') % Event.get_label(self.kwargs['verb']),
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user