Convert index instance view to CBV. Add smart document count to index instance view.
This commit is contained in:
@@ -8,7 +8,8 @@ from .api_views import (
|
||||
APIIndexTemplateView, APIIndexView
|
||||
)
|
||||
from .views import (
|
||||
IndexListView, SetupIndexDocumentTypesView, SetupIndexListView,
|
||||
IndexInstanceNodeView, IndexListView, SetupIndexDocumentTypesView,
|
||||
SetupIndexListView,
|
||||
)
|
||||
|
||||
|
||||
@@ -26,7 +27,7 @@ urlpatterns = patterns(
|
||||
url(r'^setup/template/node/(?P<node_pk>\d+)/delete/$', 'template_node_delete', name='template_node_delete'),
|
||||
|
||||
url(r'^index/list/$', IndexListView.as_view(), name='index_list'),
|
||||
url(r'^instance/node/(?P<index_instance_node_pk>\d+)/$', 'index_instance_node_view', name='index_instance_node_view'),
|
||||
url(r'^instance/node/(?P<pk>\d+)/$', IndexInstanceNodeView.as_view(), name='index_instance_node_view'),
|
||||
|
||||
url(r'^rebuild/all/$', 'rebuild_index_instances', name='rebuild_index_instances'),
|
||||
url(r'^list/for/document/(?P<document_id>\d+)/$', 'document_index_list', name='document_index_list'),
|
||||
|
||||
@@ -16,7 +16,7 @@ from common.views import AssignRemoveView, SingleObjectListView
|
||||
from common.widgets import two_state_template
|
||||
from documents.models import Document, DocumentType
|
||||
from documents.permissions import permission_document_view
|
||||
from documents.views import document_list
|
||||
from documents.views import DocumentListView
|
||||
from permissions import Permission
|
||||
|
||||
from .forms import IndexForm, IndexTemplateNodeForm
|
||||
@@ -299,6 +299,69 @@ class IndexListView(SingleObjectListView):
|
||||
}
|
||||
|
||||
|
||||
class IndexInstanceNodeView(DocumentListView):
|
||||
@staticmethod
|
||||
def get_item_count(instance, user):
|
||||
if instance.index_template_node.link_documents:
|
||||
queryset = instance.documents
|
||||
|
||||
try:
|
||||
Permission.check_permissions(user, [permission_document_view])
|
||||
except PermissionDenied:
|
||||
queryset = AccessControlList.objects.filter_by_access(permission_document_view, user, queryset)
|
||||
|
||||
return queryset.count()
|
||||
else:
|
||||
return instance.get_children().count()
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.index_instance = get_object_or_404(IndexInstanceNode, pk=self.kwargs['pk'])
|
||||
|
||||
try:
|
||||
Permission.check_permissions(request.user, [permission_document_indexing_view])
|
||||
except PermissionDenied:
|
||||
AccessControlList.objects.check_access(permission_document_indexing_view, request.user, self.index_instance.index)
|
||||
|
||||
return super(IndexInstanceNodeView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_document_queryset(self):
|
||||
if self.index_instance:
|
||||
if self.index_instance.index_template_node.link_documents:
|
||||
return self.index_instance.documents.all()
|
||||
else:
|
||||
self.object_permission = None
|
||||
return self.index_instance.get_children().order_by('value')
|
||||
else:
|
||||
self.object_permission = None
|
||||
return IndexInstanceNode.objects.none()
|
||||
|
||||
def get_extra_context(self):
|
||||
context = {
|
||||
'hide_links': True,
|
||||
'object': self.index_instance,
|
||||
'title': mark_safe(_('Contents for index: %s') % get_breadcrumbs(self.index_instance))
|
||||
}
|
||||
|
||||
if self.index_instance and not self.index_instance.index_template_node.link_documents:
|
||||
context.update(
|
||||
{
|
||||
'extra_columns': [
|
||||
{
|
||||
'name': _('Node'),
|
||||
'attribute': encapsulate(lambda x: index_instance_item_link(x))
|
||||
},
|
||||
{
|
||||
'name': _('Items'),
|
||||
'attribute': encapsulate(lambda instance: IndexInstanceNodeView.get_item_count(instance=instance, user=self.request.user))
|
||||
}
|
||||
],
|
||||
'hide_object': True,
|
||||
}
|
||||
)
|
||||
|
||||
return context
|
||||
|
||||
|
||||
def index_instance_node_view(request, index_instance_node_pk):
|
||||
"""
|
||||
Show an instance node and it's content, whether is other child nodes
|
||||
|
||||
Reference in New Issue
Block a user