diff --git a/mayan/apps/document_indexing/urls.py b/mayan/apps/document_indexing/urls.py index a09af91b28..82ae9b714c 100644 --- a/mayan/apps/document_indexing/urls.py +++ b/mayan/apps/document_indexing/urls.py @@ -8,9 +8,9 @@ from .api_views import ( APIIndexTemplateView, APIIndexView ) from .views import ( - IndexInstanceNodeView, IndexListView, SetupIndexDocumentTypesView, - SetupIndexCreateView, SetupIndexDeleteView, SetupIndexEditView, - SetupIndexListView + DocumentIndexNodeListView, IndexInstanceNodeView, IndexListView, + SetupIndexDocumentTypesView, SetupIndexCreateView, SetupIndexDeleteView, + SetupIndexEditView, SetupIndexListView, SetupIndexTreeTemplateListView ) urlpatterns = patterns( @@ -32,8 +32,8 @@ urlpatterns = patterns( name='index_setup_delete' ), url( - r'^setup/index/(?P\d+)/view/$', 'index_setup_view', - name='index_setup_view' + r'^setup/index/(?P\d+)/template/$', + SetupIndexTreeTemplateListView.as_view(), name='index_setup_view' ), url( r'^setup/index/(?P\d+)/document_types/$', @@ -63,8 +63,8 @@ urlpatterns = patterns( name='rebuild_index_instances' ), url( - r'^list/for/document/(?P\d+)/$', 'document_index_list', - name='document_index_list' + r'^list/for/document/(?P\d+)/$', + DocumentIndexNodeListView.as_view(), name='document_index_list' ), ) diff --git a/mayan/apps/document_indexing/views.py b/mayan/apps/document_indexing/views.py index e96b87727a..bd3515ee1a 100644 --- a/mayan/apps/document_indexing/views.py +++ b/mayan/apps/document_indexing/views.py @@ -88,49 +88,39 @@ class SetupIndexDeleteView(SingleObjectDeleteView): } -def index_setup_view(request, index_pk): - index = get_object_or_404(Index, pk=index_pk) +class SetupIndexTreeTemplateListView(SingleObjectListView): + view_permission = permission_document_indexing_setup - try: - Permission.check_permissions( - request.user, (permission_document_indexing_setup,) - ) - except PermissionDenied: - AccessControlList.objects.check_access( - permission_document_indexing_setup, request.user, index - ) + def get_index(self): + return get_object_or_404(Index, pk=self.kwargs['pk']) - object_list = index.template_root.get_descendants(include_self=True) + def get_queryset(self): + return self.get_index().template_root.get_descendants(include_self=True) - context = { - 'object_list': object_list, - 'index': index, - 'navigation_object_list': ('index',), - 'title': _('Tree template nodes for index: %s') % index, - 'hide_object': True, - 'extra_columns': [ - { - 'name': _('Level'), 'attribute': encapsulate( - lambda x: node_level(x) - ) - }, - { - 'name': _('Enabled'), 'attribute': encapsulate( - lambda x: two_state_template(x.enabled) - ) - }, - { - 'name': _('Has document links?'), 'attribute': encapsulate( - lambda x: two_state_template(x.link_documents) - ) - }, - ], - } - - return render_to_response( - 'appearance/generic_list.html', context, - context_instance=RequestContext(request) - ) + def get_extra_context(self): + return { + 'extra_columns': ( + { + 'name': _('Level'), 'attribute': encapsulate( + lambda node: node_level(node) + ) + }, + { + 'name': _('Enabled'), 'attribute': encapsulate( + lambda node: two_state_template(node.enabled) + ) + }, + { + 'name': _('Has document links?'), 'attribute': encapsulate( + lambda node: two_state_template(node.link_documents) + ) + }, + ), + 'hide_object': True, + 'index': self.get_index(), + 'navigation_object_list': ('index',), + 'title': _('Tree template nodes for index: %s') % self.get_index(), + } class SetupIndexDocumentTypesView(AssignRemoveView): @@ -434,38 +424,49 @@ def rebuild_index_instances(request): return HttpResponseRedirect(next) -def document_index_list(request, document_id): +class DocumentIndexNodeListView(SingleObjectListView): """ Show a list of indexes where the current document can be found """ - document = get_object_or_404(Document, pk=document_id) - object_list = [] + object_permission = permission_document_indexing_view + object_permission_related = 'index' - queryset = document.node_instances.all() - try: - # TODO: should be AND not OR - Permission.check_permissions( - request.user, ( - permission_document_view, permission_document_indexing_view + def dispatch(self, request, *args, **kwargs): + try: + Permission.check_permissions( + request.user, (permission_document_view,) ) - ) - except PermissionDenied: - queryset = AccessControlList.objects.filter_by_access( - permission_document_indexing_view, request.user, queryset, - related='index' - ) - - for index_instance in queryset: - object_list.append( - get_breadcrumbs( - index_instance, single_link=True, include_count=True + except PermissionDenied: + AccessControlList.objects.check_access( + permission_document_view, request.user, self.get_document() ) - ) - return render_to_response('appearance/generic_list.html', { - 'object_list': object_list, - 'object': document, - 'hide_link': True, - 'title': _('Indexes containing document: %s') % document, - }, context_instance=RequestContext(request)) + return super( + DocumentIndexNodeListView, 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 { + 'extra_columns': ( + { + 'name': _('Node'), + 'attribute': encapsulate( + lambda node: get_breadcrumbs( + index_instance_node=node, single_link=True, include_count=True + ) + ) + }, + ), + 'hide_object': True, + 'object': self.get_document(), + 'title': _( + 'Indexes nodes containing document: %s' + ) % self.get_document(), + } + + def get_queryset(self): + return self.get_document().node_instances.all() diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index 61c2a513b7..ab9f984e2c 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -115,25 +115,22 @@ class WorkflowInstanceDetailView(SingleObjectListView): WorkflowInstanceDetailView, self ).dispatch(request, *args, **kwargs) - def get_workflow_instance(self): - return get_object_or_404(WorkflowInstance, pk=self.kwargs['pk']) - - def get_queryset(self): - return self.get_workflow_instance().log_entries.order_by('-datetime') - - def get_context_data(self, **kwargs): - context = { + def get_extra_context(self): + return { 'hide_object': True, 'navigation_object_list': ('object', 'workflow_instance'), 'object': self.get_workflow_instance().document, - 'object_list': self.get_queryset(), 'title': _('Detail of workflow: %(workflow)s') % { 'workflow': self.get_workflow_instance() }, 'workflow_instance': self.get_workflow_instance(), } - return context + def get_queryset(self): + return self.get_workflow_instance().log_entries.order_by('-datetime') + + def get_workflow_instance(self): + return get_object_or_404(WorkflowInstance, pk=self.kwargs['pk']) class WorkflowInstanceTransitionView(FormView): diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index a510e58c38..3a0440c389 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -1009,10 +1009,12 @@ class DocumentTypeFilenameListView(SingleObjectListView): ), 'hide_link': True, 'navigation_object_list': ('document_type',), - 'object_list': self.get_document_type().filenames.all(), 'title': _('Filenames for document type: %s') % self.get_document_type(), } + def get_queryset(self): + return self.get_document_type().filenames.all() + class DocumentTypeFilenameEditView(SingleObjectEditView): fields = ('enabled', 'filename',) diff --git a/mayan/apps/statistics/views.py b/mayan/apps/statistics/views.py index 6a4470eefe..a1b56441b6 100644 --- a/mayan/apps/statistics/views.py +++ b/mayan/apps/statistics/views.py @@ -1,52 +1,62 @@ from __future__ import unicode_literals +from django.http import Http404 from django.utils.translation import ugettext_lazy as _ -from common.views import SimpleView +from common.views import SingleObjectListView from .classes import Statistic, StatisticNamespace from .permissions import permission_statistics_view -class NamespaceListView(SimpleView): +class NamespaceListView(SingleObjectListView): + extra_context = { + 'hide_link': True, + 'title': _('Statistics namespaces'), + } + template_name = 'appearance/generic_list.html' + view_permission = permission_statistics_view + + def get_queryset(self): + return StatisticNamespace.get_all() + + +class NamespaceDetailView(SingleObjectListView): template_name = 'appearance/generic_list.html' view_permission = permission_statistics_view def get_extra_context(self): return { 'hide_link': True, - 'object_list': StatisticNamespace.get_all(), - 'title': _('Statistics namespaces'), + 'object': self.get_namespace(), + 'title': _('Namespace details for: %s') % self.get_namespace(), } + def get_namespace(self): + return StatisticNamespace.get(self.kwargs['namespace_id']) -class NamespaceDetailView(SimpleView): + def get_queryset(self): + return self.get_namespace().statistics + + +class StatisticExecute(SingleObjectListView): template_name = 'appearance/generic_list.html' view_permission = permission_statistics_view def get_extra_context(self): - namespace = StatisticNamespace.get(self.kwargs['namespace_id']) - return { 'hide_link': True, - 'object': namespace, - 'object_list': namespace.statistics, - 'title': _('Namespace details for: %s') % namespace, - } - - -class StatisticExecute(SimpleView): - template_name = 'appearance/generic_list.html' - view_permission = permission_statistics_view - - def get_extra_context(self): - statictic = Statistic.get(self.kwargs['statistic_id']) - - return { - 'hide_link': True, - 'namespace': statictic.namespace, + 'namespace': self.get_statictic().namespace, 'navigation_object_list': ('namespace', 'object'), - 'object': statictic, - 'object_list': statictic.get_results(), - 'title': _('Results for: %s') % statictic, + 'object': self.get_statictic(), + 'title': _('Results for: %s') % self.get_statictic(), } + + def get_queryset(self): + return self.get_statictic().get_results() + + def get_statictic(self): + try: + return Statistic.get(self.kwargs['statistic_id']) + except KeyError: + raise Http404(_('Statistic "%s" not found.') % self.kwargs['statistic_id'])