Files
mayan-edms/mayan/apps/navigation/utils.py
Roberto Rosario 25edc73100 Add support for sortable columns
Add a new argument to the SourceColumn class to flag a column as
sortable. The SourceColum will generate a request querystring to
be used as the table header archor href. The SingleObjectListView
will capture the querystring and call the order_by on the queryset
to sort it.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2018-12-23 05:11:14 -04:00

63 lines
2.0 KiB
Python

from __future__ import absolute_import, unicode_literals
import logging
from django.apps import apps
from django.core.exceptions import PermissionDenied
from django.urls import Resolver404, resolve
from mayan.apps.permissions import Permission
logger = logging.getLogger(__name__)
def get_cascade_condition(app_label, model_name, object_permission, view_permission=None):
"""
Return a function that first checks to see if the user has the view
permission. If not, then filters the objects with the object permission
and return True if there is at least one item in the filtered queryset.
This is used to avoid showing a link that ends up in a view with an
empty results set.
"""
def condition(context):
AccessControlList = apps.get_model(
app_label='acls', model_name='AccessControlList'
)
Model = apps.get_model(app_label=app_label, model_name=model_name)
if view_permission:
try:
Permission.check_permissions(
requester=context.request.user,
permissions=(view_permission,)
)
except PermissionDenied:
pass
else:
return True
queryset = AccessControlList.objects.filter_by_access(
permission=object_permission, user=context.request.user,
queryset=Model.objects.all()
)
return queryset.count() > 0
return condition
def get_current_view_name(request):
current_path = request.META['PATH_INFO']
# Get sources: view name, view objects
try:
current_view_name = resolve(current_path).view_name
except Resolver404:
# Can't figure out which view corresponds to this URL.
# Most likely it is an invalid URL.
logger.warning(
'Can\'t figure out which view corresponds to this '
'URL: %s; aborting menu resolution.', current_path
)
else:
return current_view_name